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关键字的正确语法语法是啥的主要内容,如果未能解决你的问题,请参考以下文章
在SELECT语句中,对查询结果进行排序的子句是啥?能消除重复行的关键字是啥?