Автоматически заполнять базу данных Access из скрипта

У меня есть скрипт, который загружает данные из базы данных в серию файлов CSV. После загрузки их необходимо загрузить в базу данных Access для составления отчетов (я использую DoCmd.TransferText и имею сохраненную спецификацию импорта текста). Каждый раз, когда я запускаю задание, которое генерирует данные и загружает их в CSV, мне обычно нужно загрузить новую копию незаполненной версии базы данных Access. Есть ли способ автоматизировать это в пакетном сценарии?

Короче говоря, мне нужно уметь:

  • скопируйте незаполненный файл Access в новый файл с отметкой времени в имени
  • загрузите определенные файлы CSV, соответствующие шаблону (например, «data_for_reporting_2_20111024_135142.csv») в каталоге, в файл Access.

person FrustratedWithFormsDesigner    schedule 24.10.2011    source источник
comment
Можно ли импортировать данные из другой базы данных непосредственно в Access... без использования CSV-файлов в качестве промежуточного шага? Если это так, это должно быть проще.   -  person HansUp    schedule 24.10.2011
comment
@HansUp: технически это возможно, но поскольку отчеты в формате CSV уже создаются и используются другими пользователями/инструментами, я бы предпочел использовать то, что у меня уже есть, тем более что данных может быть МНОГО, а я не Не хочу тратить время на ожидание, чтобы извлечь его дважды. Это также потребует: установки драйверов Oracle на компьютеры пользователей, которые используют эти отчеты (много административных накладных расходов), или копирования данных из базы данных извлечения в другую, более статическую базу данных, что может работать, но кажется слишком много шагов. Я хотел бы, чтобы процесс был максимально простым.   -  person FrustratedWithFormsDesigner    schedule 24.10.2011


Ответы (1)


Я думаю, вы можете использовать VBScript, чтобы делать то, что вам нужно.

  • скопируйте незаполненный файл Access в новый файл с отметкой времени в имени

    FileSystemObject.CopyFile "c:\somefolder\template.mdb", "c:\dest\new.mdb"

См. метод CopyFile.

  • загрузите определенные файлы CSV, соответствующие шаблону (например, «data_for_reporting
    appAccess.DoCmd.TransferText [your options]
    
    20111024_135142.csv») в каталоге, в файл Access.

Вы можете изучить Коллекцию файлов вашего CSV-файла. папку, определите, какие из этих имен файлов соответствуют вашему целевому шаблону, а затем запустите DoCmd.TransferText с каждым совпадающим именем файла.

Вы должны запустить DoCmd.TransferText из экземпляра приложения Access:

Option Explicit
Dim appAccess
Dim strMdb
Const cstrFolder = "c:\dest\"

strMdb = "new.mdb"

Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase cstrFolder & strMdb, False

Итак, сделайте Transfertext из этой переменной экземпляра:

appAccess.DoCmd.TransferText [your options]

Изменить: мне было бы быстрее создавать и тестировать в VBA. Так что я думаю, что я бы использовал это вместо VBScript.

Создайте функцию SnarfCSV в стандартном модуле в шаблоне MDB. Затем создайте макрос mcrSnarfCSV с функцией SnarfCSV в качестве действия кода выполнения. Затем, после того как вы скопируете шаблон MDB в новый MDB, откройте новый с помощью переключателя командной строки /x, чтобы запустить макрос.

"Path to MSACCESS.EXE" "Path to your db file" /x mcrSnarfCSV
person HansUp    schedule 24.10.2011
comment
Итак, как мне вызвать все это из сценария? В конечном счете, я хотел бы добавить это как последнюю строку в свой скрипт, как одну последнюю строку, которая выполняет prepare_access_reports.bat, а затем точно так же у меня есть новые отчеты Access. - person FrustratedWithFormsDesigner; 24.10.2011
comment
О, дерьмо! Когда вы впервые сказали, что у меня есть скрипт, я подумал, что вы имеете в виду VBScript. Извините, я слишком ржавый на .bat - person HansUp; 24.10.2011
comment
Ну, в настоящее время все работает из сценария SQLPlus, но похоже, что я могу вызывать VBScript с помощью команды host, аля host "wscript.exe test.vbs", так что это все еще может работать... Мне придется немного изучить VBScript, а затем дать ему выстрелил. VBScript обычно развернут по умолчанию? Если бы я мог установить новые компоненты на машины пользователей, я бы в первую очередь выбрал клиент Oracle. - person FrustratedWithFormsDesigner; 24.10.2011
comment
Честно говоря, я не уверен, всегда ли он доступен. Мне не нужно было ничего дополнительно устанавливать для запуска VBScript с Windows 7 и 2003. В настоящее время у меня нет других версий Windows. - person HansUp; 24.10.2011
comment
Все здесь используют WinXP SP3, и тест VBScript прошел на моей машине без каких-либо проблем, так что я полагаю, что он будет нормально работать и на машинах других разработчиков. Поскольку его можно использовать для создания файла отчета, но его не нужно запускать пользователями файла отчета, вероятно, это нормально, если у них не установлен VBScript. Я постараюсь опробовать это решение в ближайшее время и дам вам знать, как оно работает... - person FrustratedWithFormsDesigner; 24.10.2011
comment
vbscript должен быть установлен и работать практически на любой машине с Windows. Это функция Windows Script Host. Можно заблокировать запуск файлов vbscript, и некоторые программы безопасности могут сделать это. Обычно это делается путем изменения ассоциации файлов .vbs. Короче говоря, обычно вам не нужно беспокоиться о том, что ваши файлы .vbs не работают. И вызов их из командной строки (батника) тоже возможен. - person HK1; 25.10.2011