いつも拝見させていただいてます、なめこといいます。
現在以下の環境にて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してはいけない仕様なのでしょうか?
ご存知の方がおられましたらご教授お願いします。
>そもそもマイナスの値に対してUpdateしてはいけない仕様なのでしょうか?
それはさすがに有り得ないでしょう。フィールドAの初期値はどうやって
負にしたんですか?裏で走ってるんじゃないでしょうか?負値の Update 文。
…まさか全部 Insert した?(^^;)…とりあえず Oracle8i で[VB.NET]
使ってちょっとテストした限りでは
RS.CursorLocation = adUseClient
にしたのとフィールドを全て
RS.Fields
で指定したくらいで正常に動作しました。
このコードだと[VB6.0]かと思いますが、オラクルクライアントの環境が無いので…。
別件で
http://www.hi-ho.ne.jp/tsumiki/book_sup1.html
こんなのが引っかかったので載せておきます。
…あとは何かの制限か?まぁテストしてみないと何とも言えませんねぇ。
特攻隊長まるるうさん、回答ありがとうございます。
レスが遅くなり、大変申し訳ございませんでした。
まず、すみません、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ドライバが原因なのでしょうか?
とりあえず動作しましたので、ご報告です。
色々とありがとうございました!
すみません、解決のチェック忘れました。
ツイート | ![]() |