• ベストアンサー

access VBA SQLの記述について

access VBA SQLの記述について (下記は私の作成したものではありません) -------------------------------------------- 'IDの取得 myID = [Forms]![フォーム]![ID] '削除クエリ SQLstr = "DELETE FROM テーブル WHERE ID = " & myID DoCmd.RunSQL SQLstr -------------------------------------------- 一応この記述で、問題なく動作しているんです。 「" & myID」の部分は、なぜは正しいのでしょうか? 「" & myID & ""」でないといけないと思っていました。 「&」で囲い、 さらにそれを「”」で囲い、 「&」の前後は半角スペースを挿入する。 という記述のみが正しいと思っていたのですが・・・? また、こういう点の総括した正しい情報はどこで学べますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.3

>「&」で囲い、 &で囲っているわけではありません &は前後のものを結合する演算子です >"DELETE FROM テーブル WHERE ID = " & myID では "DELETE FROM テーブル WHERE ID = " に myID を結合しています myIDの中身が「1234」だとすれば "DELETE FROM テーブル WHERE ID = 1234" という文字列が出来ます >「" & myID & ""」 はさらに""(空き文字)を結合しているのです 空き文字列ですから結果に変わりはありません >こういう点の総括した正しい情報はどこで学べますか? きちんと理解すれば難しいことではありません

PearlJam69
質問者

お礼

ありがとうございます。 やっと理解できました。 >&は前後のものを結合する演算子です &の前後に半角スペースが必要な理由がわかりました。 myIDが文字列の場合だと、「’(シングルコーテーション)」で囲う必要があるので、 「WHERE ID='" & myID & "'"」というように結合するのですね。

その他の回答 (3)

  • ganbaro
  • ベストアンサー率45% (43/94)
回答No.4

myID が数値フィールドの場合、記述通りです。 正確には SQLstr = "DELETE FROM テーブル WHERE ID = " & myID & ";" DoCmd.RunSQL SQLstr とした方がよいと思います。 myID が文字フィールドの場合、 SQLstr = "DELETE FROM テーブル WHERE ID = '" & myID & "';" DoCmd.RunSQL SQLstr となります。 ’(実際は小文字)で囲まれたものは変数の値が文字ですということです

  • bardfish
  • ベストアンサー率28% (5029/17766)
回答No.2

訂正です。 >>「" & myID & ""」でないといけないと思っていました。 >この書き方だと、SQLに'myID'という文字そのものが入ってしまうので、Formで入力した値は反映されません。 myIDという文字は入りませんね(´~`ヾ) myIDが数値型の場合、最後の「""」はあってもなくても同一の結果になります。

PearlJam69
質問者

お礼

ありがとうございます。 試してみると、 >最後の「""」はあってもなくても同一の結果になります。 おっしゃるとおり、正にそうなるのですが、 なぜそうなるのか?と感じたゆえの質問でした。 変数が数値型であれば・・・、ということなんですね。 こういう事を総括した情報を習得したいと思っているのですが、 もしご存知でしたら、教えていただけますでしょうか?

  • bardfish
  • ベストアンサー率28% (5029/17766)
回答No.1

myIDという変数に格納された値でSQLを作るのならこれが正解です。 >「" & myID & ""」でないといけないと思っていました。 この書き方だと、SQLに'myID'という文字そのものが入ってしまうので、Formで入力した値は反映されません。 また、テーブル.IDのデータ型が文字列の場合は SQLstr = "DELETE FROM テーブル WHERE ID = '" & myID & "'" とする必要があります。