Разрыв ADOB-соединения между Excel и Access - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь открыть соединение между Excel и базой данных Access через VBA:

Sub get_column_real()

Dim cn As Object
Dim rs As Object
Dim strSql As String
Dim strConnection As String
Dim i As Long
Dim fld As Object

Set cn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=O:\MAP\05_Reporting\2018_MAPDB_NewServer.accdb;" & _
    "User Id=admin;Jet OLEDB:Database Password=123456" & _
    "Jet OLEDB:System Database=C:\Users\M299700\AppData\Roaming\Microsoft\Access\System.mdw"
'    cn.Properties("Jet OLEDB:System database") = _
'         "C:\Users\M299700\AppData\Roaming\Microsoft\Access\System.mdw"
strSql = "SELECT dbo_TaskList.Id, dbo_TaskList.UserName FROM dbo_TaskList;"
cn.Open strConnection
Set rs = cn.Execute(strSql)

End sub

Я получаю:

Ошибка времени выполнения '-2147217887 (80040e21)': Многошаговая операция OLE DB вызвала ошибки.Проверьте каждое значение состояния OLE DB, если оно доступно.Никакой работы не было сделано

в строке cn.Open strConnection.

Согласно этой странице: http://www.adopenstatic.com/faq/80040e21.asp, Возможно, у меня есть неподдерживаемое свойство.Я не уверен, какой это может быть, однако.Я, например, попробовал просто Password вместо Jet OLEDB:Database Password, но затем я получаю ошибку Not a valid account name or password.

Как исправить соединение?

1 Ответ

0 голосов
/ 25 сентября 2018

Учитывая комментарии, у вас вообще нет зашифрованной базы данных, и поэтому вы не должны предоставлять пароль:

 Sub get_column_real()

Dim cn As Object
Dim rs As Object
Dim strSql As String
Dim strConnection As String
Dim i As Long
Dim fld As Object

Set cn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=O:\MAP\05_Reporting\2018_MAPDB_NewServer.accdb;" & _
    "User Id=admin;Jet OLEDB:Database Password="""";" & _
    "Jet OLEDB:System Database=C:\Users\M299700\AppData\Roaming\Microsoft\Access\System.mdw"
'    cn.Properties("Jet OLEDB:System database") = _
'         "C:\Users\M299700\AppData\Roaming\Microsoft\Access\System.mdw"
strSql = "SELECT dbo_TaskList.Id, dbo_TaskList.UserName FROM dbo_TaskList;"
cn.Open strConnection
Set rs = cn.Execute(strSql)

End sub

Запрос связанных таблиц через соединение OLEDB, однако, не поддерживается и выигралне работаетВы должны запросить связанную таблицу напрямую.

Я настоятельно рекомендую опустить системную базу данных, так как этот путь не будет действителен для других пользователей и в любом случае не применим к файлам accdb.

Для справки,Вы можете использовать Debug.Print CurrentProject.Connection.ConnectionString, чтобы получить текущую строку подключения, которую использует Access.

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