• ベストアンサー

EXCELVBAでSQLserverからデータをひっぱってきてエクセルに表示させたい

EXCELVBAでSQLserverからデータをひっぱってきてエクセルにクエリの結果を表示させています。 クエリのコードが短い場合は問題ないのですが、 長くなると、時間切れのメッセージが出てうまくできません。 クエリ自体は長いですが、誤りはありません。 クエリが複雑すぎたり長すぎたりするとだめなのでしょうか。 ご教授ください。宜しくお願い致します。 *************エラーメッセージ*************** 実行時エラー'2147217871(80040e31)': 時間切れになりました。 ******************************************** Sub test() Const connstr = "Provider=sqloledb;" & _ "Data Source=サーバ名;Initial Catalog=DB名;UserId=ユーザ名;Password=パスワード; " Dim conn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim strSQL As String strSQL = "SELECT …ここのクエリ文が長い…" conn.Open connstr rs.Open strSQL, conn Range("A2").CopyFromRecordset rs rs.Close conn.Close End Sub

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

conn.Open connstr 'ここに conn.CommandTimeout = 120 rs.Open strSQL, conn 2分でタイムアウト conn.CommandTimeout = 0 にするとタイムアウトはなくなります。 1時間でも2時間でも、死ぬまで・・・ どうでしょうか

smorgas030
質問者

補足

回答ありがとうございます。 早速以下のように変更しましたが、 30秒ほどで同じエラーになりました。 conn.CommandTimeout = 0 これはなぜでしょうか。

その他の回答 (2)

  • tom11
  • ベストアンサー率53% (134/251)
回答No.3

ちょっと、気になったのですが、 そもそも、クエリによって、読み込まれた。 データは約65000件以下ですよね。 たまに、膨大なデータを読み込もうとして、 エラーしている人が、いるようですが。老婆心ですが、 あと、sqlにlimitを、つけて、読み込みデータ数を 少なく制限して、実行してみるとか、 いろいろ、確認することが、あると思います。

smorgas030
質問者

お礼

回答ありがとうございます。 EXCELをつかわずにSQLserver側で実行すると問題ないので、 クエリには問題がないようです。時間はかかりますが。 また、データは100件を指定しているので、 データ量が多すぎということはないと思います。 宜しくお願い致します。

  • megwitch
  • ベストアンサー率13% (6/45)
回答No.1

接続時のタイムアウトの時間を延ばしてみてください。 以下のURLが結構色々やっているようです。

参考URL:
http://www.accessclub.jp/bbs6/0005/das1089.html
smorgas030
質問者

お礼

回答ありがとうございます。 参考にさせていただきます。

関連するQ&A