我有一个Case语句,根据具体情况重新分配字符串变量[Conveyor_ID]。然后我通过SQL语句将此变量传递给openrecordset方法。
Dim db As DAO.Database
Dim rs As DAO.Recordset
Const DbLoc As String = "database location"
Set db = OpenDatabase(DbLoc)
Set rs = db.OpenRecordset("SELECT Width FROM $[Conveyor_ID]%")
我收到错误声明"无效的包围名称" $ Conveyor_ID]%" "
我尝试了一些变体,但我似乎并不知道如何将变量传递给SQL语句。有人能指出我正确的方向吗?
由于
(全新,Mech Eng。尝试制作一些有用的程序!)
答案 0 :(得分:2)
我们能看到如何定义这个Conveyor_ID吗?它可能会更容易回答这个问题。
假设您的[Conveyor_ID]在VBA函数中被定义为Conveyor_ID,为什么不试试
on delete cascade
答案 1 :(得分:0)
MS Access VBA使用& 连接字符串。
在您的记录集中,需要将SQL字符串更改为:
Set rs = db.OpenRecordset("SELECT Width FROM " & Conveyor_ID & ";")
编辑:您可能还需要SQL末尾的分号。添加分号。
Edit2:由于您澄清 Conveyor_ID 是一个字符串变量,因此您需要在其周围添加单引号。我之前的回答适用于数字。日期将使用#代替单引号。
正如Erik von Asmuth在下面提到的那样,在VBA窗口中的Access中看起来不需要分号。这是个人偏好。
现在,您的记录集代码应如下所示:
没有分号:
Set rs = db.OpenRecordset("SELECT Width FROM '" & Conveyor_ID & "'")
以分号:
Set rs = db.OpenRecordset("SELECT Width FROM '" & Conveyor_ID & "';")
我刚注意到:
1。括号 - 您不能在变量或参数的VBA中使用它们。您可以在SQL中使用它们,例如,如果您的表名或字段名称中有空格(请参阅下面的代码,例如带有空格的表名),但这是不好的做法
2。您缺少SQL字符串中的表名和WHERE子句(如果这是您的完整SQL字符串而不是伪代码)
Set rs = db.OpenRecordset("SELECT Width FROM [table Name] WHERE fieldName = '" & Conveyor_ID & "'")