ODBCリンクテーブルを1回目も高速にするには?

解決


NetRunner  2006-08-21 21:04:39  No: 96363

ODBCのリンクテーブルを使い、
mdbからoracleやSQLserverのデータを取得していますが、
以下のサンプルのように、mdbへリンクテーブルのクエリー
を作成した後、PCを再起動し、その直後に、
作成したクエリーを実行すると、結果取得にすごく時間が
掛かってしまいます。

これは、ODBC固有の問題と思ったのですが、なぜ発生するのでしょうか?

〜〜〜〜〜〜〜

【サンプル】
リンクテーブル・クエリ作成部は1回しか実行しない。
その後、PC再起動して、クエリ実行部を実行すると
レスポンスが数百倍の単位で遅くなる。

---===---===---===---===---===---===---===---
  リンクテーブル・クエリ作成部
---===---===---===---===---===---===---===---
    Dim oTBLDEF       As DAO.TableDef     'mdb内のテーブルオブジェクト
    Dim oQRYDEF       As DAO.QueryDef     'mdb内のクエリーオブジェクト
    Dim strSQL        As String           'SQL定義

    Dim strConn             As String           '接続文字列

    Dim oDatabase     As Database     'データベース
    Dim strMdbFile    As String   'MDBファイル名

    '---初期化
    strConn = "ODBC;" & _
            "UID=hoge;" & _
            "PWD=hoge;" & _
            "DSN=hoge;"

    '----- データベースをオープンする -----
    strMdbFile = "C:\HOGEHOGE.mdb"
    Set oDatabase = DBEngine.Workspaces(0).OpenDatabase(strMdbFile, True)

    '=============================================
    ' DAO を使用して ODBC リンクテーブルを作成
    '=============================================
    ' テーブルの定義
    Set oTBLDEF = oDatabase.CreateTableDef( _
        "HOGEHOGE_LNKTBLNM", dbAttachSavePWD, _
        "HOGEHOGE_TBL", _
        strConn)
    oDatabase.TableDefs.Append oTBLDEF

    '=============================================
    ' SQL文字列の指定
    '=============================================
    strSQL = "SELECT COUNT(HOGE) FROM HOGEHOGE_LNKTBLNM " & _
       "WHERE HOGE_COUNT <= [param_hogeCnt]"

    '=============================================
    ' リンクテーブル関係のクエリーを作成
    '=============================================
    oDatabase.CreateQueryDef("HOGEHOGE_QNM", strSQL)

    '----- データベースをクローズする -----
    oDatabase.Close
    Set oDatabase = Nothing

---===---===---===---===---===---===---===---
  クエリ実行部
---===---===---===---===---===---===---===---
    Dim oDatabase     As Database     'データベース
    Dim strMdbFile    As String   'MDBファイル名
    Dim rs            As Recordset    'レコードセット
    Dim oqdef         As DAO.QueryDef '

    Dim intParamHCnt  as integer

    '----- データベースをオープンする -----
    strMdbFile = "C:\HOGEHOGE.mdb"
    Set oDatabase = DBEngine.Workspaces(0).OpenDatabase(strMdbFile, True)

    '----- hogeクエリー 指定 -----
    Set oqdef = oDatabase.QueryDefs("HOGEHOGE_QNM")

    '--- hogeCntパラメタ値設定
    intParamHCnt = 100
    oqdef.Parameters("param_hogeCnt").Value = intParamHCnt

    '--- レコードセットを取得
    '検索クエリーを使用
    Set rs = oqdef.OpenRecordset()

    '----- データベースをクローズする -----
    oDatabase.Close
    Set oDatabase = Nothing


Netrunner  2006-08-29 01:20:05  No: 96364

ネットワーク環境に依存するようでした。
今回は取り下げます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加