使用VBA代码在Access中运行SQL语句

3
我无法确定这个问题在哪里, 我正在从表单中收集搜索条件以用于搜索。
SQL语句存储如下:(strWhere是来自表单的收集信息)
SQLst =“SELECT Deposits.Fines,Deposits.[Deposit Value],Deposits.[Deposit Date],Deposits.Depositor,Info.Tower,Deposits.[Account Number] FROM Info,Deposits Where”&strWhere&“;”
最终的SQL语句看起来像这样:
SELECT Deposits.Fines,Deposits.[Deposit Value],Deposits.[Deposit Date],Deposits.Depositor,Info.Tower,Deposits.[Account Number] FROM Info,Deposits Where([Account Number] =“1234”);
现在,当我使用以下命令运行该行(SQLst是上面的SQL行),我会得到以下消息:
DoCmd.OpenQuery SQLst
我收到以下消息:

尝试将WHERE子句中的双引号(")替换为单引号(')。 - SchmitzIT
抱歉,我修改了它,我放错了错误信息。 - Mohamed Fleifel
好的,终于找到了一个讨论我需要的内容的主题,作为第一次测试,我可以说它是可以接受的。如果有人需要它(请查看帖子#7).....此外,在Access中是否有一种方法可以在不使用VBA或SQL的情况下实现这一点(从表单中获取多个条件的查询)?! http://www.access-programmers.co.uk/forums/showthread.php?t=225700 - Mohamed Fleifel
1个回答

5

不要使用DoCmd.OpenQuery SQLst,那是用于已保存查询而非SQL字符串。您需要使用:

' Best to use a separate instance, so you can get record counts etc.
Set db = CurrentDB

针对操作查询:

db.Execute SQLst, dbFailOnerror

对于SELECT查询,您可以使用记录集或更新或创建查询。

Set rs = db.Openrecordset(SQLst)

' This query does not exist
Set qdf = db.CreateQueryDef("MyQuery", SQLst)

我怀疑账号号码并非文本格式,因此:
 ([Account Number] = 1234);

引号用于文本类型的字段/列,数字按原样显示,日期用井号(#)分隔。


2
...而且,正如在这里和其他地方经常重复的那样,使用参数化查询总是比“SQL粘合”更好。 - Gord Thompson
谢谢回复,我尝试了但是出现了错误。当我搜索时,发现了这个链接:http://office.microsoft.com/zh-cn/access-help/HV080760050.aspx - Mohamed Fleifel
似乎我无法使用execute命令运行select语句。你关于引号的评论很有用,在测试时确实会出现一些问题。还要感谢Gord。 - Mohamed Fleifel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接