プロが教える店舗&オフィスのセキュリティ対策術

すみません、検索はしたのですが・・・

VB6.0でACCESS2000のデータをUPDATEしたいと思っています。

ですが
※P_CN_DATABASEは、ADODB.Connectionです。
※VAL_1/VAL_2は変数です。

---------------------------------------------------------------------
P_CN_DATABASE.Execute "UPDATE SET TABLE1 COLUMN1 = '" & VAL_1 & "'"
---------------------------------------------------------------------

とすると、全件のデータが更新されるのですが、

---------------------------------------------------------------------
P_CN_DATABASE.Execute "UPDATE SET TABLE1 COLUMN1 = '" & VAL_1 & "' WHERE COLUMN2 = '" & VAL_2 & "'"
---------------------------------------------------------------------

このようにWhere句をつけるとエラーも発生せず、何も更新されません。

更新するデータとWhere句のデータの、それぞれのシングルクォーテーションが不要なのかな?と思い、はずして試しましたがダメでした。

何がいけないのでしょうか?
よろしくお願いします!

A 回答 (2件)

こんにちは。

maruru01です。

とりあえず、UPDATE構文が間違っている件は置いておくとします。
COLUMN2フィールドにはどんな値があって、変数VAL_2には実行時にどんな値が代入されているかを確認して下さい。
(Executeで実行する直前にMsgBoxを置くか、イミディエントウィンドウに出力しましょう。)
データ型が違う場合は、エラーになるはずですが、一応それも確認して下さい。
また、データが文字列ということは、全角・半角やその他微妙に、実際のテーブルの内容と変数VAL_2の内容が違うかも知れないので確認して下さい。

なお、No.1の人のWHEREを「""」の外に出すという方法をしてもエラーになるだけで、指摘内容は間違っていると思います。
(そのそも、Executeメソッドでは表示だけ(つまりSELECTだけ)はもともと出来ないはずです。)

この回答への補足

お返事ありがとうございました。
あれからも色々やってみたところ、
UPDATE文のテーブル名やカラム名も、全て変数にしたところ、Where句に一致するデータだけが更新されました。
理由は分かりませんが・・・
お二方からのお返事嬉しかったです、ありがとうございました。

補足日時:2004/01/13 21:44
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

> とりあえず、UPDATE構文が間違っている件は置いておくとします。
すみません・・・間違えました(--;

実行時のSQL文はイミディエントウィンドウに出力していました。特に問題はなかったと思われたのですが・・・。

[VAL_2]には文字列としての数字がはいっています。
--------------------------------------
" WHERE COLUMN2 = '00001' "
--------------------------------------
となります。
ACCESSにおけるカラムのデータ型はテキスト型です。
データベースにも存在しているデータです。
※データ型が違っているエラーは通過してきましたので(--;)、大丈夫だと思っていますが・・・

#1の方の方法もまだ試していないのですが、WHERE句を外に出してもだめそうなのですね・・・

また宜しかったら、お話伺わせて下さい。
ありがとうございました。

お礼日時:2004/01/13 12:46

こん**は。



「"」の位置をもう一度見てください。

P_CN_DATABASE.Execute "UPDATE SET TABLE1 COLUMN1 = '" & VAL_1 & "' WHERE COLUMN2 = '" & VAL_2 & "'"

では、"UPDATE~COLUMN1 = '"と"'WHERE COLUMN2 = '"と"'"が、画面表示の対象になってしまっています。
つまり、WHERE句が命令じゃなく表示になっています。

だから、

P_CN_DATABASE.Execute "UPDATE SET TABLE1 COLUMN1 = '" & VAL_1 & "'" WHERE "COLUMN2 = '" & VAL_2 & "'"

のように、WHEREが命令になるようにしてみてください。

参考になれば幸いです。
    • good
    • 0
この回答へのお礼

shiro-haseさん、お返事ありがとうございます。
今、自宅ではないため試せないのですが、
帰宅後、さっそく試してみます!

ただ少し分からないのですが、Where句を指定しないUpdate文は、単なる文字列ですよね?
------------------------------------------------
"UPDATE SET TABLE1 COLUMN1 = '" & VAL_1 & "'"
------------------------------------------------
この部分だけだと画面表示の対象にはならずに命令として認識されるのでしょうか?
(実際データが更新されているので認識されているのでしょうが・・・)
なぜ「WHERE」だけが、文字列生成の「"」「"」からはずれるのか理解できなくて・・・。
もし宜しかったら、教えていただければと思います。

お返事ありがとうございました。
※しかも質問に載せたUpdate文も間違っていますね・・・すみません!

お礼日時:2004/01/13 08:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!