VB6 ADOコントロールについて


m  2005-10-25 00:16:25  No: 126795

環境は Windows2000 + VB6 + SQLServer2000 です。

サーバに接続しています。

下記のコードについてです。

  With Adodc1
    .ConnectionString = "Provider=MSDASQL;DSN=test;UID=sa;PWD=test;DATABASE=testdb;"
    .CommandType = adCmdText
    .CursorLocation = adUseClient
    .CursorType = adOpenStatic
    .LockType = adLockOptimistic
    .RecordSource = "SELECT 氏名 FROM M_Data"
    .Refresh
    .Recordset.ActiveConnection.BeginTrans
    Do
      .Recordset.Fields("氏名").Value = "テスト"
      .Recordset.MoveNext
    Loop Until .Recordset.EOF = True
    .Recordset.ActiveConnection.CommitTrans
  End With

この処理をネットワークで監視していますが、
.Recordset.Fields("氏名").Value = "テスト"
の部分で
データの更新の度にサーバに接続されていることが分かります。
データの書き換えを蓄積してサーバーへの書き込みを一括で行いたいのですが可能でしょうか?


もげ  2005-10-25 01:16:54  No: 126796

VB6ではなく、.NETで非接続型にしたほうが要件にかなっているかも。

ADOデータコントロールは、
ひとつのコントロールごとに勝手なタイミングで暗黙接続するし、
レコード移動時に勝手に更新してしまうので、
この場合は使用しないほうがよいでしょう。

ADOの場合、プロバイダが対応していれば、
LockType=adLockBatchOptimistic  でUpdateBatchメソッドを使ってバッチ更新が可能です(Adoデータコントロールで使用可能かは未確認)。
もしくは、データ連結を行わずに処理したほうがいいかもと思います。


m  2005-10-25 19:45:17  No: 126797

>VB6ではなく、.NETで非接続型にしたほうが要件にかなっているかも。
今の開発環境は変えられません。

>ADOの場合、プロバイダが対応していれば、
>LockType=adLockBatchOptimistic  でUpdateBatchメソッドを使ってバッチ更新
>が可能です(Adoデータコントロールで使用可能かは未確認)。
できました。ありがとうございます。

>もしくは、データ連結を行わずに処理したほうがいいかもと思います。
というのは、どういうことでしょうか?


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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