2016-08-10 21 views
0

私はPostgreSQLデータベースにビューを持っています。 pgAdminでビューを実行するのは非常に高速です(10,000レコード)。しかし、 "Select * from myView;"を実行するとVBAから非常に遅いです。 ADOとODBCを使用してデータベースに接続します。誰かが私に事をスピードアップする方法のヒントを与えることができますか?Excel VBAからPostgreSQLデータベースへの接続が遅い

小さな例:

Sub TEST() 

Dim CN As New ADODB.Connection 
Dim RS As New ADODB.Recordset 

Dim Data As Variant 
Dim SQL As String 
Dim ConStr As String 

ConStr = "Server=11.22.33.44;" & _ 
     "DSN=PostgreSQL35W 32bit;" & _ 
     "UID=xxx;" & _ 
     "PWD=xxx;" & _ 
     "Database=xxx;" _ & 
     "Port=5432;" & _ 
     "CommandTimeout=12" 

SQL = "Select * From myView;" 

Debug.Print Now() 

CN.ConnectionString = ConStr 
CN.Open 
Debug.Print Now() 

RS.ActiveConnection = CN 
RS.Source = SQL 
RS.CursorType = adOpenStatic 
RS.LockType = adLockReadOnly 
Debug.Print Now() 

RS.Open 
Debug.Print Now() 

Data = RS.GetRows 
Debug.Print Now() 

RS.Close 
CN.Close 
Set RS = Nothing 
Set CN = Nothing 

End Sub 

これは出力が得られる:

10/08/2016 16:14:26 
10/08/2016 16:14:26 
10/08/2016 16:14:26 
10/08/2016 16:14:38 
10/08/2016 16:18:50 

"RS.Openは" 0時00分12秒を要し、そして "データ= RS.GetRows" 00れます。 04:12。 pgAdminでは、10,000レコードすべてを表示するのに1秒未満かかりません。

+0

'adOpenForwardOnly'と' adOpenStatic'を使用すると改善が見られますか? –

+0

また、DSNを使用する場合は、接続を確立する前にレジストリに移動しなければならず、処理が遅くなります。 [役立つヒントについてはこれを確認してください] –

+0

ASynch処理も試してみてください(http://www.techrepublic.com/blog/10-things/-10-ado-best-practices/)。参照:https://support.microsoft.com/en-ca/kb/190988 –

答えて

1

OLE DBを使用することが分かりました。そしてそれは速いです!
PgOleDb:https://www.connectionstrings.com/pgoledb/info-and-download
2つのDLLをC:\ Windows \ SysWOW64にコピーしました。
Ran "Regsvr32 PGOLEDB.DLL"。
接続文字列:https://www.connectionstrings.com/pgoledb

Provider=PostgreSQL OLE DB Provider;Data Source=myServerAddress; 
location=myDataBase;User ID=myUsername;password=myPassword; 

コマンド "タイムアウト= 1000;"機能しません。

関連する問題