1

評価やその他のツールを使用してクライアント情報を収集するデータベースがあります。多くの場合、評価では、予想どおり、直接引用符が取得されたときに、データに二重引用符が含まれます。SQLの更新を実行すると(VBAを使用してフロントエンドにアクセスしてSQL Server 2008 R2バックエンドにアクセス)、データ内の二重引用符で爆発します。暫定的に、データを入力するときに一重引用符を使用するようにスタッフに依頼しましたが、それは忘れてしまい、二重引用符に達するとプログラムがクラッシュするため、持続不可能な解決策です。データ型はnvarchar(max)です。

現在のVBA文字列は次のようになります。

strInsertSQL = "INSERT INTO tblIRPDetail(IRPID、SectionID、Challenge、Goal、Objective、Intervention、IntDate)VALUES("&intNewID& "、"&intSection& "、" ""&strChallenge& "" "、" ""&strGoal &"" "、" ""&strObjective& "" "、" ""&strIntervention& "" "、" ""&strIntDate& "" ");"

基本的に、strVariablesはいずれも、任意の組み合わせで一重引用符または二重引用符を使用できます。一重引用符では機能しますが、二重引用符では機能しません。確かにこれはかなり一般的な問題です、私は誰かが簡単な解決策を持っていることを望んでいます!

前もって感謝します!

4

3 に答える 3

0

私がこれを実行するために使用した方法を少しコピーしてください。

それまでの間、どうしてReplace(val, """, "'")?そうすれば、文字列内のaのインスタンスは"一重引用符に置き換えられます'か?

于 2012-10-19T12:39:16.450 に答える
0

代わりに、クエリをパラメーター化し、値をパラメーターとして追加します。

これが役立つかもしれません: vbaを使用したms access 2003のパラメーター化されたクエリ

于 2012-10-19T11:36:55.897 に答える
0

Access SQL ステートメントでは、テキスト値に一重引用符または二重引用符を使用できます。そのため、INSERT ステートメントで一重引用符を使用できますが、挿入するテキストに一重引用符が含まれていると同様の問題が発生し、挿入テキスト内の一重引用符を 2 倍にすることで解決できます。

Replace(strChallenge, "'", "''")

あまり改善されていないようです。OTOH、VBA を使用してテーブルに行を挿入しているため、INSERTクエリを使用する必要はありません。

テーブルを として開きDAO.Recordset、新しい行を追加してから、変数値を対応するフィールドに割り当てます。

Public Sub NPO_AddRow()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset

    Set db = CurrentDb
    Set rs = db.OpenRecordset("tblIRPDetail", dbOpenTable, dbAppendOnly)
    With rs
        .AddNew
        !IRPID = intNewID
        !SectionID = intSection
        !Challenge = strChallenge
        !Goal = strGoal
        !Objective = strObjective
        !Intervention = strIntervention
        !IntDate = strIntDate
        .Update
        .Close
    End With
    Set rs = Nothing
    Set db = Nothing
End Sub

パラメータ クエリとは異なり、このアプローチでは 255 文字を超えるテキスト文字列を追加できることに注意してください。

于 2012-10-19T14:52:37.517 に答える