ADODBでのUpdate

解決


なめこ  2004-09-01 00:58:01  No: 116027

いつも拝見させていただいてます、なめこといいます。

現在以下の環境にてVBプログラムの開発を行っています。
サーバ:Win2K Srv
DB:Oracle9i
クライアント:Win2K Pro
処理:テーブルAをEOFまで読込み、フィールドAの更新を行う処理を作成しています。

------------ここから--------------------------
strSQL = "Select * From テーブルA"
Set RS = CreateObject("ADODB.Recordset")
RS.LockType = adLockOptimistic
RS.Open strSQL, コネクション変数
Do While Not RS.EOF
    lngWork = RS("フィールドA") + 1
    RS("フィールドA").Value = lngWork
    RS.Update
    RS.MoveNext
Loop
RS.Close
Set RS = Nothing
------------ここまで--------------------------

フィールドAはNUMBER型で、フィールドAの内容を1ずつプラスするというだけの処理です。
ところが実行前のフィールドAにマイナスの値が入っていると、「更新する行が見つからなかったため、クエリベースの更新に失敗しました。」というエラーになってしまいます。
(フィールドAの初期値が全て正の値であると正常に処理を行います)
そもそもマイナスの値に対してUpdateしてはいけない仕様なのでしょうか?
ご存知の方がおられましたらご教授お願いします。


特攻隊長まるるう  2004-09-16 20:41:38  No: 116028

>そもそもマイナスの値に対してUpdateしてはいけない仕様なのでしょうか?
それはさすがに有り得ないでしょう。フィールドAの初期値はどうやって
負にしたんですか?裏で走ってるんじゃないでしょうか?負値の Update 文。
…まさか全部 Insert した?(^^;)…とりあえず Oracle8i で[VB.NET]
使ってちょっとテストした限りでは
  RS.CursorLocation = adUseClient
にしたのとフィールドを全て
  RS.Fields
で指定したくらいで正常に動作しました。
このコードだと[VB6.0]かと思いますが、オラクルクライアントの環境が無いので…。

別件で
http://www.hi-ho.ne.jp/tsumiki/book_sup1.html
こんなのが引っかかったので載せておきます。

…あとは何かの制限か?まぁテストしてみないと何とも言えませんねぇ。


なめこ  2004-09-30 02:44:43  No: 116029

特攻隊長まるるうさん、回答ありがとうございます。
レスが遅くなり、大変申し訳ございませんでした。

まず、すみません、VBのバージョンが6.0というのを記載し忘れました。

>フィールドAの初期値はどうやって負にしたんですか?
これはORACLEのツール(Enterprise ManagerやSQL Plus)で
行いました。ツール上の更新や直接SQL文を実行した場合は
正常に更新を行うことが可能でした。(当たり前ですが・・・)

>別件で
>http://www.hi-ho.ne.jp/tsumiki/book_sup1.html
>こんなのが引っかかったので載せておきます。
参照させていただきました。
なるほど、こういったオプションが存在するのですね。
ではでは・・・、うーん、上手くいかないです・・・。
エラーの内容はオプションをどの設定値にしても変化が
ありません・・・。

今回の事象でエラーと判断しているのはどこなのか、というの
が気になり、ORACLEが原因であれば「ORAXXXX」みたいな
エラーコードを返してくれそうな気がしたのでODBCドライバが
原因かなと思い、ODBCドライバを以下のように変更したら
上手く動作しました。
(変更前)
Oracle in OraHome92
(変更後)
Microsoft ODBC for Oracle

うーん、オラクルのODBCドライバが原因なのでしょうか?
とりあえず動作しましたので、ご報告です。

色々とありがとうございました!


なめこ  2004-09-30 02:46:25  No: 116030

すみません、解決のチェック忘れました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加