使用vba在ms access 2003中进行参数化查询

时间:2010-02-23 01:48:38

标签: sql ms-access vba parameterized

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

作为一个简单的例子,VBA代码对于参数化版本来说是什么样的?

Dim qstr as String

Dim possiblyDangerousString as String

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

我没有剪切并粘贴我的代码(现在在另一个框中),所以可能会有拼写错误。

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

2 个答案:

答案 0 :(得分: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个字符。

答案 1 :(得分:3)

使用替换功能的唯一问题是,只要有“'”它就会替换为“''”,即使您已经使用另一个单引号限定了单引号:“''”变为“' ''''(等等)。

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

Public Function QualifySingleQuote(myStr as string)As String

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

结束功能