【发布时间】:2013-05-16 07:04:35
【问题描述】:
我从 VB6 应用程序对 Access 2010 DB 执行查询。 SQL 看起来像这样:
SELECT *, NetPrice AS Price
FROM Products
WHERE Len(ProductName)<>0 AND ProductID IN (1,5,8,13);
以下代码执行查询:
Set ResultRecordset = myDataBase.OpenRecordset(SqlCode, dbOpenSnapshot)
到目前为止,一切都很好,但是当 List 中的 ID 数量增加到大约 50 时,ResultRecordset 是Nothing。我发现 Access here 有一些限制,但我远远低于那里提供的值(1 个表,200 个字符的查询长度,没有嵌套的子查询,...)。任何想法出了什么问题?
【问题讨论】:
-
如果我理解正确,如果从 VB 运行,则不会执行查询(是否有任何错误或只是返回错误的数据?)。您是否尝试在 Access 主窗口中将其作为普通查询运行?
-
只是暗中尝试,但我认为您的
ProductID IN (1,5,8,13 /* ... and some 50 more ... */)可能会在实际执行的查询中达到 50 个子查询的限制。 -
@Vocitus:好点子。我试过了,它在 Access 中工作!在 VB6 中,我没有收到任何错误消息,但 Recordset 什么都没有。
-
@Filburt:有可能,不过按照前面的说法,这更有可能是VB6-Access交互的问题。
-
这是一个荒谬的 WHERE 子句。使用 50 多个产品 ID 创建另一个表,并在其上进行 INNER JOIN 以过滤结果。