Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
Sql 用vba实现msaccess2003中的参数化查询_Sql_Ms Access_Vba_Parameterized - Fatal编程技术网

Sql 用vba实现msaccess2003中的参数化查询

Sql 用vba实现msaccess2003中的参数化查询,sql,ms-access,vba,parameterized,Sql,Ms Access,Vba,Parameterized,嗯。我希望使用参数化查询来避免处理数据中嵌入的双引号或单引号(“or”) 作为一个简单的例子,对于这个参数化的verion,VBA代码是什么样子的 Dim qstr as String Dim possiblyDangerousString as String qstr = "SELECT MyTable.LastName from MyTable WHERE MyTable.LastName = '" & possiblyDangerousString & "';" 我没

嗯。我希望使用参数化查询来避免处理数据中嵌入的双引号或单引号(“or”)

作为一个简单的例子,对于这个参数化的verion,VBA代码是什么样子的

Dim qstr as String

Dim possiblyDangerousString as String

qstr = "SELECT MyTable.LastName from MyTable WHERE MyTable.LastName = '" & possiblyDangerousString & "';"
我没有从我的代码中剪切并粘贴这个(现在在另一个框中),所以可能有输入错误

一旦我理解了这个简单的例子,我就需要转到更复杂的语句(多个参数和连接)。
感谢您在VBA中提供的任何建议,您可以使用以下方法:

Dim db作为DAO.Database
将qdf设置为QueryDef
作为字符串的Dim strSQL
Set db=CurrentDb
strSQL=“参数txtLastName Text(150);" _
&“从MyTable中选择LastName”_
&“其中LastName=txtLastName”
''创建一个临时查询
设置qdf=db.CreateQueryDef(“,strSQL)
qdf.Parameters!txtLastName=Trim(可能是DangerString)
这个示例没有多大用处,因为您现在将如何处理查询?
请注意,您可以在VBA中存储参数查询并分配参数。还请注意,备注字段会成为一个问题,因为参数只能接受255个字符。

使用Replace函数的唯一问题是,只要有“”,它就会替换为“”即使您已经用另一个单引号对单引号进行了限定:“''”变为“''”(依此类推)

您可以创建一个过程或函数来检查“[!]”字符串,并使用类似的方法替换这些字符串:

公共函数QualifySingleQuote(myStr作为字符串)作为字符串

If myStr Like "*'[!']*" Then
    QualifySingleQuote = Replace(myStr, "'", "''")
Else
    QualifySingleQuote = myStr
EndIf
端函数