アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (3件)

ここにも勘違いしてる人が...



ACCESS をそんな使い方してはいけません。

ACCESS はパーソナルデータベースツールです。
いますぐSQLServerに替えましょう。
(無料版もあるようです)

http://okwave.jp/qa/q7102641.html
    • good
    • 0

>データ数は約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行が必ず実行されれば、データベースが最適化された状態を保持します。

この回答への補足

早速の回答ありがとうございました。

1つ確認させてください。
ご教授頂いた最適化の処理は、Accessのツール内の最適化処理と同じことでしょうか?
試しに両方実行してみましたが、ファイル容量は600KB程少なくなった程度でした。
先日、Accessのツール内の最適化処理を行っています。

あと、件数自体は記載間違いで2000件ではなく、20000件でした。
大変失礼しました。
同じ程度の件数のテーブルが2つあります。

よろしくお願いいたします。

補足日時:2011/11/02 17:26
    • good
    • 0

Data_File_Test.mdb


上記のファイルはデータ数が少ないと推定します。
mdbの仕様上、解放直前にデータを書き込むので仕方がないと思います。

ただ、フィールド数とフィールド長がわからないものの、2000件のデータで
17MBは大きすぎるように思います。
MDBはファイルを削除したり移動したりするごとに肥大化していきます。
たとえば、データを削除してもそのデータが実際に無くなるのではなくて、
削除フラグが付くだけですのでデータは小さくなりません。
たまに「最適化」するとデータが小さくなります。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございました。

お礼日時:2011/11/02 17:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!