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