2010-02-23 51 views
2

好的。我想使用参数化查询,以避免与嵌入式双或单引号(”或“)在我的数据处理。使用vba访问2003的参数化查询

举一个简单的例子,会是什么VBA代码看起来像这样的参数优化版本?

Dim qstr as String 

Dim possiblyDangerousString as String 

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

我丝毫没有削减和(现在在不同的盒子)从我的代码粘贴此,所以有可能是一个错字。

一旦我弄清楚这个简单的例子,我需要移动到更复杂报表(多个参数和连接) 感谢您的任何建议

回答

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

3

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

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

公共功能QualifySingleQuote(myStr中的字符串)作为字符串

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

结束功能