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
ネットワーク環境に依存するようでした。
今回は取り下げます。
ツイート | ![]() |