- ベストアンサー
SQLの選択処理について
SQLの選択処理が上手くいきません Dim j As Integer と宣言します。 j=1 とします。 strSQL = "SELECT * FROM LINK WHERE 工番 =j;" だと 上手くいきません。ちなみに strSQL = "SELECT * FROM LINK WHERE 工番 =1;" だと上手くいきました。 昨日、更新処理時については教えて頂いたのですが 上記は何故上手くいかないのでしょうか? 変数が数字で設定しているから?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
正しくは、 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を文字型に型変換した値と、";"を代入する、という意味になります。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
strSQLは文字列である必要があるのはご存知ですよね。だからこそ=で右辺に”SELECT・・・”を結べる(=代入できる)訳けです。 その”と”の中(間)に=jを入れているわけですから工番の内容がj(jというjの小文字の内容)のものがあれば選択するが、工番は数字のものしかないのでしょうから何も選択しません。 ”・・・工番=1;”は1という内容の工番のものは存在しますでしょうから、選択するわけです。 ここを相対化してSQL文を作るにはjを内容を決めたあと、文字列化して、工番=の後に、その文字列を&などで くっ付ければ良い。従って””の後方の”は「・・工番=」の直後に”を付けなければなりません。 SQL文は実行する時変数部分の具体的文字列化までは やった上で実行は「してくれません。」プログラマーの方で具体的文字列化をする必要があります。
- misoka
- ベストアンサー率35% (56/160)
strSQL = "SELECT * FROM LINK WHERE 工番 = " & CStr( j ) という具合でやればよいのではないでしょうか? ""(ダブルクォーテーション)内では変数は使えないだろうと思います。
お礼
早速の回答 ありがとうございました。 会社から質問して10分後に回答頂き 即業務に実施できました。 社内でも 聞くことができず、行き詰まっていたところです。
お礼
早速の回答 ありがとうございました。 会社から質問して10分後に回答頂き 即業務に実施できました。 社内でも 聞くことができず、行き詰まっていたところです。