使用vba访问2003的参数化查询
问题描述:
好的。我想使用参数化查询,以避免与嵌入式双或单引号(”或“)在我的数据处理。使用vba访问2003的参数化查询
举一个简单的例子,会是什么VBA代码看起来像这样的参数优化版本?
Dim qstr as String
Dim possiblyDangerousString as String
qstr = "SELECT MyTable.LastName from MyTable WHERE MyTable.LastName = '" & possiblyDangerousString & "';"
我丝毫没有削减和(现在在不同的盒子)从我的代码粘贴此,所以有可能是一个错字。
一旦我弄清楚这个简单的例子,我需要移动到更复杂报表(多个参数和连接) 感谢您的任何建议
答
在VBA中,你可以使用类似:
Dim db As DAO.Database
Dim qdf As QueryDef
Dim strSQL as String
Set db = CurrentDb
strSQL = "PARAMETERS txtLastName Text(150); " _
& "SELECT LastName FROM MyTable " _
& "WHERE LastName=txtLastName"
''Create a temporary query
Set qdf = db.CreateQueryDef("", strSQL)
qdf.Parameters!txtLastName = Trim(possiblyDangerousString)
这个例子是没有多大用处,因为你有什么打算,现在与查询呢? 请注意,您可以存储参数查询并将参数分配到VBA中。另请注意,备注字段成为问题,因为参数只能接受255个字符。
答
使用Replace函数的唯一问题是,任何有“”的地方都会用“''”代替,即使你已经用单引号限定了单引号,“''”变成了“ ''''“ (等等)。
您可以创建一个过程或函数来检查 “'[!']” 字符串,并取代那些使用LIKE:
公共功能QualifySingleQuote(myStr中的字符串)作为字符串
If myStr Like "*'[!']*" Then
QualifySingleQuote = Replace(myStr, "'", "''")
Else
QualifySingleQuote = myStr
EndIf
结束功能