VBA Access中的SQl查询:对象名称中包含引号的变通方法
我正在Microsoft Access中使用VBA,并尝试在VBA代码中使用以下SQL查询定义记录集VBA Access中的SQl查询:对象名称中包含引号的变通方法,sql,ms-access,vba,Sql,Ms Access,Vba,我正在Microsoft Access中使用VBA,并尝试在VBA代码中使用以下SQL查询定义记录集 Set rs1 = db.OpenRecordset("SELECT DISTINCT food, compound FROM Composition_data", dbOpenDynaset, dbReadOnly) Set rs6 = db.OpenRecordset("SELECT [ID] FROM Compounds WHERE Compounds.Name = """ & r
Set rs1 = db.OpenRecordset("SELECT DISTINCT food, compound FROM Composition_data", dbOpenDynaset, dbReadOnly)
Set rs6 = db.OpenRecordset("SELECT [ID] FROM Compounds WHERE Compounds.Name = """ & rs1("compound") & """", dbOpenDynaset, dbReadOnly)
我在定义rs6
时遇到问题。我的问题不是查询本身,而是关于rs1(“复合”)
。不幸的是,复合名称包含引号,这会破坏VBA中的查询语句。这源于化学命名法,不能更改
有没有办法解决这个问题?我尝试了各种星座中的()和[]方括号,但它们不会覆盖复合名称中包含的“。您需要复制引号(“在VB语法中转义”):
或者使用参数化查询(?Access VBA中的语法),这是安全编写脚本的首选解决方案,尤其是当
复合可以包含用户输入数据时。您需要复制引号(“在VB语法中转义”):
或者使用参数化查询(?Access VBA中的语法),这是安全编写脚本的首选解决方案,尤其是当复合词
可以包含用户输入数据时。复合词中有多少个引号?引号的数量和位置是否始终相同?我相信最多有2个引号(“)在名称和引号的位置上,每行的引号可以不同。例如:氰基3-O-(6'-丙二酰-3'-葡糖苷)名称还可以包含撇号(')、圆括号、方括号和破折号。然而,到目前为止,这些还没有引起任何麻烦。一个化合物中有多少个引号?引号的数量和位置是否总是相同的?我相信名称中最多有2个引号(“),引号的位置可能因行而异。例如:氰基-3-O-(6'-丙二酰-3'-葡萄糖苷)名称也可以包含撇号('),圆括号,方括号和破折号。但是到目前为止,这些都没有造成任何问题。为什么不使用&Chr(34)
来代替呢?为什么不更容易解释呢?如果VBA的转义语法很难看,我们需要第三个参数中的两个来替换
,所以我更喜欢内联转义而不是多个concat。为什么不使用&Chr(34)
?不容易,为什么?虽然VBA的转义语法很难看,但是我们需要第三个参数中的两个来替换”
,所以我更喜欢内联转义而不是多个concat。
Set rs6 = db.OpenRecordset( _
"SELECT [ID] FROM Compounds WHERE Compounds.Name = """ & _
REPLACE(rs1("compound"),"""","""""") & _
"""", dbOpenDynaset, dbReadOnly _
)