我在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 = """ & rs1("compound") & """", dbOpenDynaset, dbReadOnly)
我在定义rs6
时遇到问题。我的问题不是查询本身,而是使用rs1("compound")
。遗憾的是,化合物名称包含会破坏VBA中查询语句的引号。这源于化学命名法,不能改变。
任何想法如何解决这个问题?我已经在各种星座中尝试了两个()和[]括号,但是它们没有覆盖“包含在复合名称中。”
答案 0 :(得分:0)
您需要复制引号("转义"它们在VB语法中):
Set rs6 = db.OpenRecordset( _
"SELECT [ID] FROM Compounds WHERE Compounds.Name = """ & _
REPLACE(rs1("compound"),"""","""""") & _
"""", dbOpenDynaset, dbReadOnly _
)
或者使用参数化查询(Access VBA中的?语法),这是安全编写脚本的首选解决方案,尤其是当compound
可以包含用户输入数据时。