VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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


よろしくお願いいたします。
コードが長くてごめんなさい(抜き出しの方がよかったかな?)。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -