Как я могу сценарий копирования таблицы доступа из одной базы данных в другую? - PullRequest
0 голосов
/ 09 октября 2009

Я унаследовал установку, которая использует базы данных Access 97. Мне нужно скопировать таблицу из одной основной базы данных в несколько других, чтобы подготовить их к использованию. Исходная mdb и исходная таблица в основном статичны, конечные mdbs сильно различаются.

Итак, у меня есть:
source.mdb содержит таблицу A
destination.mdb содержит таблицы 1, 2 и 3

Мне нужно в итоге:
source.mdb не изменяется (содержит таблицу A)
destination.mdb содержит таблицы 1, 2, 3 и A

Это достаточно простая задача в графическом интерфейсе Access, но, поскольку эта задача должна выполняться сотни раз в день, я бы хотел ее автоматизировать. Конечная цель - создать сценарий или пакетный файл, который я могу дать каждому пользователю mdb (около 75 сотрудников) для самостоятельного управления каждой базой данных перед использованием. Я чувствую себя как дома в среде UNIX / Oracle, так что написание сценариев привело к циклу.

В Oracle я бы использовал такой запрос:

скопировать из user / password @ sourceDB в user / password @ destinationDB
создать new_tableA, используя select * from tableA;

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

strSQL = "INSERT INTO ServiceRecordInvoices" & _
"(sriID, sriServiceRecordID, sriInvoiceDate, sriInvoiceNumber," & _
"sriDescription, sriInvoiceAmount)" & _
"IN '" & strDatabasePathandNameTo & "'" & _
«ВЫБЕРИТЕ srpID, srpServiceRecordID, srpInvoiceDate, srpInvoiceNumber», & _
"srpParts, srpPartsAmount" & _
"FROM ServiceRecordParts IN '" & strDatabasePathandNameFrom & "';"

Моя первая попытка выглядит так и неудивительно, что не работает. Может ли кто-нибудь направить меня правильно?

copyTableSql = "CREATE [new_tableA]" & _
"IN '" & destinationDBpath & "'" & _
"SELECT * FROM tableA IN '" & sourceDBpath & "';"

Спасибо за любой совет.

Ответы [ 4 ]

2 голосов
/ 09 октября 2009

Если вы хотите использовать VBA в Access для автоматизации этой задачи, было бы легко с помощью оператора «SELECT ... INTO ...» - то, что Access вызывает запрос Make Table.

SELECT s.* INTO tblA IN 'C:\SomeFolder\destination.mdb' FROM tblA AS s;

Если вам необходимо управлять скриптом за пределами Access, попробуйте vbscript, подобный следующему:

Option Explicit
Dim dbe
Dim db

Set dbe = CreateObject("DAO.DBEngine.36")
Set db = dbe.OpenDatabase("C:\SomeFolder\source.mdb")

db.Execute "SELECT s.* INTO tblA IN 'C:\SomeFolder\destination.mdb' FROM tblA AS s;"
Set db = Nothing
Set dbe = Nothing

Я протестировал этот сценарий с моей собственной базой данных и именами таблиц, и он работает для меня с Access 2007. Возможно, вам придется ссылаться на другую версию DAO для Access 97. Я не знаю, какая версия вам нужна, но вероятно начните с "DAO.DBEngine.35" для строки CreateObject.

На самом деле, эта задача будет проще, если вы создадите ссылку на destination.mdb, которая указывает на tblA в source.mdb. Таким образом, вам не придется копировать данные из одной базы данных в другую.

1 голос
/ 10 октября 2009

Вы немного расплывчаты с точки зрения желания использовать кодирование доступа в visual basic внутри доступа MS, или если вы действительно хотите использовать скрипт Windows? В вашем случае кажется, что Windows-сценарий будет более подходящим. С помощью сценариев Windows вы можете запустить любое приложение Windows, будь то Excel, Word или даже доступ MS, а затем заставить это приложение делать все, что вы хотите. Ваш скрипт может затем закрыть приложение. Итак, в Windows Land у вас есть то, что называется автоматизацией, и вы пишете сценарии Windows для достижения этих целей. Однако при запуске доступа к MS часто приложение будет иметь формы и код, который запускается при запуске. Часто вы не хотите, чтобы эти вещи происходили так, как вы это сделали с тех пор, как вы действительно используете сценарии Windows, как если бы пользователь запустил приложение.

Однако, оказывается, на каждом окне Windows, начиная с Windows 2000, вы можете открывать, читать и манипулировать доступом к файлам базы данных, даже не имея доступа, установленного на компьютере. Другое преимущество этого подхода состоит в том, что вы можете, таким образом, копировать данные из этих файлов базы данных, но на самом деле не нужно запускать само приложение доступа. Это экономит память, время запуска, а также, как уже упоминалось, устраняет необходимость фактически запускать MS-доступ и запускаться в пакетном файле (имейте в виду, что есть пакетные файлы старого стиля, а затем есть то, что мы называем сценариями Windows ... Я предлагаю Вы используете сценарий Windows здесь). Таким образом, подход, основанный на использовании сценариев, вполне удовлетворит ваши потребности в копировании данных из одного файла в другой.

Скрипты Windows также работают очень хорошо, если вы хотите использовать планировщик задач Windows для запуска какой-либо программы пакетной обработки ночью. На самом деле, если вам нужны ночные отчеты от ms-доступа, тогда сценарии Windows будут вашим выбором, а не использованием VBA внутри ms-доступа. Сценарии Windows позволят вам запустить ms-доступ, распечатать некоторые отчеты, а затем закрыть приложение. Вы также можете сделать это для Excel или фактически для любого приложения Windows.

Таким образом, автоматизированные решения в окнах поддерживаются, и это происходит из-за того, что большинство оконных приложений просто предоставляют все свои свойства и методы как объекты и свойства, на которых основаны части графического интерфейса пользователя. Таким образом, ваш код сценария может обычно выполнять те же цели, как если бы работник сидел за своим компьютером и выбирал параметры мышью, которая просто использует эти методы приложения).

Имейте в виду, что это не система записи мыши, а настоящий язык сценариев, которого придерживаются все приложения Windows.

Однако в вашем случае, как уже упоминалось, вам не нужно запускать доступ MS, и вы можете использовать встроенные библиотеки, которые поставляются с окнами, чтобы открывать и манипулировать этими файлами базы данных. Скрипт, размещенный здесь HansUp, который на самом деле является стандартным простым скриптом Jane для Windows. Просто вставьте его пример кода в текстовый файл, переименуйте текстовый файл с расширением .vbs, и все готово. И этот сценарий будет даже работать и запускаться в окне Windows, даже если MS Access не установлен.

1 голос
/ 09 октября 2009

Поскольку в любом случае целесообразно разделять данные и логику в Access, предоставьте им 3 базы данных - одну с подключениями к двум другим. Тогда вы могли бы просто скопировать все. Каждый получает общую копию MDB с кодом и общую копию A, а также свои собственные 1-2-3.

Доступ довольно приятен для такого рода вещей. Вы не должны терять эффективность.

Кроме того, любые будущие обновления любого из данных mdbs (или кода mdb в этом отношении) являются просто еще одной копией файла.

0 голосов
/ 10 октября 2009

Если вы запускаете это из Access, это отдельная строка кода или макроса с помощью команды DoCmd.TransferDatabase.

Задайте параметры в зависимости от того, используете ли вы его из целевой базы данных (импорт) или из источника (экспорт).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...