MS Access VBA中的SQL指令

问题描述 投票:0回答:1

Chr(34)的想法给出了MsgBox1 SELECT * FROM Emp WHERE JobNumber = BFLA MsgBox2“SELECT * FROM Emp WHERE JobNumber = BFLA”,它看起来好像应该在OpenRecordset中工作但是给出了“找不到表”的消息“ SELECT .... BFLA'”

'&xx&“'”的想法给出了MsgBox1 SELECT * FROM Emp WHERE JobNumber ='BFLA'MsgBox2“SELECT * FROM Emp WHERE JobNumber ='BFLA'”这也给出了“找不到表”的消息“ SELECT ....'BFLA'“(BFLA之前的额外单引号)

有效的原始代码是:

xx =我![JobID]

设置r1 = db.OpenRecordset(“从Emp中选择*,其中EmployeeID =”和Nz(Me![JobID]))

在此代码中,EmployeeID是一个数值

最新代码是:

xx = Me![JobNumber]'来自组合框的JobNumber,它在MsgBox 1中测试并且是正确的

xxSQL =“SELECT * FROM Emp WHERE JobNumber ='”&xx&“'”

MsgBox xxSQL,vbOKOnly

xxSQL = Chr(34)&xxSQL&Chr(34)

MsgBox xxSQL,vbOKOnly'显示了将进入OpenRecordset的内容

设置r1 = CurrentDb.OpenRecordset(xxSQL)

并抱歉上次格式不佳,希望我已经掌握了消息框的内容......

克里斯

*****下面的原始消息*****

我正在尝试修复一些现有的Access代码,因为源应用程序已经更改,我真的很难将变量转换为Select语句到SQL中。我已经阅读了许多与此类似的已解决的问题,并尝试了在此选择之前,之后和之中的“”“的许多排列,并尝试将其拆分。

xx = Me![JobNumber]
xxSQL = "SELECT * FROM Emp WHERE JobNumber = " & xx
MsgBox xxSQL, vbOKOnly
xxSQL = """ & xxSQL & """
MsgBox xxSQL, vbOKOnly
Set r1 = CurrentDb.OpenRecordset(xxSQL)

JobNumber现在是一个4char字符串,它循环从组合框中的各种作业,并为每个作业生成一个报告页面。第一个MsgBox生成SELECT * FROM Emp WHERE JobNumber = BFLA(有效代码)

表Emp存在并且有一个字段JobNumber,它还包含与我匹配的4char字符串(包括BFLA)!组合框。

第二个MsgBox生成“&xxSQL&”然后出现Access错误消息 - 找不到输入表或查询“'&xxSQL&”',因为我无法正确获取双引号的数量和位置。

然后报告生成,重复2个MsgBox,因为它循环通过组合框列表,报告很好,除了缺少Emp表中的内容。除了引入JobNumber之外,Emp表没有任何更改,并且没有对Set r1之后的代码进行任何更改。

我担心对于比我更有经验的人来说,这是一个2秒的修复,这将是令人尴尬的,但我无法解决它!

谢谢

克里斯

sql access-vba
1个回答
1
投票

试试这个 - 使用引号作为xx是文本:

xx = Me![JobNumber]
xxSQL = "SELECT * FROM Emp WHERE JobNumber = '" & xx & "'"
MsgBox xxSQL, vbOKOnly
Set r1 = CurrentDb.OpenRecordset(xxSQL)
© www.soinside.com 2019 - 2024. All rights reserved.