2

Ok。データに埋め込まれた二重引用符または単一引用符 (" または ') を処理しないように、パラメーター化されたクエリを使用したいと考えています。

簡単な例として、これのパラメーター化されたバージョンの 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

置換機能を使用する際の唯一の問題は、"'" がある場所ならどこでも、単一引用符の後に別の単一引用符を既に修飾していても、"''" に置き換えられることです: "''" は "'''' になります。 " (等々)。

" '[!'] " 文字列をチェックし、Like を使用してそれらを置き換えるプロシージャまたは関数を作成できます。

Public Function QualifySingleQuote(myStr as string) As String

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

終了機能

于 2010-08-28T18:34:24.490 に答える