2013-07-16 6 views
1

У меня есть база данных Access 2007, c:\myDb.accdb, таблица с именем MASTER_TABLE, которая связана с таблицей TBL.MASTER_TABLE в базе данных DB2 с именем PRODUCTION.Как скопировать связанную таблицу в MS Access 2007 в локальную таблицу с помощью VBA (или C#)?

Когда я открываю MASTER_TABLE, мне предлагается ввести учетные данные для входа в базу данных PRODUCTION.

Я написал приложение на C#, которое использует таблицу MASTER_TABLE, но, конечно, она запрашивает у пользователя логин. Чтобы обойти это, мне нужно скопировать связанную таблицу в существующую локальную таблицу с именем LOCAL_MASTER_TABLE в myDb.accdb.

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

В Access, я попытался следующие, чтобы создать локальную копию, но он не учитывает, если поле индексируется:

DoCmd.TransferDatabase acImport, "ODBC Database", "ODBC; DSN=PRODUCTION; UID=username; PWD=password; LANGUAGE=us_english; Database=PRODUCTION", acTable, "TBL.MASTER_TABLE", "LOCAL_MASTER_TABLE" 

Я также попытался это: How to copy a linked table to a local table in Ms Access programmatically?

Но я получаю ошибка 3001: Arguements are of the wrong type, are out of acceptable range, or are in conflict with one another

Я звоню CopySchemaAndData_ADOX функцию со следующим:

Call CopySchemaAndData_ADOX(TBL.MASTER_TABLE, LOCAL_MASTER_TABLE)

В любом случае, может кто-нибудь подумать о способе сделать это в VBA или, возможно, на C#? Или почему я получаю ошибку в коде, который я пытался использовать?

Спасибо!

ответ

3

Использовать «make table» запрос в сеансе доступа.

SELECT * 
INTO LOCAL_MASTER_TABLE 
FROM MASTER_TABLE; 

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

С MASTER_TABLE - рабочая таблица, LOCAL_MASTER_TABLE будет создана с использованием типов полей, совместимых с доступом.

Оказывается, это предложение не подходит, потому что вы хотите автоматизировать импорт и не запрашивать у пользователя учетные данные DB2 каждый раз.

Однако у вас есть DoCmd.TransferDatabase, работающий, за исключением того, что он не тянет в индекс. Поэтому я предлагаю вам сделать TransferDatabase, а затем выполнить, выполнив инструкцию CREATE INDEX, чтобы получить то, что вам нужно.

+0

Спасибо, но это побуждает меня войти в базу данных ПРОДУКЦИИ. Есть ли способ передать учетные данные? Я сделал это: 'Dim sql As String sql =" SELECT * INTO LOCAL_MASTER_TABLE FROM MASTER_TABLE " CurrentDb.Execute sql'. Кроме того, будет ли он скопирован, если поле проиндексировано или нет? –

+0

Мне нужно избежать приглашения для входа в систему, поэтому я могу автоматизировать это позже. –

+0

Таблицу нужно обновлять два раза в неделю. Обычно для чего-то вроде этого я создаю форму в Access и устанавливаю ее для открытия при открытии БД и помещаю VBA в событие «On_Load». Затем я создаю задачу с планировщиком задач Windows, чтобы открыть файл .accdb в 3 часа ночи или когда-либо. –