使用VBA / Access将变量传递给SQL

时间:2018-01-04 23:55:17

标签: vba ms-access access-vba

我有一个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。尝试制作一些有用的程序!)

2 个答案:

答案 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 & "'")