• ベストアンサー

SQLでの変数の扱いについて

VBを利用してのSQL文に変数を使いたいのですが記述方法が良くわかりません。 まず dim a as string dim b as integer dim c as integer a="AAAA" b=10 c=23500 として テーブルZの項目1が nvarchar 項目2が tinyint 項目3がrealであった場合 sql文の記述方法をWebで探していると 文字列変数ならシングルクォーテーションでくくって代入 数値変数ならダイレクトに代入というようにとれるところがあったので下記の 様に記述すると更新されません sqlstr=("UPDATE テーブルZ set 項目1='a',項目2=b,項目3=c where 項目=1") 下記のように分割してそれぞれひとつづつのテストすると更新できます sqlstr=("UPDATE テーブルZ set 項目1=" & a & " where 項目=1") sqlstr=("UPDATE テーブルZ set 項目2='" & b & "' where 項目=1") sqlstr=("UPDATE テーブルZ set 項目2='" & c & "' where 項目=1") 上記の要領で1つにまとめると出来ないので,どのように書けばよいのでしょうか よろしくお願い致します

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

  • ベストアンサー
回答No.3

文字列と変数がごっちゃになってませんか? 解りやすく分けてみましょう。 sqlstr="" sqlstr= sqlstr & "UPDATE テーブルZ " sqlstr= sqlstr & "set 項目1='" & a & "'" sqlstr= sqlstr & ", 項目2=" & cstr(b) sqlstr= sqlstr & ", 項目3=" & cstr(c) sqlstr= sqlstr & " where 項目=1" いかがでしょうか?

mehiro2
質問者

お礼

早速のお返事有難うございました。 こうゆう記述もあるのですね勉強になりました。 ちなみに数値型変数を書き込むときは 項目=" & b & "としても 項目=" & cstr(b)& "としても同じなのでしょうか? 結合すると下記で良いのでしょうか? "UPDATE テーブルZ "&"set 項目1='" & a & "'"& ", 項目2=" & cstr(b)& ", 項目3=" & cstr(c)& " where 項目=1"

その他の回答 (3)

回答No.4

#3です。 SQL文は分けるとトラぶったときなどに 解析しやすいので私はいつもそうしてます。 SELECT文で列をたくさん引っぱってくるときなど みやすくて便利ですよ。 >項目=" & b & "としても >項目=" & cstr(b)& "としても同じなのでしょうか? どちらでもOKだと思うのですが、 sqlstrという変数に、文字列を作っていますので、 数値型は文字列型に変換したほうが無難かと思います。

mehiro2
質問者

お礼

補足へのお返事有難うございました。 マニュアル等見ても良くわからなかったので 大変良くわかりました。 有難うございました

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.2

まとめた場合と、分割した場合のsqlstrの設定がぜんぜん違っていませんか? また、分割したこの文でうまくいくのでしょうか?(書き間違えているような) sqlstr=("UPDATE テーブルZ set 項目1='" & a & "',項目2=" & b & ",項目3=" & c & " where 項目=1") でだめですか?

mehiro2
質問者

お礼

早速のお返事有難うございました。 頂いた要領で上手く動作しました 大変助かりました

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

SQL文の中に、VBの変数名を直接記述したって、データベース・エンジンには、それがVBの変数だってわかりませんので、エラーになります。 下記の単一SQL文の方では、文字列を連結して、SQL文を組み立ててるのに、上の方で、それを行ってないのはどうして? あと、SQL文を組み立てる際、データをシングルクォートでくくる場合、データに含まれるシングルクォートは、エスケープする必要があります。 そこらへんも確認してみては。 ADOのCommandオブジェクトを使って、パラメータとして、VBの変数値を渡すという手もあります。

mehiro2
質問者

お礼

早速のお返事有難うございました。 変数がどのような動きをするのか確かめているうちに判らなくなっていました。 勉強しなおします

関連するQ&A