• ベストアンサー

SQLの選択処理について

SQLの選択処理が上手くいきません Dim j As Integer と宣言します。 j=1 とします。  strSQL = "SELECT * FROM LINK WHERE 工番 =j;" だと 上手くいきません。ちなみに  strSQL = "SELECT * FROM LINK WHERE 工番 =1;" だと上手くいきました。   昨日、更新処理時については教えて頂いたのですが 上記は何故上手くいかないのでしょうか?  変数が数字で設定しているから?

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

  • ベストアンサー
  • mfuku
  • ベストアンサー率50% (173/345)
回答No.2

正しくは、 strSQL = "SELECT * FROM LINK WHERE 工番 =" & CStr(j) & ";" としてください。 strSQL = "SELECT * FROM LINK WHERE 工番 =j;" とすると、「工番が『j』のレコードをLINKテーブルから取得する」というSQLになってしまいます。 「工番が『j』の~」ではなく「工番が『jの変数の値』の~」という条件のはずですよね。 上記の正しい記述の意味は、文字型変数strSQLに、"SELECT * FROM LINK WHERE 工番 ="と、Integer型変数jを文字型に型変換した値と、";"を代入する、という意味になります。

cdma
質問者

お礼

早速の回答 ありがとうございました。 会社から質問して10分後に回答頂き 即業務に実施できました。 社内でも 聞くことができず、行き詰まっていたところです。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

strSQLは文字列である必要があるのはご存知ですよね。だからこそ=で右辺に”SELECT・・・”を結べる(=代入できる)訳けです。 その”と”の中(間)に=jを入れているわけですから工番の内容がj(jというjの小文字の内容)のものがあれば選択するが、工番は数字のものしかないのでしょうから何も選択しません。 ”・・・工番=1;”は1という内容の工番のものは存在しますでしょうから、選択するわけです。 ここを相対化してSQL文を作るにはjを内容を決めたあと、文字列化して、工番=の後に、その文字列を&などで くっ付ければ良い。従って””の後方の”は「・・工番=」の直後に”を付けなければなりません。 SQL文は実行する時変数部分の具体的文字列化までは やった上で実行は「してくれません。」プログラマーの方で具体的文字列化をする必要があります。

  • misoka
  • ベストアンサー率35% (56/160)
回答No.1

strSQL = "SELECT * FROM LINK WHERE 工番 = " & CStr( j ) という具合でやればよいのではないでしょうか? ""(ダブルクォーテーション)内では変数は使えないだろうと思います。

cdma
質問者

お礼

早速の回答 ありがとうございました。 会社から質問して10分後に回答頂き 即業務に実施できました。 社内でも 聞くことができず、行き詰まっていたところです。

関連するQ&A