Top > VBA AccessのSQLエラー回避策(文字列のエスケープ)

Accessで、SQLを組み立てるときに、取り扱う文字列に「'」(=シングルクオーテーション、アポストロフィー)が入っていると、エラーになる。

解決策の一例

値の代入時のクエリ式、構文エラーについて
http://www.accessclub.jp/bbs2/0026/beginter08656.html

  • テキスト型のフィールドに「I'm a boy.」のように「'」が入っているデータを代入するときは、「'」をエスケープする必要がある。
    • 「'」→「''」にする。(エスケープする。)
    • 二つ重ねると、Access側でSQLを構成する「'」ではなく、文字列としての「'」と認識する仕組みになっているらしい。
  0
  1
Dim strSQL
strSQL = "INSERT INTO table (member_id, name, comment) VALUES (1, 'tom', 'I'm a boy.')"

↑エスケープしないと、commentにバインドされる文字列が「I」になってしまい、残りの部分はゴミデータ扱いとなり、エラーになる。

  0
  1
Dim strSQL
strSQL = "INSERT INTO table (member_id, name, comment) VALUES (1, 'tom', 'I''m a boy.')"

↑エスケープすれば、commentにバインドされる文字列が「I'm a boy.」になり、エラーにならない。

エスケープする関数

値の代入時のクエリ式、構文エラーについて
http://www.accessclub.jp/bbs2/0026/beginter08656.html

comment = Replace(comment,"'","''",,,vbDataBaseCompare)

  • ただし、Accessのreplace関数は、Access2000以降でないと使えないらしい。

シングルクオーテーションのなかで、シングルクオーテーションを表示させたい場合は、
' ' ' --->' ' ' ' こうなります。
×        ○

" " " -------->" " " " ダブルクオーテーションでも同じ
'をさがしだして、' ' シングルクオーテーションを2つにすればいい

VBでは、文字列のエスケープが、上記のようになっているらしい。
ちょっとテストしてみないとあかんな。><


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes
Last-modified: (740d)