2

好的。我想使用参数化查询来避免处理数据中嵌入的双引号或单引号(“或')。

举个简单的例子,这个参数化版本的 VBA 代码会是什么样子?

Dim qstr as String

Dim possiblyDangerousString as String

qstr = "SELECT MyTable.LastName from MyTable WHERE MyTable.LastName = '" & possiblyDangerousString & "';"

我没有从我的代码中剪切和粘贴它(现在在另一个盒子上),所以可能有错字。

一旦我弄清楚了这个简单的例子,我需要转向更复杂的语句(多个参数和连接)。感谢您的任何建议

4

2 回答 2

4

在 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 个字符。

于 2010-02-23T10:12:01.127 回答
3

使用 Replace 函数的唯一问题是,任何有 "'" 的地方都会用 "''" 替换,即使你已经用另一个单引号限定了单引号:"''" 变成 "'''' “ (等等)。

您可以创建一个过程或函数来检查“ '[!'] ”字符串并使用 Like 替换那些:

公共函数 QualifySingleQuote(myStr as string) As String

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

结束功能

于 2010-08-28T18:34:24.490 回答