Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA Access中的SQl查询:对象名称中包含引号的变通方法_Sql_Ms Access_Vba - Fatal编程技术网

VBA Access中的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

我正在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(“复合”)
。不幸的是,复合名称包含引号,这会破坏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 _
)