Microsoft Access喜欢/不喜欢

我似乎在基于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时不起作用 –

预期参数= 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*" 

由于这工作:

 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*" 

虽然上面有单引号和双引号的组合(提示:将来当试图用电脑修复某些东西时 – 保持一致非常重要)。

在上面跳出的唯一真正的问题是date是Access中的保留字。 细节也是。 因此,在上面的保留字旁边放置[]括号

所以你必须必须validation以下的声明是如何工作的:

 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*" 

所以请注意[]周围的date和细节。

再次testing上面的第二个例子。 如果以上的工作,你和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添加到正在工作的查询中。

 and NOT (details like "*WAGES*") 

作为一个侧面说明string开头的通配符将会很慢。

用户也得到一个错误:

 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 *”周围使用了双引号。 另外,通配符是一个百分比符号。 您可能需要根据您正在使用的数据库来检查这一点。