我在 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
我知道这已经很老了,但我有类似的经历,我发现的原因是ADO使用标准SQL通配符
%
,_
,但DAO使用*
和?
。即使查询保存在 MsAccess 中,也可以使用 MSAccess/DAO 通配符(如您的示例中所示:*
);如果您在 DAO 中选择此查询(或直接在 MsAccess 中运行),您将获得预期结果,但使用 ADO 这样做将无法正常工作(*
将被解释为必须匹配的文字字符)。
我找不到克服它的声明,因此查询可能会改变,例如:
LEFT(MAIN.CUSTMR,5) <> "OTHER"
或者,如果查询始终通过 ADO 提交,则将通配符更改为
%
。
如果其他人搜索同样的问题...