- 締切済み
VB6.0でDB接続する際に切断時の処理が遅い
VB6.0のADOで社内LAN上のサーバー(共有PC)内のデータベースファイル(Accesss2003のmdbファイル)へ接続、データ登録を行なっていますが、接続を閉じる際にcn.Close以降の処理で30秒近い時間がかかっています。 昼休み等で接続するユーザーがいない場合も処理時間がかかっています。 テストの為、同じmdbファイルをコピーし、別名のファイルに接続するように変更した場合は 1秒程度で終了します。(下記ソースの(1)と(2)を入れ替え) データ数は約2000件、ファイル容量17MB 接続するユーザーは最多で10名程度、各クライアントのPCで下記コードのEXEファイルを実行して 接続、データ登録しています。 原因、対策案等をご教授ください。 ---------------------------------------- Public Sub DB_ACCESS() Dim cn As ADODB.Connection Dim RS As ADODB.Recordset Set cn = New ADODB.Connection Set RS = New ADODB.Recordset Debug.Print "TEST-1: ", Time Access_DB_Source_File = "\\PC-SERVER\DB\Data_File.mdb" ---------- (1) 'Access_DB_Source_File = "\\PC-SERVER\DB\Data_File_Test.mdb" ---------- (2) cn.ConnectionString = _ "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source = " & Access_DB_Source_File & _ ";Jet OLEDB:Database Password=otakast2061;" cn.Open 'この部分にデータ参照、登録等を行う処理が入る。 ' RS.Close Debug.Print "TEST-2: ", Time cn.Close Set RS = Nothing Set cn = Nothing Debug.Print "TEST-3: ", Time End Sub
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- yorozu_ya
- ベストアンサー率54% (76/140)
ここにも勘違いしてる人が... ACCESS をそんな使い方してはいけません。 ACCESS はパーソナルデータベースツールです。 いますぐSQLServerに替えましょう。 (無料版もあるようです) http://okwave.jp/qa/q7102641.html
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
>データ数は約2000件、ファイル容量17MB mdbを最適化して下さい。 たった2000件で17MBって事は、大量のゴミがmdbの中にあります。 クローズ時には、このゴミ部分もデータ走査の対象になり、クローズに時間を要します。 一連の処理が終わったら、 DBEngine.CompactDatabase "\\PC-SERVER\DB\Data_File.mdb", "\\PC-SERVER\DB\Data_File_New.mdb" Kill "\\PC-SERVER\DB\Data_File.mdb" Name "\\PC-SERVER\DB\Data_File_New.mdb" As "\\PC-SERVER\DB\Data_File.mdb" の3行を実行しましょう(但し、他のユーザーがアクセスしていない場合のみ実行すること) 1行目で、\\PC-SERVER\DB\Data_File.mdbを最適化して\\PC-SERVER\DB\Data_File_New.mdbに出力します。 2行目で、最適化前の\\PC-SERVER\DB\Data_File.mdbを削除します。 3行目で、最適化後の\\PC-SERVER\DB\Data_File_New.mdbを\\PC-SERVER\DB\Data_File.mdbにリネームします。 この3行が必ず実行されれば、データベースが最適化された状態を保持します。
- Saturn5
- ベストアンサー率45% (2270/4952)
Data_File_Test.mdb 上記のファイルはデータ数が少ないと推定します。 mdbの仕様上、解放直前にデータを書き込むので仕方がないと思います。 ただ、フィールド数とフィールド長がわからないものの、2000件のデータで 17MBは大きすぎるように思います。 MDBはファイルを削除したり移動したりするごとに肥大化していきます。 たとえば、データを削除してもそのデータが実際に無くなるのではなくて、 削除フラグが付くだけですのでデータは小さくなりません。 たまに「最適化」するとデータが小さくなります。
お礼
早速の回答ありがとうございました。
補足
早速の回答ありがとうございました。 1つ確認させてください。 ご教授頂いた最適化の処理は、Accessのツール内の最適化処理と同じことでしょうか? 試しに両方実行してみましたが、ファイル容量は600KB程少なくなった程度でした。 先日、Accessのツール内の最適化処理を行っています。 あと、件数自体は記載間違いで2000件ではなく、20000件でした。 大変失礼しました。 同じ程度の件数のテーブルが2つあります。 よろしくお願いいたします。