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
VBAのADOについて質問です。
SQL文の最後には「;」を付けなくちゃいけないものだと思っているのですが
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Private Sub test_Click()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Set CN = CurrentProject.Connection
Set RS = New ADODB.Recordset
SQL = "SELECT * FROM Tテーブル"
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
でも問題なくコードが動きました。
SQL文の最後に「;」はいらないのでしょうか?
ちなみに
SQL = "SELECT * FROM Tテーブル;"
でもエラーになりませんでした。
Excel VBAについて確認させてください。
Excel VBAで下記のようなプログラムを作成しました。
簡単に言えば元のファイルを開いて、元のファイルにある処理をして
ファイル名を変えて保存するといったマクロです。
ですが、下記のプログラムはInputBox 関数で
ユーザにわざわざフルパス(C:\・・・)で入力させる必要があります。
(変数A1の部分です。)
この部分をこのマクロの存在するディレクトリの場所を何らかの関数?で
あらかじめ検索してその場所を引数に渡して指定しておき、
ユーザにはファイル名のみ入力させる方法に改良したいのですが
その方法をご教授いただけますでしょうか。
(チェックするファイルはこのマクロと同じディレクトリにあることになっている設定です。)
そして保存するときもフルパス(C:\・・・)でわざわざ入力する必要があります。
(下記のプログラムでは変数A2)
そこでこのマクロの存在するディレクトリの場所を何らかの関数?で
あらかじめ検索してその場所を引数に渡して指定しておき、
そこに自動的に名前を変えて保存する方法に改良したいのですが
その方法をご教授いただけますでしょうか。
(たとえば111.txtを処理した場合、111処理済.txtとして自動的に保存。)
以下、プログラム本文です。
-------------------------------------
Sub charactercheck()
Dim a As String
Dim y As Long
Dim A1 As String
Dim A2 As String
A1 = InputBox("チェックしたいファイル名をパス名から入力してください。")
A2 = InputBox("チェック結果を保存するファイル名をパス名から入力してください。")
With CreateObject("Scripting.FileSystemObject").GetFile(A1).OpenAsTextStream
a = .ReadAll
For y = 1 To Cells(Rows.Count, 1).End(xlUp).Row
a = Replace(a, Cells(i, 1), "")
Next
.Close
End With
With CreateObject("Scripting.FileSystemObject").OpenTextfile(A2, 2, True)
.Write a
.Close
End With
End Sub