それで、ある程度複雑なSQLなのですが、TkSQLiteというツールから実行すると
1秒以内にレスポンスがかえってきます。
ところが、肝心のExcelから取得した場合は、おそろしく遅いです。(数分です)
以下VBソースですが、ソースがまずいですか。
TkSQLiteとExcelで実行速度がなぜ変わってしまうのでしょうか。。
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim dbCol As ADODB.Field
Set cn = New ADODB.Connection
cn.ConnectionString = "DRIVER=SQLite3 ODBC Driver;Database=" & DB_PATH
cn.Open
Set rs = cn.Execute(prmSql)
それともやはり、なげるSQLが長いからでしょうか。
vba内に、SQL記述した際、行続文字が多すぎるというメッセージがでたので、エクセルシートにSQL貼り付けて、そこから取得するようにしましたが
ADO は CursorLocation / CursorType / LockType の3つのプロパティの組み合わせによって挙動が変わってきます。
データベースエンジンやドライバによって、サポートされていないオプションがあったりする為、推奨する設定を提示することができないのですが、組み合わせを変えて試してみてはいかがでしょうか。
以下、参考情報です。
<参考情報>
■ Recordset オブジェクトの基本
http://msdn.microsoft.com/ja-jp/library/cc376797.aspx
■ ADO カーソルを極める
http://www.shoeisha.com/mag/windev/pdf/870507/windev0507_156_SQLServer.pdf
■ ADO 時代の非接続型データアクセス - とあるコンサルタントのつぶやき - Site Home - MSDN Blogs
http://blogs.msdn.com/b/nakama/archive/2008/10/16/ado.aspx
また、「行継続文字( _) を使いすぎています。」というエラーが出る場合は、
以下のようにコードを修正してみてください。
' ステートメントを「_」により連結したケース(連結数に制限がある) Dim strSQL strSQL = "SELECT ..." & _ "..." & _ "..." & _ "..." & _ "..." & _ "..."
' ステートメントを複数行に分割したケース(連結数に制限が無い) Dim strSQL strSQL = "SELECT ..." strSQL = strSQL & "..." strSQL = strSQL & "..." strSQL = strSQL & "..." strSQL = strSQL & "..." strSQL = strSQL & "..."
SQLite ODBC Driverが高速化されていないためです。
場合によってはSQLite to Excelを使った方が早いかもしれません。
SQLite to Excel
http://www.vector.co.jp/soft/winnt/business/se481602.html