|
■No20384 (鶏唐揚 さん) に返信 > 調べたところReadキャッシュが原因のような気がしてきました。 もしそうならば、Page Timeout 設定時間の以上のウェイトをかけてから読み込めば、 キャッシュの問題はクリアされるかと思います。既定値では長すぎるので、 キャッシュのタイムアウト時間は短めに設定する必要があるでしょうけれども。
> JROを参照しないと 参照設定に加えずとも、レイトバインドで呼び出せますよ。
CreateObject("JRO.JetEngine").RefreshCache(conn)
ただ、その引数には(接続文字列では無く)ADODB.Connection が要求されますし、 JRO が ADO.NET に対しても有効であるという資料は見たことが無いので、 今回の目的で利用できるかどうかは未知数ですけれども。
> 接続はSystem.Data.OleDBを使用しています ADO.NET で制御できるのは、プロバイダ固有の接続パラメータぐらいですね。
ただ、最近のバージョンの Jet OLE DB プロバイダだと、なぜか一部のプロパティ ("Jet OLEDB:Page Timeout"、"Jet OLEDB:Flush Transaction Timeout" など)が ADO / ADO.NET に関わらず指定できなくなっている場合があるため、細かいパラメータは、 先述したレジストリ指定の方が良いかも知れません。
Dim cb As New OleDb.OleDbConnectionStringBuilder() cb.Provider = "Microsoft.JET.OLEDB.4.0" cb.DataSource = "c:\db1.mdb" cb.Add("Jet OLEDB:Registry Path", "Software\MyCompany\MyApp\1.0")
上記のようにすると、キャッシュのフラッシュ間隔やバッファサイズなどを HKEY_LOCAL_MACHINE\SOFTWARE\MyCompany\MyApp\1.0 から読み取られるようになります。
> 重要なデータ取得時にDBをCloseしてOpenする方法を考えています その方法は DAO では有効ですが、OLE DB の場合はコネクション プーリングの 機構があるため、必ずしもフラッシュされるとは限らなかったりします。 ADO.NET が接続プールを有効にしているのかどうかは未検証ですが、もし有効で ある場合には、接続文字列の一部を変更してから(大文字小文字の違いでも良い) 再 Open した方が良いかも知れません。
|