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

解決策の一例

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

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

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

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


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-01-20 (日) 23:29:59 (2006d)