- ベストアンサー
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
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
conn.Open connstr 'ここに conn.CommandTimeout = 120 rs.Open strSQL, conn 2分でタイムアウト conn.CommandTimeout = 0 にするとタイムアウトはなくなります。 1時間でも2時間でも、死ぬまで・・・ どうでしょうか
その他の回答 (2)
- tom11
- ベストアンサー率53% (134/251)
ちょっと、気になったのですが、 そもそも、クエリによって、読み込まれた。 データは約65000件以下ですよね。 たまに、膨大なデータを読み込もうとして、 エラーしている人が、いるようですが。老婆心ですが、 あと、sqlにlimitを、つけて、読み込みデータ数を 少なく制限して、実行してみるとか、 いろいろ、確認することが、あると思います。
お礼
回答ありがとうございます。 EXCELをつかわずにSQLserver側で実行すると問題ないので、 クエリには問題がないようです。時間はかかりますが。 また、データは100件を指定しているので、 データ量が多すぎということはないと思います。 宜しくお願い致します。
- megwitch
- ベストアンサー率13% (6/45)
接続時のタイムアウトの時間を延ばしてみてください。 以下のURLが結構色々やっているようです。
お礼
回答ありがとうございます。 参考にさせていただきます。
補足
回答ありがとうございます。 早速以下のように変更しましたが、 30秒ほどで同じエラーになりました。 conn.CommandTimeout = 0 これはなぜでしょうか。