#vba #connection #ms-access-2010
#vba #подключение #ms-access-2010
Вопрос:
Я пытаюсь экстраполировать данные из базы данных MS Access 2007/2010.
У меня есть следующий код в VBA, но строка подключения неверна. Я добавил соответствующие библиотеки ССЫЛОК
Private Sub btnGetMsAccessData_Click()
Dim sConn As String
Dim oConn As ADODB.Connection
Dim oRs As ADODB.Recordset
Dim sSQL As String
sConn = "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=\MyNetworkPathBP-MasterDashboard SourceBP_Planning_by_PT_dept_be.accdb;Mode=Read"
Set oConn = New ADODB.Connection ' Open a connection.
oConn.Open
sSQL = "SELECT * FROM Tbl_Start_Leaver" ' Make a query over the connection.
Set oRs = New ADODB.Recordset
oRs.Open sSQL, , adOpenStatic, adLockBatchOptimistic, adCmdText
MsgBox oRs.RecordCount
oConn.Close ' Close the connection.
Set oConn = Nothing
End Sub
Сбой с сообщением об ошибке неизвестного приложения в oConn.Открытая строка.
Я попытался связать рабочую книгу с одной из таблиц, и это работает нормально. Затем я посмотрел на «Соединение» и скопировал его в свой код, но все равно без радости.
Продолжает говорить: ошибка автоматизации Неожиданная ошибка
Любые идеи будут оценены.
Заранее спасибо.
Ответ №1:
Хотя строка подключения была неверной, были и другие проблемы. Например, не присваивание строки подключения объекту подключения ADODB, а также другим. Вот обновленный код, который, я надеюсь, поможет вам работать
Private Sub btnGetMsAccessData_Click()
'Ensure you add a reference to Microsoft ADO Objects
Dim oConn As New ADODB.Connection
Dim oRs As New ADODB.Recordset
Dim sSQL As String: sSQL = "SELECT * FROM Tbl_Start_Leaver"
'Corrected Connection String from Thomas Inzina
Dim sConn As String: sConn = "Provider=Microsoft.ACE.OLEDB.12.0;UID=Admin;Data Source=" amp; _
"\MyNetworkPathBP-MasterDashboard SourceBP_Planning_by_PT_dept_be.accdb;Mode=Read"
With oConn
.ConnectionString = sConn ' You need to assign the connection string to the ADODB.Connection Object
.Open
End With
'Make sure the connection isn't open before opening the recordset
'You also need to specify which connection you want to use as the second parameter (this was missed)
If oRs.State <> adStateOpen Then oRs.Open sSQL, oConn, adOpenStatic, adLockBatchOptimistic, adCmdText
'Close Connection and RS
If oConn.State = adStateOpen Then oConn.Close
If oRs.State = adStateOpen Then oRs.Close
'Clean Up
Set oRs = Nothing
Set oConn = Nothing
End Sub
Комментарии:
1. Это не сработало. Я думаю, может быть, это ссылка на библиотеку, которая мне нужна.
2. Смотрите мой комментарий к строке 2 кода. Вам нужна ссылка на ADO. В частности
Microsoft ActiveX Data Objects 2.X Library
, или у вас может быть доступна версия 6.x. Либо должно работать.3. У меня есть библиотека Microsoft ActiveX Data Objects 6.1, так что, похоже, это не проблема.
4. Было бы полезно узнать конкретную ошибку, которую вы получаете, и в какой строке.
5. Я даже пытался подключиться к Northwind.mdb, и это тоже не работает. Самое странное. 🙁