使用 ADO 从 Excel 调用时,Microsoft Access 查询返回错误结果

问题描述 投票:0回答:1

我在 Microsoft Access 2010 中保存了一个查询,当从 Access 中运行时,该查询会返回预期结果(未找到记录)。

但是,当我使用 Excel 中的 ADO 连接(选择查询)时,我会返回一些令人困惑的行,因为我在查询中已经有排除返回结果的条件。

我尝试了多种组合,包括将cursorlocation属性更改为aduseclient,将cursortype更改为static,然后还尝试将其更改为keyset,如下所示:

试用1

Set objRst3 = New ADODB.Recordset
objRst3.Open strSql, CurrentProject.Connection, adOpenKeyset

试用2

Set objRst3 = New ADODB.Recordset
objRst3.Open strSql, CurrentProject.Connection, adOpenStatic

我还尝试将我的条件包含在从 Excel 发送的 select 语句中,并排除条件并将其放置在 microsoft access 中的查询设计器中。

我没有使用JET驱动程序来连接访问,我使用的连接字符串 是

GetAccessConnection.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & path & ";"

但是,我仍然得到奇怪的结果。我该如何解决这个问题

编辑

我的查询结构如下。未从 Excel 中选取的过滤条件是行 'AS MAIN WHERE STATUS <> "CLPd"' :

SELECT DISTINCT ..
FROM 
        (
          SELECT DISTINCT ... STATUS
            FROM ( 
              SELECT distinct .. FROM ... AS OD 
              LEFT JOIN ((select ...FROM ..) as ST) on (OD.id = st.id) and      (od.ord = st.ord)
            )
        ) AS MAIN WHERE STATUS <> "CLPd"
LEFT JOIN 
        (
           SELECT DISTINCT ....
            FROM tbl1
            INNER JOIN tbl2 on tbl1.id = tbl2.id
            WHERE tbl2.col1 = "Y" and tbl1.col2 = "Y"
            ORDER BY tbl1.id  
        ) AS ITEMCONFIG on MAIN.itemcode = ITEMCONFIG.itemcode
WHERE
        (
        MAIN.CUSTMR not Like "OTHER*" and MAIN.DATE < DATE()
        )
ORDER BY MAIN.DATE
excel vba ms-access ado
1个回答
0
投票

我知道这已经很老了,但我有类似的经历,我发现的原因是ADO使用标准SQL通配符

%
_
,但DAO使用
*
?
。即使查询保存在 MsAccess 中,也可以使用 MSAccess/DAO 通配符(如您的示例中所示:
*
);如果您在 DAO 中选择此查询(或直接在 MsAccess 中运行),您将获得预期结果,但使用 ADO 这样做将无法正常工作(
*
将被解释为必须匹配的文字字符)。

我找不到克服它的声明,因此查询可能会改变,例如:

LEFT(MAIN.CUSTMR,5) <> "OTHER"

或者,如果查询始终通过 ADO 提交,则将通配符更改为

%

如果其他人搜索同样的问题...

© www.soinside.com 2019 - 2024. All rights reserved.