Microsoft Access喜欢/不喜欢

时间:2015-12-03 14:46:42

标签: sql excel ms-access sage-erp

我似乎在基于SAGE数据库的以下查询中遇到了MS Access问题

以下代码不起作用 - 它不喜欢"不喜欢"部分

SELECT tran_number, Inv_ref, Details, date, Net_amount, amount_paid
FROM AUDIT_HEADER

WHERE type = 'BP' and 
deleted_flag= 0 and details NOT like "*WAGES*"

此代码确实有效,但速度非常慢,并且在将其链接到Excel时无法正常工作 -

  

参数expected = 1错误??

SELECT tran_number, Inv_ref, Details, date, Net_amount, amount_paid
FROM AUDIT_HEADER

WHERE type = 'BP' AND deleted_flag= 0 and 
details NOT IN (SELECT details from audit_header where details like "*WAGES*");

另外,奇怪的是,这段代码有效,但很明显,我想在细节中排除包含WAGES的交易

SELECT tran_number, Inv_ref, Details, date, Net_amount, amount_paid
FROM AUDIT_HEADER

WHERE type = 'BP' and 
deleted_flag= 0 and details like "*WAGES*"

3 个答案:

答案 0 :(得分:1)

因为这有效:

SELECT tran_number, Inv_ref, Details, date, Net_amount,
amount_paid FROM AUDIT_HEADER
WHERE type = 'BP' and 
deleted_flag= 0 and details like "*WAGES*"

虽然上面确实有单引号和双引号的混合(提示:将来尝试使用计算机修复某些内容时 - 保持一致非常重要)。

上面跳出的唯一真实问题是日期是Access中的保留字。细节也是。因此,将[]括号放在上面的保留字

周围

因此,您必须必须验证您声明的后续工作:

SELECT tran_number, Inv_ref, Details, date, Net_amount,
amount_paid FROM AUDIT_HEADER
WHERE type = "BP" and 
deleted_flag= 0 and details like "*WAGES*"

现在尝试使用括号中的保留字,如下所示:

SELECT tran_number, Inv_ref, Details, [date], Net_amount,
amount_paid FROM AUDIT_HEADER
WHERE type = "BP" and 
deleted_flag= 0 and [details] like "*WAGES*"

请注意[]约会日期和细节。

再次,测试上面的第二个例子。 如果以上工作,你和DOUBLE,和TRIPLE检查,那么这也应该工作:

SELECT tran_number, Inv_ref, Details, [date], Net_amount,
amount_paid FROM AUDIT_HEADER
WHERE type = "BP" and 
deleted_flag= 0 and [details] NOT like "*WAGES*"

如果上述失败,那么SAGE系统很可能不支持“NOT”这样的命令。

请尝试使用WORKING查询中的[]。如果[]有效,则尝试将NOT添加到工作查询中。

答案 1 :(得分:0)

用户也会收到错误:

ODBC Call Failed - Syntax - Invalid filter in WHERE clause (#0)

如果您正在使用ODBC调用并从Access调用非Access数据库,则需要检查您的SQL是否适用于您调用的任何数据库。因此,如果您使用的是SQL服务器,则可以使用:

SELECT tran_number, Inv_ref, Details, date, Net_amount, amount_paid
FROM AUDIT_HEADER WHERE type = 'BP' and deleted_flag= 0 and details NOT LIKE '%WAGES%'

由于SQL使用单引号而不是双引号。这个引用点可能值得检查,因为你在“BP”周围使用了单引号,但在“* WAGE *”附近翻了一倍。另外,外卡是百分比符号。您可能希望针对您使用的任何数据库进行检查。

答案 2 :(得分:0)

and NOT (details like "*WAGES*")

作为旁注,字符串开头的通配符将变慢。