Я пытаюсь написать некоторый код VBA в Excel для запроса таблицы в Access. Я пробовал несколько примеров кода для этого, таких как добавленные ссылки, и они все, кажется, терпят неудачу в части "Открытого соединения". Я пробовал использовать разные ссылки, но я не уверен, какие из них следует использовать, в чем различия между некоторыми из разных версий (например, объекты данных Microsoft ActiveX 2.0,2.1,..., 6.0) или какова информация о поставщике должно быть. Для информации о поставщике я обычно видел что-то вроде
"Поставщик = Microsoft.Jet.OLEDB.4.0; Источник данных ="
Но я не уверен, что это то, что мне нужно использовать, или почему/какие условия что-либо в строке поставщика, показанной выше, должно измениться. Может кто-нибудь объяснить мне, как правильно делать такие вещи?
Примечание. Если это вообще возможно, я хотел бы получить решение, которое бы работало без загрузки какого-либо другого приложения и работало бы как в версиях Access, так и в Excel как в 2007, так и в 2010 году, поскольку оно должно работать на разных компьютерах с, возможно, различными версиями Office.
Ссылки на похожие вопросы: Сбой запроса VBA для доступа к Excel http://www.mrexcel.com/forum/showthread.php?t=527490
Код:
Sub asdf()
strFile = "C:\Users\bwall\Desktop\Excel Query Access Testing"
Dim cn As Object
Dim rs As Object
Dim strSql As String
Dim strConnection As String
Dim AppPath As String
Set cn = CreateObject("ADODB.Connection")
AppPath = Application.ActiveWorkbook.Path
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & AppPath & "\Masterlist_Current_copy.accdb;"
Debug.Print strConnection
strSql = "SELECT [Neptune Number],[Description],[Manufacturer],[Manufacturer P/N] FROM [All Components];"
cn.Open strConnection
Set rs = cn.Execute(strSql)
MsgBox rs.Fields(0) & " rows in MyTable"
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
Значение strConnection =
Provider = Microsoft.Jet.OLEDB.4.0; Источник данных = C:\Users\bwall\Desktop\Тестирование доступа к запросам Excel\Masterlist_Current_copy.accdb;