20000件の顧客テーブルを使用しました。
パラメータクエリの時間計測結果です。
SQLでの時間計測結果です。
4回計測した結果です。クエリの方が若干早そうですが、それほど差はありませんでした。
クエリ 、 SQL
0.578 、 0.561
0.546 、 0.577
0.515 、 0.609
0.530 、 0.608
Option Explicit
'Windowsが起動してからの経過時間 API
Private Declare Function GetTickCount Lib "kernel32" () As Long
'クエリで抽出
Private Sub ExAccdbQueryImport()
Dim db As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cmd As ADODB.Command
Dim st As Long
Dim et As Long
'開始時間を取得
st = GetTickCount
'顧客管理のACCDBファイルに接続します
Set db = New ADODB.Connection
db.Provider = "Microsoft.Ace.OLEDB.12.0"
db.Open "C:\MyHP\excel2007\Tips\顧客管理.accdb"
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = db
cmd.CommandText = "Q_顧客抽出"
'レコードセットを開きます
Set rs = New ADODB.Recordset
'氏名に田、住所に文京がつくレコードを抽出
Set rs = cmd.Execute(Parameters:=Array("田", "文京"))
If rs.EOF Then
MsgBox "抽出した結果、顧客のレコードが見つかりません。"
Else
'レコードをシートへ貼り付ける
Range("B7").CopyFromRecordset rs
End If
rs.Close
Set rs = Nothing
Set db = Nothing
DoEvents
'終了時間を取得
et = GetTickCount
MsgBox "パラメータクエリ:" & (et - st) / 1000 & " 秒"
End Sub
'SQLで抽出
Private Sub ExAccdbSqlImport()
Dim db As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cmd As ADODB.Command
Dim SQL As String
Dim st As Long
Dim et As Long
'開始時間を取得
st = GetTickCount
'氏名に田、住所に文京が含まれる
SQL = "SELECT * FROM T_顧客マスター20000件 WHERE 顧客名 LIKE '%田%' AND 住所 LIKE '%文京%'"
'顧客管理のACCDBファイルに接続します
Set db = New ADODB.Connection
db.Provider = "Microsoft.Ace.OLEDB.12.0"
db.Open "C:\MyHP\excel2007\Tips\顧客管理.accdb"
'レコードセットを開きます
Set rs = New ADODB.Recordset
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = db
'SQLをセット
cmd.CommandText = SQL
Set rs = cmd.Execute
If rs.EOF Then
MsgBox "抽出した結果、顧客のレコードが見つかりません。"
Else
'レコードをシートへ貼り付ける
Range("B7").CopyFromRecordset rs
End If
rs.Close
Set rs = Nothing
Set db = Nothing
DoEvents
'終了時間を取得
et = GetTickCount
MsgBox "SQL:" & (et - st) / 1000 & " 秒"
End Sub
Private Sub CommandButton1_Click()
ExAccdbQueryImport
ExAccdbSqlImport
End Sub
■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します