2017-06-06 25 views
1

セットアップを要約すると、Accessデータベース(accdb)バックエンドでExcel/VBAフロントエンドを使用しています。フロントエンドには、VBAを使用してデータベースとの間で読み書きを行う多数のGUIがあります。アプリケーションが起動すると、ACE DAOを使用してデータベースを開き、この '接続'はユーザーがアプリケーションを終了するまで開いたままになります。Excel to Access(ACE DAO) - 書き込みキャッシュを手動でフラッシュする方法

私が抱えている問題は、レコードの更新がすぐに他のユーザーに表示されないことです。これは、レコードの更新や変更がすぐに書き込まれるのではなくキャッシュされているためだと思います。このキャッシュをクリアして変更を適用する唯一の方法は、接続を閉じることです。

頻繁に行う必要があるため、接続を閉じることは実際には選択肢ではありません(私はいつも再接続に時間がかかります)。私は現在使用しているストリップダウンコードは次のとおりです。

は、データベースを開く:

Set oDB = DBEngine.OpenDatabase(TARGET_DB, False, False, "MS Access;PWD=" & TARGET_DB_PASS) 

私はレコードセットを取得するために、Accessデータベース内のクエリ定義を使用します。私は右のDAO.QueryDefを持っていたら、私はレコードセットを取得するには、以下を呼び出します。

Set oRS = oQryDef.OpenRecordset 

私はその後、私は変更したいフィールドを変更.Updateを呼び出し、レコードセットを閉じる:

With oRS 
     .Edit 
     .Fields("Record_Locked") = True 
     .Fields("Locked_By") = UCase(Environ("username")) 
     .Fields("Locked_Date") = Now 
     .Update 
     .Close 
End With 

この時点で、oDB.Closeが呼び出されるまで、変更はデータベースに対して行われません。

は、明示的にdbSeeChanges

Set oRS = oQryDef.OpenRecordset(dbOpenDynaset, dbSeeChanges) 

は、トランザクション内のフィールドへの変更を置くとdbForceOSFlush

DBEngine.BeginTrans 
With oRS 
     .Edit 
     .Fields("Record_Locked") = True 
     .Fields("Locked_By") = UCase(Environ("username")) 
     .Fields("Locked_Date") = Now 
     .Update 
     .Close 
End With 
DBEngine.CommitTrans dbForceOSFlush 
とCommitTransをを使用してdbDynatsetとしてレコードセットを開く:私がこれまで試してみました何

+0

Recordsetを開くときに、Recordsetタイプまたはロックタイプを指定していません。明示的に 'dbOpenDynaset'型をリクエストしようとしましたか? – ThunderFrame

+0

@ThunderFrame、それは 'dbOpenDynaset'(私は2と等しいoRS.Typeをチェックしました)にデフォルト設定されているようです。 – Boerdom

+0

AccessデータベースまたはExcelフロントエンドの変更が表示されませんか。これは、GUIの作成時にデータベースを読み取るだけでなく、スナップショットタイプのRSを作成する場合でも、フロントエンドで問題になる可能性があります。 –

答えて

0

レコードセットを変更してみてくださいタイプおよびオプション enums。

Set oRS = oQryDef.OpenRecordset(dbOpenDynaset, dbSeeChanges) 

'dbOpenDynaset = 2 
'dbSeeChanges = 512 
+0

残念ながら運がありません。フロントエンドがレコードを更新すると、接続自体が閉じられるまで(まだ変更が行われても別のマシンでデータベースを開くことでテストしていますが、接続はまだ開いています)、変更は一見データベースに適用されません。データベースが変更された日付は、接続が閉じられるまで変更されません。 – Boerdom

関連する問題