在多用戶應用程序設計中,最主要的問題是控制數據的鎖定,前面幾節我們已進行了討論。但是,應當指出,鎖定並不是多用戶應用程序設計中唯一的問題,在為多用戶訪問設計一個應用程序時,還應當注意到其它一些方面,下面將討論這些問題。
問題一數據訪問對象集合的刷新
在多用戶環境中,當用戶添加新表、查詢數據庫或刪除現有對象時,都可能對集合進行修改。在這種情況下,DAO.不能自動跟蹤集合的變更。
下面的過程可用來顯示當前數據庫中的所有TableDef對象:
SUbShowAllTables(dbsAsDatabase)
DimtdfrempAsTableDef
ForEachtdfremPIndbs.TableDefs
Debug.Pnnttdfremp.Name
Nexttdfremp
EndSub
為了調用上面的過程,可以在窗體上畫一個命令按鈕,然後編寫下面的事件過程:
PrivateSubCommandl_Click()
DimMvdbsAsDatabase
SetMydbs=OpenDatabase("czvb50iblio.mdb")
ShowAllTablesMvdbs
EndSub
運行程序,單擊命令按鈕,將在立即窗口中顯示數據庫biblio.mdb中的所有TableDef對象。
在執行上面的過程時,程序將記下TableDefs集合時快照,它遍歷每個TableDef對象,並顯示出它的名字。假定需要兩次運行上面的過程,第一次運行時,顯示了10個表的名字。但在再次運行之前,網絡上的另一個用戶打開了這個數據庫,並在數據庫中添加了一個新的表。如果再次運行該過程,則將仍然顯示10個表的名字,因為DAO不能自動地更新其它用戶對集合所作的變更。為此,可以用Refresh方法強制DAO用最新的變更來更新集合。如果在前面的過程中添加Refresh方法,則可使它返回的總是TableDef對象的最新列表修改後的過程如下:
SUbBetterShowAllTables(dbsAsDatabase)
DimtdfrempAsTableDef
dbs.TableDefs.Refresh
ForEachtdfremplndbs.TableDefs
Debug.PrinttdfremP.Name
Nexttdfremp
EndSub
注意,只有在需要時才使用Refresh方法。如果集合包含大量的對象,則刷新集合可能需要較長的時間。->