【问题标题】:JOIN an Access table and a SQL Server table in a single query from Excel VBA在 Excel VBA 的单个查询中加入 Access 表和 SQL Server 表
【发布时间】:2019-09-02 23:55:55
【问题描述】:

我正在使用 Excel 64 位

我有一个 ms-access 数据库,在这个数据库中我有普通的 ms-access 表和一些来自 SQL Server 的链接表,我有一个查询引用链接表,当我触发该查询时从 excel vba 它给了我一个 ODBC 错误,但是我能够成功地从 excel vba 获取非链接表。

现在我正在考虑不同的方法,是否可以在单个查询中加入 ms-access 和 SQL Server 表,我从网上找到了一些代码并尝试了运气,但它不起作用并给出错误消息“找不到可安装的 ISAM”,下面是我正在使用的代码。

注意:- 表“PeopleMain”是一个 sql server 表,除此表之外都是 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

谢谢 卡西夫

【问题讨论】:

    标签: sql-server excel vba ms-access-2010


    【解决方案1】:

    Access 允许查询和加入 ODBC 数据源,而不是 OLEDB 数据源。

    将查询中使用的连接字符串更改为 ODBC 字符串:

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

    如果可用,我当然建议使用更新的 ODBC 驱动程序。

    【讨论】:

    • 您好,感谢您的回复,我根据您的建议更改了代码,但它给出了不同的错误消息。 “Microsoft Access 数据库引擎找不到输入表或查询 'PeopleMain'。确保它存在并且它的 e 拼写正确。”
    • 嗯,是吗?它必须反映 SQL 服务器上的名称,如果它不在默认架构中,则包括架构。
    • 是的,你是对的,我包含了架构名称,但这次给了我不同的错误消息“现在它给我一个错误消息 ODBC --connection to '{SQL Server}servername' failed”
    • 好吧,我无法远程解决连接问题。这取决于你自己。
    猜你喜欢
    • 2018-04-08
    • 2013-07-13
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    相关资源
    最近更新 更多