VBA代码中WHERE关键字的正确语法语法是啥

Posted

技术标签:

【中文标题】VBA代码中WHERE关键字的正确语法语法是啥【英文标题】:What is the correct syntax Syntax for WHERE keyword in VBA CodeVBA代码中WHERE关键字的正确语法语法是什么 【发布时间】:2020-08-04 21:54:52 【问题描述】:

我正在构建一个字符串,它将在我的访问数据库中执行 sql。为了正确引用来源,我使用Allen Brown Audit 的指南作为模板来保存对我的主数据库的更改。

这是目前给我带来麻烦的代码:

' If this was not a new record, save the old values.
If Not bWasNewRecord Then
    sSQL = "INSERT INTO " & sAudTmpTable & " ( audType, audDate, audUser, ID, Campus, Building, Room, `Device Type`, Model, Domain, `Serial Tag`, Barcode, HostName, `Custodian Name`, Notes ) " & _
        "SELECT 'EditFrom' AS Expr1, Now() AS Expr2, NetworkUserName() AS Expr3, " & sTable & "ID, Campus, Building, Room, `Device Type`, Model, Domain, `Serial Tag`, Barcode, Hostname, `Custodian Name`, Notes " & _
        "FROM " & sTable & " WHERE " & sTable & "." & sKeyField & " = " & lngKeyValue & ";"
    db.Execute sSQL, dbFailOnError
End If

目前它返回“参数太少。预期为 1。”的错误,这让我认为这是 WHERE 子句和之后的字符串连接导致的。我的主要问题是这个问题是否是语法问题,我只需要在某处转义或添加双引号,还是语句的逻辑问题,以及我正在尝试做的事情:从条件,更改记录的 ID 与数据库中的 ID 匹配? 欢迎任何笔记或 cmets,感谢您的宝贵时间。

【问题讨论】:

Debug.Print sSQL 在您的调试窗口中留下了什么?是你所期望的吗? 我在 ssql 字符串前后各放了一个,得到:DELETE FROM tempInventoryAuditTable;插入 tempInventoryAuditTable ( audType, audDate, audUser, ID, Campus, Building, Room, Device Type, Model, Domain, Serial Tag, Barcode, HostName, Custodian Name, Notes) SELECT 'EditFrom' AS Expr1, Now() AS Expr2, NetworkUserName() AS Expr3, InventoryID, Campus, Building, Room, Device Type, Model, Domain, Serial Tag, Barcode, Hostname, Custodian Name, Notes FROM WHERE Inventory.ID = 384;这是我所期待的,因为 ID 与我正在编辑的记录匹配 从这些字段中删除空格并相应地调整数据库字段属性会更好吗? 你用的是什么关系型数据库? 哪一行导致“参数太少”错误? 【参考方案1】:

如果你使用的是 SQL Server,你会想要类似的东西

SELECT Room
, [Device Type]
, Model
, Domain
, [Serial Tag]

对于其他 RDBMS(可能对于 JetDB = Access),您需要引号而不是方括号。 (引号实际上也适用于 SQL Server,我通常只使用方括号。)

SELECT Room
, "Device Type"
, Model
, Domain
, "Serial Tag"

...对于区分大小写的 RDBMS(如 Oracle),请引用所有内容(无论如何都不会造成伤害)...

SELECT "Room"
, "Device Type"
, "Model"
, "Domain"
, "Serial Tag"

【讨论】:

以上是关于VBA代码中WHERE关键字的正确语法语法是啥的主要内容,如果未能解决你的问题,请参考以下文章

我收到错误“关键字附近的语法不正确'''

如何在 VBA 中正确输入 sql where 子句?

在SELECT语句中,对查询结果进行排序的子句是啥?能消除重复行的关键字是啥?

在关键字“pivot”附近出现语法错误,提示语法不正确。我在这里想念啥

插入代码错误

sql语句中“where1=1”是啥意思?