DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Oracleテーブルに書き込みができない。。。

環境/言語:[WindowsXP]
分類:[その他]

現在、Access2002を使ってツールを作成していますが、
データを更新の際、エラーが発生してしまいます。

Private Sub cmd仕掛更新_Click()

Dim cnn As New ADODB.Connection 'Oracle接続用オブジェクト
Dim RS As New ADODB.Recordset
Dim mySQL As String


'必須項目チェック
If IsNull(Me!text仕掛数量.Value) Then
MsgBox "必須項目に入力がありません。", vbExclamation
Exit Sub
End If


cnn.Open "Provider=MSDAORA.1; Persist Security Info=False; Data Source=****; User ID=****; Password=****;"

mySQL = "SELECT * FROM TBL_A WHERE ロットNO = '" & Me!textロットNO2.Value & "'"
RS.Open mySQL, cnn, adOpenDynamic, adLockOptimistic


'レコードを更新
   ここでエラーが発生します。
   ↓
RS.Fields("A数量").Value = Me!text仕掛数量.Value
RS.Fields("B数量").Value = Me!text仕掛数量.Value

RS.Update

RS.Close



MsgBox "登録完了しました。", vbInformation


End Sub

エラーコードは
「実行時エラー'3251'
現在のRecordsetは更新をサポートしていません。プロバイダか、選択されたロックタイプの
 限界の可能性があります。」

いろいろネットなどで調べてみたのですが分からず・・・
どなたか原因が分かる方がいらっしゃればご教授願います。
■No24416に返信(JINさんの記事)
> 現在、Access2002を使ってツールを作成していますが、
Access VBA による開発という事でしょうか。


>     RS.Open mySQL, cnn, adOpenDynamic, adLockOptimistic

MSDAORA は、編集可能な「サーバーカーソル」をサポートしていません。

Oracle 製の OraOLEDB.Oracle を使うか、あるいは、サードパーティ製の
Oracle プロバイダや Oracle 用 ODBC ドライバでの接続に切り替えるか、
UPDATE SQL での更新作業に切り替えてください。

あるいは「クライアントカーソル」を選択すれば、MSDAORA でも更新可能です。
ただし当然ながら、静的カーソルでの取得となってしまうため、件数の多い
テーブルだと、転送負荷が高くなってしまい、お薦めできるものではありません。

(adUseClient を選択した場合には、どのプロバイダを使った場合にも
 必ず adOpenStatic となる仕様です)



ADO を使う時は、CursorType と LockType の組み合わせに注意してください。
プロバイダによって、使用可能な組み合わせは異なります。

なお、使用不可能な組み合わせを選んだ場合には、別の組み合せに
補正されるプロバイダと、エラーになるプロバイダとが存在します。

---------
参考情報として、MSDAORA で使用可能な組み合わせを記述しておきます。


サーバーカーソルモード(CursorLocation = adUseServer)

Cursor\Lock|    ReadOnly     |   Pessimistic   |    Optimistic   | BatchOptimistic 
------------+-----------------+-----------------+-----------------+-----------------
ForwardOnly | FwdOnly/ReadOnly| FwdOnly/ReadOnly| FwdOnly/ReadOnly| FwdOnly/ReadOnly
     Keyset | Static/ReadOnly | Static/ReadOnly | Static/ReadOnly | Static/ReadOnly
    Dynamic | Static/ReadOnly | Static/ReadOnly | Static/ReadOnly | Static/ReadOnly
     Static | Static/ReadOnly | Static/ReadOnly | Static/ReadOnly | Static/ReadOnly


クライアントカーソルモード(CursorLocation = adUseClient)

Cursor\Lock|    ReadOnly     |   Pessimistic   |    Optimistic   | BatchOptimistic 
------------+-----------------+-----------------+-----------------+-----------------
ForwardOnly | Static/ReadOnly |   Static/Batch  |Static/Optimistic|  Static/Batch
     Keyset | Static/ReadOnly |   Static/Batch  |Static/Optimistic|  Static/Batch
    Dynamic | Static/ReadOnly |   Static/Batch  |Static/Optimistic|  Static/Batch
     Static | Static/ReadOnly |   Static/Batch  |Static/Optimistic|  Static/Batch



なお、上記は参考情報です。御自身の環境でも検証される事をお薦めします。
Recordset を Open した後で、CursorLocation/LockType/CursorType の値を
調べることで、サポートされる組み合わせを調べること出来ます。

(それぞれの定数の意味が分からない場合は、MDAC SDK 等で確認してください)

DOBON.NET | プログラミング道 | プログラミング掲示板