СОЕДИНИТЕ таблицу Access и таблицу SQL Server в одном запросе из Excel VBA - PullRequest
1 голос
/ 12 апреля 2019

Я использую Excel 64-bit

У меня есть база данных ms-access, и в этой базе данных у меня есть обычная таблица ms-access и некоторая связанная таблица из SQL Server, у меня есть запрос, который принимает ссылку на связанную таблицу, и когда я запускаю этот запрос из Excel VBA это дает мне ошибку ODBC, однако я успешно могу получить несвязанные таблицы из Excel VBA.

Теперь я думаю о другом подходе, возможно ли объединить ms-access и таблицу SQL Server в одном запросе, я нашел некоторый код в сети и попытал счастья, но он не работает и выдает сообщение об ошибке «Не удалось найти устанавливаемый ISAM» , ниже приведен код, который я использую.

Примечание: - таблица "PeopleMain" является таблицей sql-сервера, и кроме этой таблицы все являются таблицей ms-access.

[код]

  Sub FetchData3()

Dim rs As Object
Dim cn As Object
Dim ss As String
Dim conn As String
Dim accdb As Object


conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=G:\Workflow Tools (Michael Cantor)\Tool For Fixing Bug From Michael Cantor\PI MDT Reconciliation Workflow Tool\PI Database.accdb;Persist Security Info=False;Mode=Read"

 ss = "SELECT RM.ReconciliationID, RM.FirmID, RM.FirmName,  RM.DateRequested, RM.DueDate, Rm.ExtendedDueDate, " & _
    "Requestor.Name, SecondaryRequestor.Name FROM " & _
    "((ReconciliationMaster RM INNER JOIN Reconciliation_Fund RF ON RF.ReconciliationID = RM.ReconciliationID) " & _
    "LEFT JOIN (SELECT Preferred_Name + ' ' + Last_Name AS Name, People_ID FROM " & _
    "[Provider=sqloledb;Server=servername;Database=database;Trusted_Connection=Yes].PeopleMain) Requestor  " & _
    "ON Requestor.People_ID = RM.PrimaryRequestor) LEFT JOIN (SELECT Preferred_Name + ' ' + Last_Name AS Name, " & _
    "People_ID FROM [Provider=sqloledb;Server=servername;Database=database;Trusted_Connection=Yes].PeopleMain) " & _
    "SecondaryRequestor ON SecondaryRequestor.People_ID = RM.SecondaryRequestor WHERE RM.ReconciliationID = 522;"

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open conn

rs.Open ss, cn


Sheet1.Cells.ClearContents
Sheet1.Range("A1").CopyFromRecordset rs

rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

MsgBox "done"

End Sub

Спасибо Kashif

1 Ответ

0 голосов
/ 12 апреля 2019

Доступ позволяет запрашивать и объединять источники данных ODBC, а не источники данных OLEDB.

Измените строку подключения, используемую в вашем запросе, на строку ODBC:

[ODBC;Driver={SQL Server};Server=servername;Database=database;Trusted_Connection=Yes].PeopleMain

Если возможно, я рекомендую использовать более современный драйвер ODBC.

...