1

我正在尝试构建一个从包含财务信息的数据库中提取信息的工具,但是我遇到了这个问题。下面的查询会给我一些我需要的数据,但是只要我添加子查询,我就会收到错误消息

“ODBC--调用失败”。

如果我用静态替换子查询,"WHERE TRAN_NUMBER IN (0,1,2,3..)"它会返回预期值。子查询在自己运行时返回预期值。

我正在使用 MS Access 和 C# 以及 OleDB 库来执行此操作

任何想法我做错了什么?

SELECT NOMINAL_CODE, DETAILS, AMOUNT, TYPE
FROM AUDIT_JOURNAL
WHERE TRAN_NUMBER IN
   (SELECT AUDIT_TRAIL_ID
    FROM PROJECT_TRAN 
    WHERE AUDIT_TRAIL_ID > 0);

System.Data.dll 中出现“System.Data.OleDb.OleDbException”类型的第一次机会异常

附加信息:ODBC--调用失败

编辑:当通过 ODBC 链接到另一个数据库时,子查询似乎不起作用(原始数据库是 SageLine50 数据库)。我已经静态导入了表格,它似乎可以工作。有谁知道我如何在不静态导入表格的情况下完成这项工作?

4

1 回答 1

1

代替使用 IN 子句和子查询,您可以尝试 JOIN

SELECT 
    aj.NOMINAL_CODE, 
    aj.DETAILS, 
    aj.AMOUNT, 
    aj.TYPE
FROM 
    AUDIT_JOURNAL AS aj
    INNER JOIN
    PROJECT_TRAN AS pt
        ON aj.TRAN_NUMBER = pt.AUDIT_TRAIL_ID
WHERE pt.AUDIT_TRAIL_ID > 0

回复:您在编辑问题时的评论

通过 ODBC 链接到另一个数据库时,子查询似乎不起作用(原始数据库是 SageLine50 数据库)。

对于所有ODBC 链接表来说,这当然不是真的。我在 SQL Server 2008 R2 中创建了表 [AUDIT_JOURNAL] 和 [PROJECT_TRAN],在 Access 2010 中创建了链接表,并且您的原始查询在 Access 中运行良好。(我的也是。)您的问题几乎肯定是由 SageLine50 ODBC 驱动程序的缺陷引起的。

于 2014-02-13T08:46:46.020 回答