プロが教えるわが家の防犯対策術!

教えてください。
アクセスSQLのwhere句の中で、’がもともとあるデータがあるのですが、
うまく実行できません。おそらく、終わりと認識されている?の加と思います。どうしたらいいのでしょうか?

update A set 'She's not busy' where C = 'She's busy';
このような場合です。
よろしくお願いします

A 回答 (2件)

クエリのSQLビューでしたら、



 Update A Set B = "She's not busy" Where C = "She's busy;"

を試してみてください。
(文字列のくくりに「'」(シングルクォート)ではなく「"」(ダブルクォート)を使用)
※構文的に更新対象フィールドが必要なはずと思い、「B=」を追加しました。


VBA画面での文字列の場合(「Update~」を括るのに既に「"」使用済み)は、
SQL文全体を括る分の「"」も含めて書くと、

 "Update A Set B = " & Chr(34) & "She's not busy" & Chr(34) & " Where C = " & Chr(34) & "She's busy" & Chr(34) & ";"

でいけるかと思います。
(Chr関数は、引数で指定された文字コードの文字を返します:「Chr(34)」は「"」に相当)
    • good
    • 0

一応回答は出ているようですが・・・



もしも貴方がSQLを解析して実行するプログラムを作成すると考えてください

Accessではシングルクォートで囲まれたものを文字列とみなしますので
update A set 'She's not busy' where C = 'She's busy';
の場合、命令は update 対象テーブルは A セットすべきカラムは・・・
おっと、#1回答でもご指摘されているようにカラムがありませんねぇ
ここはカラムがあるものとして・・・
セットするのは'で始まっているので文字列 She' で終わりの'発見したので文字列はShe
次は s not busy' ・・・? 解析不能となるわけです。

AccessのSQLで文字列はシングルクォート、ダブルクォートのどちらを使ってもかまわないので
文字列中にシングルクォートやダブルクォートを含む場合、含まない方を使って囲むと良いです。
また、囲む文字を文字列中に含めたい場合、2個連続するものは1個の文字として判断します。
なので 'She's busy' -> 'She''s busy' こう書けば
She's busy の文字列だと判断してくれます。

VBAでSQLを記述する場合は文字列として""で囲みますし
AccessやSQL Serverではカラム名が特殊文字や予約語の場合
カラム名を[]囲むことになりますが、Oracleでは""を使いますので
SQL上の文字列は'で囲むのが一般的です
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A