[[20250418083553]] 『ADODB.Connection.Open が遅い』(tkit) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『ADODB.Connection.Open が遅い』(tkit)

 ADODBで、Excelのテーブルに対しSQLでデータを取得しているのですが、
 Openで12秒程掛かります。

 確認した条件は、以下パターンです。
 Win11 Excel2019
 Win10 Excel2019及び2016

 2025年4月のWindows Updateあたりから遅くなったように
 思います。

 同様の方は、いらっしゃいますか?
 また、他のExcelバージョンで検証いただけましたら助かります。

 当方、以下サンプルコードで再現しています。

 Sub sample()
     'サンプル作成
     Dim ws As Worksheet
     Set ws = ThisWorkbook.Worksheets.Add()
     ws.Name = "tempSheet"
     Dim temp(10, 2)
     temp(0, 0) = "col1": temp(0, 1) = "col2": temp(0, 2) = "col3"
     Dim i&
     For i = 1 To 10
         temp(i, 0) = i
         temp(i, 1) = i * 2
         temp(i, 2) = i * 3
     Next
     Dim rng As Range
     Set rng = ws.Range("A1:C11")
     rng.Value = temp

     '接続&取得
     Dim t#: t = Timer
     Dim conn As ADODB.Connection
     Set conn = New ADODB.Connection
     With conn
         .Provider = "Microsoft.ACE.OLEDB.12.0"
         .ConnectionString = "Data Source = " & ThisWorkbook.FullName & ";"
         .Properties("Extended Properties") = "Excel 12.0 Xml;HDR=YES"
         Debug.Print "[Before]"; Timer - t
         .Open
         Debug.Print "[Open]"; Timer - t
     End With
     Debug.Print Timer - t
     Dim rs As ADODB.Recordset
     Set rs = New ADODB.Recordset
     rs.Open "SELECT * FROM [tempSheet$A1:C11]", conn, adOpenStatic
     Debug.Print "[RecordSet]"; Timer - t

     '後始末
     If Not rs Is Nothing Then
         If rs.State <> 0 Then rs.Close
         Set rs = Nothing
     End If
     If Not conn Is Nothing Then
         If conn.State <> 0 Then conn.Close
         Set conn = Nothing
     End If
     ws.Delete
 End Sub

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 ▼Excel2016(32bit)/win10(x64)での結果

 (初回)
 [Before] 0.96875 
 [Open] 1.65625 
  1.65625 
 [RecordSet] 1.84375 

 (2回目)
 [Before] 0 
 [Open] 0.015625 
  0.015625 
 [RecordSet] 0.015625 

 大丈夫そうですね。

 ▼Excel2010/win7(x86)での結果

 [Before] 0.021484375 
 [Open] 0.03125 
  0.03125 
 [RecordSet] 0.041015625 

(白茶) 2025/04/18(金) 09:25:16


 検証ありがとうございます。

 一応、セキュリティソフトはOFFにして検証はしているのですが、
 同じネットワーク内のPCは全て同症状なんですよね・・・

 Win11、Win10は64bitで、Excelは2019,2016で32bitです。

(tkit) 2025/04/18(金) 09:37:43


 Win10(64bit)、Excel2010(32bit)の環境で検証したら、
 白茶さんの検証時間と同等でした。

 もうちょっと試行錯誤してみます。
(tkit) 2025/04/18(金) 09:47:42

excel 2016 office personal premium 32bit
os win10 home 64bit
遅延バインディング
カーソル種類 3
にしても同じでした ^^; 原因は解りませんが ご報告まで。。。m(__)m

[Before] 0.078125
[Open] 12.1953125

 12.1953125 
[RecordSet] 12.2265625 
(隠居Z) 2025/04/18(金) 09:59:14

 Excel2021 32 ビット  (バージョン 2503 ビルド 16.0.18623.20178) 
 同様にOpenで12秒程掛かります。

 [Before] 0 
 [Open] 12.11328125 
 12.11328125 
 [RecordSet] 12.12890625 

(まる2021) 2025/04/18(金) 10:26:51


 ブックを開かずに別ブックから実行すると遅延はなくなりました。

 Sub sample()
    Const wb$ = "C:\Users\xxxx\Desktop\Book100.xlsm" 'データベースのある対象ブック
    '接続&取得
    Dim t#: t = Timer
    Dim conn As ADODB.Connection
    Set conn = New ADODB.Connection
    With conn
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .ConnectionString = "Data Source = " & wb & ";"
        .Properties("Extended Properties") = "Excel 12.0;HDR=YES"
        Debug.Print "[Before]"; Timer - t
        .Open
        Debug.Print "[Open]"; Timer - t
    End With
    Debug.Print Timer - t
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
    rs.Open "SELECT * FROM [tempSheet$A1:C11]", conn, adOpenStatic
    Debug.Print "[RecordSet]"; Timer - t
    Do Until rs.EOF
        Debug.Print rs.Fields("col1").Value, rs.Fields("col2").Value, rs.Fields("col3").Value
        rs.MoveNext
    Loop

    '後始末
    If Not rs Is Nothing Then
        If rs.State <> 0 Then rs.Close
        Set rs = Nothing
    End If
    If Not conn Is Nothing Then
        If conn.State <> 0 Then conn.Close
        Set conn = Nothing
    End If
 End Sub

 <出力>
 [Before] 0.015625 
 [Open] 0.046875 
 0.046875 
 [RecordSet] 0.0625 
 1             2             3 
 2             4             6 
 3             6             9 
 4             8             12 
 5             10            15 
 6             12            18 
 7             14            21 
 8             16            24 
 9             18            27 
 10            20            30 
(まる2021) 2025/04/18(金) 10:44:34

 隠居Zさん、まる2021さん 検証ありがとうございます。
 まる2021さんの別ブックでの遅延検証ありがとうございます。

 以前も2020年頃にUpdateで不具合があったみたいなので、
 自身だけなのか、そうではないのか、いろいろ探した結果、
 何もヒットせず、質問した経緯となります。

 同じ症状で嬉しいやら、でも悲しいやら、です。

 別ブックから案でちょっと試してみます。

(tkit) 2025/04/18(金) 11:05:32


 既に運用済みのブックに関しては、手直しせず、
 様子見としました。

 この事象で悩んでいる方の一助になれば幸いです。
(tkit) 2025/04/18(金) 15:11:42

https://answers.microsoft.com/ja-jp/msoffice/forum/all/excel-odbc/50a57aeb-ddc6-445f-a5db-4fce90f48b60

これが影響していないでしょうか。
当方でも今まで正常だったSQLでの集計に遅延が発生するようになりましたが、Excelを以前のバージョンに戻したら改善されました。
(知らんけど) 2025/04/19(土) 09:31:14


 知らんけど さん、情報ありがとうございます。

 こちらも、Excelを以前のバージョンに戻したら改善されました。
 Microsoftの修正待ちですね。

 改めて、本事象で検証いただいた方々にお礼申し上げます。
(tkit) 2025/04/21(月) 08:43:36

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.