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秒的修复,这将是令人尴尬的,但我无法解决它!
谢谢
克里斯
试试这个 - 使用引号作为xx是文本:
xx = Me![JobNumber]
xxSQL = "SELECT * FROM Emp WHERE JobNumber = '" & xx & "'"
MsgBox xxSQL, vbOKOnly
Set r1 = CurrentDb.OpenRecordset(xxSQL)