- ベストアンサー
SQLで 更新できない
ACCESSでSQLを使っています。 その中で 更新(UPDATE)できないものがあります。 (1) SQLでは 1行を複数に分けると上手くいったことあります。 そういうルールは あるのでしょうか? VB上 (2)実行したい例文は strSQL="UPDATE table SET A = B WHERE C=2 " この時、Bに ‘シングルクォーテーション? を加えると Bが 更新されるのですが 実際は Bは変数なので Bの値をAに更新したいのです。 けれど エラーになってしまいます。 1回 フォームのテキストBOXに入れてから A= Me.BB のようにしたのですが ダメでした。 部分的にしか 表示していないのですが 何か気づく点があればお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。maruru01です。 横からですが、気になったので。 >A=B と A ='" & B & "' とは どう違うのでしょうか? >'"&で囲めば 変数を使用できるということでしょうか? "~A="は単なる文字列です。SQLの実行する時に意味を持つだけで、変数strSQLに格納されているだけでは、Bに入っている"文字"と同じです。 その文字列とBという変数をそのままくっつけても意味がありません。 それでは単に"B"という文字と等しい(=)としているにすぎません。変数Bとは無関係になります。 文字列(及び文字列変数)どうしの結合は&を使わないといけません。 つまり、「'" & 」で囲んでいるのではなく、3つの文字列(と変数)、 「"UPDATE table SET A = '"」と、「B」と、「"' WHERE C=2"」をつなげているのです。 ちょうど、「'" & 」と「 & "'」で囲んでいるように見えるだけです。 AccessVBAでSQLを実行する場合の、SQL文は文字列を指定します。 全部で1つの文字列にして、初めてSQL文として使えます。 あと、B = 文字 はエラーになります。 B = "文字" としないといけません。 こんなこと言われなくても分かっているというなら、余計な意見でした。
その他の回答 (4)
- jaws
- ベストアンサー率34% (30/87)
>文字列変数以外に数値型の変数の場合 >何か ルールはあるのでしょうか? > >例えば、 >Dim i As integer >i=1 >strSQL = "SELECT * FROM LINK WHERE 工番 i" >です。 工番 i という記述の意味がわかりません。 もし 工番=i のことであれば SQLは dim strSQL as String dim i as Integer strSQL = "SELECT * FROM LINK WHERE 工番=" & "'" &i&"'" となります。 これで i はSQL上文字になります。
- jaws
- ベストアンサー率34% (30/87)
>ところで,変数は 使えるということですね? はい。 もちろん使えます。 >例えば >B=文字 >であれば 上の場合、Aに "文字"が入るということで? シングルコーテーションは変数の値が文字列ならという意味でした。 変数が数値ならシングルコーテーションは必要ありません。
お礼
ありがとうございました。 社内でわかる人も少なく 行き詰まっていたところです。 今後とも宜しくお願いします。
- jaws
- ベストアンサー率34% (30/87)
すみません。 (2)についてですが、 strSQL="UPDATE table SET A ='" & B & "' WHERE C=2 " でした。 Bの変数の値を シングルコーテーションで囲わなければなりません。
補足
早速のご回答 ありがとうございます。明日にでも会社で試します。 ところで,変数は 使えるということですね? 例えば B=文字 であれば 上の場合、Aに "文字"が入るということで? A=B と A ='" & B & "' とは どう違うのでしょうか? '"&で囲めば 変数を使用できるということでしょうか?
- jaws
- ベストアンサー率34% (30/87)
(2)についてですが、 strSQL="UPDATE table SET A =" & B & "WHERE C=2 " としてみてください。 変数がをSQLの文字列の中に組み込まなくするのです。
お礼
ありがとうございました。 社内でわかる人も少なく 行き詰まっていたところです。 今後とも宜しくお願いします。 次回からも 例文と共に質問したいと考えます。
補足
回答ありがとうございます。 文字列変数以外に数値型の変数の場合 何か ルールはあるのでしょうか? 例えば、 Dim i As integer i=1 strSQL = "SELECT * FROM LINK WHERE 工番 i" です。