WinXP32bitだと接続できるのにwin7 64bitだとcn.openのときにエラーになります。
「オブジェクトが閉じている場合は、操作は許可できません。3704」
sqlite odbcドライバの64bit版はインストールし、コマンドプロンプトからは接続できます。
原因を教えていただきたくお願いいたします。
→on errorをなくすと、cn.openで「odbc driver manager データ ソース名および指定された既定のドライバが見つかりません。」となってしまいます。
On Error GoTo Err_ADO
Dim i As Long
Dim strSQL As String
Dim cn As ADODB.Connection: Set cn = New ADODB.Connection
Dim rs(5000) As ADODB.Recordset
cn.ConnectionString = "DRIVER=SQLite3 ODBC Driver;Database=" & DB_PATH
cn.Open
For i = 1 To 48000
strSQL = "select * from aaa where gaku is null limit 1000"
Set rs(i) = New ADODB.Recordset
rs(i).Open strSQL, cn, adOpenKeyset, adLockOptimistic, adCmdText
Do Until rs(i).EOF
rs(i)!GAKU = calc(rs(i)!sotu, rs(i)!uke)
rs(i).Update
rs(i).MoveNext
Loop
rs(i).Close: Set rs(i) = Nothing
Next
Err_ADO:
If Not cn Is Nothing Then cn.Close: Set cn = Nothing
残念ながら、32bit 版の Excel VBA から 64bit 版の ODBC ドライバを使用することはできません。
32bit 版の Excel VBA が呼び出せるのは、32bit 版の ODBC ドライバだけとなっています。
<Excel(32bit) + ADO の DB 接続イメージ> [Excel](32bit) | [ADO](32bit) | [Microsoft OLE DB Provider for ODBC](32bit) | [SQLite3 ODBC Driver](32bit) | [SQLite3](32bit)
単に動作させることが目的であれば、64bit OS であっても、32bit 版の ODBC ドライバをインストールしてください。
■ SQLite ODBC Driver
http://www.ch-werner.de/sqliteodbc/
■ sqliteodbc.exe
http://www.ch-werner.de/sqliteodbc/sqliteodbc.exe
→ 「C:\Program Files (x86)\SQLite ODBC Driver」(32bit 版の ODBC ドライバがインストールされます。)
どうしても、64bit 版の ODBC ドライバを使用したいということでしたら、64bit 版の WSH(CScript / WScript)を使用することで、利用することは可能です。
<WSH(64bit) + ADO の DB 接続イメージ> [WSH](64bit) | [ADO](64bit) | [Microsoft OLE DB Provider for ODBC](64bit) | [SQLite3 ODBC Driver](64bit) | [SQLite3](64bit)
解決しました。
2013/09/06 00:35:33エラーが解決されたようで何よりです。
2013/09/06 01:04:33少しソースコードで気になった箇所があるのですが、「Dim rs(5000) 」としている箇所は、同時に複数のレコードセットを用いるのでなければ、単一のレコードセット「Dim rs」とした方がメモリを節約できそうです。
あとは、Calc() 関数の計算処理ですが、SQL の UDPATE 文に書き換えることができれば、もう少し高速化できそうな気がします。