投稿日 | : 2007/07/06(Fri) 06:52 |
投稿者 | : やまちゃん |
Eメール | : |
URL | : |
タイトル | : OSのキャッシュについて |
お世話になります。
非常に素人です。
環境はVB6(SP3)です。
MDBにADO接続して読み書きするときに下記のようなサブルーチンを使用していますが、
Dim Cmd …から数えて、上から7行目の Cnn.Properties(……)=1 のところで「1」は
「OSのキャッシュをバイパスする」と認識しておりますが、この場合、
@何か特別な方法でOSのキャッシュをクリアする方法があるのでしょうか?
ACnn.Close、Set Cnn = NothingでOSのキャッシュもクリアされるのでしょうか?
少々長くなりますがコードを書きます。
(Microsoft ActiveX Data Objects 2.8 Libraryを参照)
(Microsoft ADO Ext.2.8 for DDL and Securityを参照)
(Microsoft Jet and Replication Objects 2.6 Libraryを参照)
※Call sSQL_EXECUTE("INSERT INTO 〜",myConnection)のような感じで使用してます。
----------------------------------------------------------------------------
コードの部分をもう一度(どうして修正できないんだろう?)
----------------------------------------------------------------------------
Option Explicit
Public Const MAX_RETRIES = 10
Public Jet_Engine As New JRO.JetEngine
----------------------------------------------------------------------------
Public Sub sSQL_EXECUTE(ByRef mySQL As String, ByRef Cnn As ADODB.Connection)
Dim Cmd As ADODB.Command
Dim Cat As New ADOX.Catalog
Dim ErrorCount As Long
Dim InTransaction As Boolean
Dim OldCommitMode As Long
OldCommitMode = Cnn.Properties("Jet OLEDB:Transaction Commit Mode")
Cnn.Properties("Jet OLEDB:Transaction Commit Mode") = 1 ←ここ
Set Cat = New ADOX.Catalog
Cat.ActiveConnection = Cnn
Set Cmd = New ADODB.Command
Cmd.ActiveConnection = Cnn
Cmd.CommandText = mySQL
On Error GoTo SQL_EXE_Error
Cnn.BeginTrans
InTransaction = True
Jet_Engine.RefreshCache Cnn
Cmd.Execute '実行
InTransaction = False
Cnn.CommitTrans
'--- 終了 ---
Set Cmd = Nothing
Set Cat = Nothing
Cnn.Properties("Jet OLEDB:Transaction Commit Mode") = OldCommitMode
Exit Sub
SQL_EXE_Abort:
On Error Resume Next
If InTransaction Then
Set Cmd = Nothing
Set Cat = Nothing
End If
Err.Clear
Cnn.Properties("Jet OLEDB:Transaction Commit Mode") = OldCommitMode
Exit Sub
SQL_EXE_Error:
ErrorCount = ErrorCount + 1
If ErrorCount < MAX_RETRIES And InTransaction Then
Cnn.RollbackTrans
Else
Resume SQL_EXE_Abort
End If
End Sub
よろしくお願いいたします。
コードが長くてごめんなさい(抜き出しの方がよかったかな?)。