top
Loading...
多客戶環境下VB數據庫編程之(8)

多用戶應用程序中應注意的其它問題(1)

在多用戶應用程序設計中,最主要的問題是控制數據的鎖定,前面幾節我們已進行了討論。但是,應當指出,鎖定并不是多用戶應用程序設計中唯一的問題,在為多用戶訪問設計一個應用程序時,還應當注意到其它一些方面,下面將討論這些問題。

問題一 數據訪問對象集合的刷新

在多用戶環境中,當用戶添加新表、查詢數據庫或刪除現有對象時,都可能對集合進行修改。在這種情況下,DAO.不能自動跟蹤集合的變更。
下面的過程可用來顯示當前數據庫中的所有TableDef對象:

Sub ShowAllTables(dbs As Database)

Dim tdfremp As TableDef

For Each tdfremPIndbs.TableDefs

Debug.Pnnttdfremp.Name

Next tdfremp

End Sub

為了調用上面的過程,可以在窗體上畫一個命令按鈕,然后編寫下面的事件過程:

Private Sub Commandl_Click()

Dim Mvdbs As Database

Set Mydbs=OpenDatabase("czvb50iblio.mdb")

ShowAllTables Mvdbs

End Sub

運行程序,單擊命令按鈕,將在立即窗口中顯示數據庫biblio.mdb中的所有TableDef對象。

在執行上面的過程時,程序將記下TableDefs集合時快照,它遍歷每個TableDef對象,并顯示出它的名字。假定需要兩次運行上面的過程,第一次運行時,顯示了10個表的名字。但在再次運行之前,網絡上的另一個用戶打開了這個數據庫,并在數據庫中添加了一個新的表。如果再次運行該過程,則將仍然顯示10個表的名字,因為DAO不能自動地更新其它用戶對集合所作的變更。為此,可以用Refresh方法強制DAO用最新的變更來更新集合。如果在前面的過程中添加Refresh方法,則可使它返回的總是TableDef對象的最新列表修改后的過程如下:

SUb BetterShowAllTables(dbs As Database)

Dim tdfremp As TableDef

dbs.TableDefs.Refresh

For Each tdfremp ln dbs.TableDefs

Debug.Print tdfremP.Name

Next tdfremp

End Sub

注意,只有在需要時才使用Refresh方法。如果集合包含大量的對象,則刷新集合可能需要較長的時間。
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗