MS Access DoCmd.База данных для переноса, когда у источника есть пароль

#ms-access #vba

#ms-access #vba

Вопрос:

Мне нужно импортировать таблицы из различных баз данных ежемесячно. После импорта таблиц базы данных архивируются и больше не просматриваются.

У меня есть следующий код VBA, который отлично работает, когда база данных не защищена паролем:

 Private Sub ImportTheData(ByVal dbImport As String)

DoCmd.SetWarnings False 'Turn OFF display alerts

'Import the full activity amp; comments table from the Import DB to a temporary table
DoCmd.TransferDatabase acImport, "Microsoft Access", dbImport, acTable, "tbl_Activity", "tbl_TempActivity", True
DoCmd.TransferDatabase acImport, "Microsoft Access", dbImport, acTable, "tbl_Comments", "tbl_TempComments", True

'code continues ...
  

Последнему параметру (storelogin) присвоено значение true, но, похоже, нет способа программно установить эти параметры входа (пароль).

Когда я запускаю код, пользователю предлагается ввести пароль (несмотря на SetWarnings = False). Поскольку я каждый раз импортирую десятки файлов, это не является жизнеспособным решением.

Есть ли способ программного импорта таблиц с использованием DoCmd.TransferDatabase , когда файл защищен паролем, и если да, то каким образом?

Комментарии:

1. Читая это forums.windowssecrets.com/showthread.php / … возможно, вам потребуется открыть базу данных, а это свойство не применяется к Access DB. Возможно, опция ссылки здесь learn.microsoft.com/en-us/office/vba/api /… или посмотрите на SQL Select Into , указывающий строку подключения в from .

Ответ №1:

Откройте базу данных с помощью DAO, указав пароль, затем вы можете импортировать таблицы.

 Public Sub ImportEncr()

    Const dbImport = "D:DbEncr.accdb"
    Const sPassword = "foobar"

    Dim DB As DAO.Database
    Set DB = DBEngine.OpenDatabase(Name:=dbImport, Options:=False, ReadOnly:=False, Connect:=";PWD=" amp; sPassword)

    DoCmd.TransferDatabase acImport, "Microsoft Access", dbImport, acTable, "tblEncr", "tblEncr", False

    DB.Close
    Set DB = Nothing

End Sub
  

StoreLogin применяется для связывания таблиц из баз данных ODBC.

Ответ №2:

Вы можете использовать SQL и создать инструкцию SQL и .RunSQL в это я верю.

Примером SQL может быть

SELECT * into tblIMPORT
FROM xyz IN '' '; database=C:WorkspaceDatabase1.accdb;PWD=test';

Надеюсь, это поможет.

Комментарии:

1. Спасибо за ваш ответ. 1 В итоге я использовал Andre’s, но протестирую ваше решение.