通过VBA从Excel连接到多个数据源

时间:2017-11-19 16:54:25

标签: sql excel vba ms-access ado

尝试从Excel内部连接到不同的数据源(VFP数据库和Access文件),以根据两个来源的标准提取特定数据,并遇到创建组合查询的问题。对VFP表的查询已经完成,现在我需要解决MS Access表。 我尝试过以下方式,但没有成功:

"left join [tblInAccess] in " & "[Microsoft.ACE.OLEDB.12.0;Data 
Source='D:\Data\temp_dump.accdb'] on [tblInVFP].ID=[tblInAccess].ID"

任何人都可以指出正确的语法吗?

UPD : 整个查询代码(只是查询):

SELECT DB.DATE AS DBF_DATE,
    DB.EN AS DBF_EN,
    DB.NU AS DBF_NUMERO,
    LIB.LL AS DBF_LIBELLE,
    SUM(IIF(DB.DEBIT = '1000', - DB.AMOUNT, 0.00) + IIF(DB.CREDIT = '1000', DB.AMOUNT, 0.00))
FROM [VFP_DB] AS DB
LEFT JOIN (
    SELECT LT.LL AS LL,
        LT.EN
    FROM [VFP_DB] AS LT
    ) AS LIB ON DB.EN = LIB.EN
LEFT JOIN (
    SELECT id
    FROM [Provider=Microsoft.ACE.OLEDB.12.0;Data Source="D:\Data\temp_dump.accdb";].[tblTemp]
    ) TEMP_DB ON DB.NN = TEMP_DB.id
WHERE DB.DATE >= { ^ 2015.12 .30 }
    AND DB.DATE <= { ^ 2017.01 .07 }
    AND TEMP_DB.id IS NULL
GROUP BY DB.DATE,
    DB.NU,
    DB.EN,
    LIB.LL
HAVING SUM(IIF(DB.DEBIT = '1000', - DB.AMOUNT, 0.00) + IIF(DB.CREDIT = '1000', DB.AMOUNT, 0.00)) <> 0
ORDER BY DB.DATE,
    DB.NU,
    DB.EN ASC

实际上,如果没有第二次加入&#39;它工作正常。我尝试引用Access数据库时出现问题

1 个答案:

答案 0 :(得分:0)

如果您正在Access数据库上执行查询,则无需指定数据库类型,只需指定位置:

LEFT JOIN [tblInAccess] in D:\Data\temp_dump.accdb on [tblInVFP].ID=[tblInAccess].ID

有关详细信息,请参阅MSDN

另请注意:{ ^ 2015.12 .30 }可能会在Access中导致语法错误。如果您想按日期过滤,正确的语法是#2015/12/30#来定义日期常量。