2012-01-04 2 views
3

В настоящее время я работаю в компании, и мой работодатель попросил меня создать базу данных передач, сборов, кредитов и т. Д. Для нового рынка, в котором они находятся. Я создал небольшую программу java, которая загружает около 130 CSV с данными, некоторые пустые, а некоторые нет. Затем программа удаляет пустые.VBA создание/обновление произвольного количества таблиц доступа

Они выполняют большую часть своей работы в Access, которую я изучаю быстро, но это не моя сильная сторона. Я написал несколько программ/сценариев VBA для своих продавцов и для автоматизации, и теперь я хочу добавить код в эту базу данных Access, которую я делаю, чтобы ее программно обновлять.

Проблема заключается в том, что я могу видеть, как создавать/обновлять эти таблицы с данными, которые я загружаю, - это индивидуально построить все 130 из них и индивидуально конструировать запросы SELECT и INSERT для каждого отдельного отчета. Однако, поскольку таблица может иметь или не иметь данные для заданного диапазона дат, мне нужно будет построить ВСЕ таблицы и запросы.

Исходя из фона программирования, я хотел бы его там быть высокий уровень абстракции, где я мог бы сделать что-то вроде этого

For each file f in Directory d 
    Get report title 
    If there is a table with the same report title 
     Insert any unique values into that table 
    If there isn't a table with that report title 
     Create it, and then insert unique values into that table 
End 

Однако, это на самом деле не глядя, как я буду в состоянии сделать что-то вроде этого.

Я рассматриваю другой метод, где я

  1. Написать отчеты, чтобы новый CSV-файл, который содержит только элементы строки (не заголовков)
  2. Выставьте связанные таблицы для этих отчетов
  3. Создайте кучу консервированных импортов с помощью мастера

У меня осталось еще пару недель с этой компанией, поэтому я разорван между поиском решения или просто прагматичным и просто установленным настраивая логику для основного набора отчетов, в которых всегда должны быть данные. Любая помощь/предложения будут оценены.

ответ

1

Вы можете наиболее определенно сделать то, что вы резюме высокого уровня утверждает Том, это вам нужно в этом районе:

FileSystemObject (Это может перебрать файлы в папке, а также дать вам имя файла)

TableDefs (Может извлекать имена таблиц из базы данных)

Я бы рекомендовал загрузить файл в временную таблицу с помощью FileSystemObject, затем вы можете использовать свойство TableDefs для подтверждения наличия соответствующей таблицы. Если это так, вы можете использовать SQL, который Remou предоставил для вставки только строк, которые еще не находятся там. Если таблица не существует, то вы могли бы просто использовать следующий SQL, чтобы создать новую таблицу с данными:

SELECT * INTO NewTableName FROM TempTableName 

Там не совсем достаточно для меня, чтобы идти, чтобы написать процедуру, но эти два свойства должны возьмите вас в правильном направлении, отправьте сообщение, если вы застряли с ними.

Удачи:)

0

с доступом, вы можете включить в линию связи, например:

scn = "[Text;FMT=Delimited;HDR=Yes;DATABASE=Z:\Docs\TXT_CSV]" 

ssql = "SELECT * FROM TestTable " _ 
& "WHERE ID Not In (SELECT ID FROM " & scn & ".[TestIn.CSV])" 

ssql = "SELECT * FROM " & scn & ".[TestIn.CSV] " _ 
& "WHERE ID Not In (SELECT ID FROM TestTable)" 

Это означает, что вы можете вставить только те записи, которые ранее не вставленные довольно легко, до тех пор, пока у вас есть уникальное поле/с (колонок/с).

+0

Какой тип объекта является scn? Редактировать Я понимаю его строку, но вы используете ее для подключения к базе данных на лету? Я думаю, если бы вы могли объяснить свой код немного больше, я бы это оценил. – Tom

+0

@Tom. У вас есть строка SQL, которая может использоваться, например, с помощью объекта recordset - вы даже можете взять финальную строку и вставить ее в SQL вид окна дизайна запроса, и он будет запущен. Он предназначен как пример подключения к двум источникам одновременно, а не как полный код, потому что я не уверен, в какой среде вы работаете. – Fionnuala

Смежные вопросы