国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

復制數據庫(2)--網絡數據庫的復制和同步(6)

2019-11-18 17:45:54
字體:
來源:轉載
供稿:網友
2.使對象可以復制

如果在復本中建立了一個新對象,并且想把它從本地的改為可復制的,使得其它用戶都可以使用它,則需要在設計原版中建立該對象,并且將其Replicab1e屬性設置為“T”。在這種情況下,務必刪除所有復本中的這個本地對象,否則會產生一個錯誤。

對于TableDef和QueryDef對象,可以直接建立Replicab1e屬性,并添加到對象的屬性集合中,就像處理KeepLocal屬性那樣。而對于由宿主應用程序所定義的窗體、報表、宏和模塊,則應建立Replicable屬性,然后添加到表示該對象的Document對象的屬性集合中。

在下一次同步時,新的可復制對象將出現在集合的其它復本中。類似地,如果想把可復制對象改為本地對象,則應將其Replicab1e屬性設置為“F”。和KeepLocal屬性一樣,如果正在設置Replicab1e屬性的對象已經從其它對象繼承了這個屬性,則其它對象設置的值對這個對象不起作用,必須直接對每個對象設置Rep1icab1e屬性。

注意,如果把一個對象的Replicab1e屬性從“T”改為“F”,該對象便從可復制狀態變為本地的,在這種情況下,MicrosoftJet將只在設計原版中保留該對象,而從復本集的其它復本中刪掉。在改變表的可復制狀態時,應當格外小心。即使在設計原版中暫時把一個可復制表改變為本地表,然后再改回可復制的,但下次同步時仍然將會在每個復本中刪除并重建該表。除非在進行設計變更之前同步所有的復本,否則將會丟失自上次同步以來輸入到表中的所有數據。

3.構造設計原版

設計原版也是一個數據庫復本,但它是一個可以復制的復本。為了把一個數據庫變為

設計原版,需要為Database對象建立Rep1icab1e屬性,并把該屬性添加到Database對象的

屬性集合中,然后將其Replicab1e屬性設置為“T”。

【例】編寫一個Function過程,把指定的數據庫變為設計原版。

過程如下:

PublicFunctionSetReplicable(strDBAsString)Asinteger
DimPRpReplicableasproperty
DimdbsTargetAsDatabase
OnErrorGoToErrorHandler
SetdbsTarget=OpenDatabase(strDB,True)

‘若屬性已存在,則關閉錯誤處理

OnErrorResumeNext

'創建Replicable屬性

SetprpReplicable=dbsTarget.Createproperty("Replicable",dbText,''T'`)

'把該屬性添加到屬性集合中

dbsTarget.Properties.AppendprpReplicable

'把該屬性設置為"T"

dbsTarget.PrOperties("Replicable")=''T''
SetReplicable=0
ErrorHandler:
SelectCaseErr
Case0
SetReplicable=0
ExitFunction
CaseElse
MsgBox"Error"&Err":"&Error
SetReplicable=-1
ExitFunction
EndSelect
EndFunction
上述過程把指定的數據庫轉換為設計原版。如果Rep1icab1e屬性不存在,則建立該屬性,井把它設置為指定的值。

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

PrivateSubConunandl_Click()
DimMyDBAsDatabase
DimaAsinteger
a=SetReplicable(''c:/dbdir/dbl.mdb``)
Ifa=0Then
MsgBox"成功設置Replicable屬性"
Else
MsgBox"設置失敗"
Endif
Endsub

運行程序,單擊命令按鈕,將調用SetReplicable過程,為指定的數據庫添加和設置Replicab1e屬性,并根據執行情況顯示相應的信息。在轉換進程中,MicrosoftJet將維持原始數據庫的所有屬性設置值。

4.用復本生成復本

當把數據庫的Replicable屬性設置為“T”,從而將數據庫轉換成設計原版時,在復本集中只有一個復本(即設計原版),只能用它來生成第一個復本。可以用MakeReplica方法來生成第一個復本和后續的復本。

用設計原版生成數據庫的第一個復本后,可以用集合中的任一復本來生成另外的復本。事實上,在復本集中增加數據庫新備份的唯一途徑,就是從一個現存的復本來建立它們。一旦立好,新復本即成為復本集的一部分。所有復本都有唯一的標識,并能相互通信和同步。每個復本集與所有其它復本集是互相獨立的,不同復本集的復本不能相互通信或同步。

注意,在原始數據庫的備份被變成設計原版之前,不要用它來生成另外的復本。否則,生成的將不是另外的復本,而是新的設計原版和復本集。

【例】編寫一個過程,用來生成數據庫復本。

過程如下:

FunctionMakeAdditionalReplica(strReplicaAsString,strNewReplicaAsString,intOptionsAsInteger)Asinteger
DimdbsAsDatabase
OnErrorGoToErrorHandler
Setdbs=OpenDatabase(strReplicableDB)
'如果沒有選項傳遞給MakeAdditionalReplilca,
'就忽略選項參數,該選項參數的缺省值是完全的,讀/寫復本;
'否則,使用intoptions的值
IfintOptions=0Then
dbs.MakeReplicastrNewReplica,"Replicaof"&strReplicableDB
Else
dbs.MakeReplicastrNewReplica,"Replicaof"&strReplicableDB,intOptions
Endif
dbs.Close
ErrorHandler:
SelectCaseErr
Case0:
MakeAdditionalReplica=0
ExitFunction
CaseElse:
MsgBox"error"&err":"&Error
MakeAdditionalReplica=-1
Exitfunction
Endselect
Endfunction

上述過程可以從一個數據庫復本生成一個新的復本。該過程有3個參數,其中第一個參數是數據庫復本的文件名,第二個參數是新生成的數據庫復本的文件名,第三個參數,即intOptions,可以是DAO常數dbRepMakeReadOnly和dbRepMakePartial的組合,也可以是0。dbRepMakeReadOnly常數表示復本是只讀的,而dbRepMakePartial常數表示復本是部分復本,不是完全復本。例如,為了建立一個只讀部分復本,在調用過程MakeAdditionalReplica時,應當把dbRepMakeReadon1y+dbRepMakePartial的值傳遞給intOptions參數。如果intOptions參數是0,則過程將建立一個完全的讀/寫復本,因為忽略了MakeReplica方法中的options參數。

為了調用上述過程建立數據庫復本,可以在窗體上畫一個命令按鈕,然后編寫如下的事件過程:

PrivateSubCommand1_Click()
A=MakeAdditionalReplica("c:/dbdir/dblcopy1.mdb","c:/dbdir/dblcopy2.mdb",0)
ifa=oThen
MsgBox"己生成數據庫復本"
Else
MsgBox“操作失敗”
Endlf
Endsub

過程中的dblcopy1.mdb是數據庫db1.mdb的復本,而dblcopy2.mdb是dblcopyl.mdb的復本。運行程序,單擊命令按鈕,將建立一個完全的讀/寫復本。

當MicrosoftJet建立新復本時,新復本將包含源復本的所有數據定義語言屬性設置值。后續的復本可以由設計原版或集合中的任一復本來生成。

在用MakeRep1ica方法復制數據庫時,正在復制的對象一定不能是鎖定的,否則方法的調用會失敗。如果一個對象以設計模式打開或在同步期間被更新,則該對象會被MicrosoftJet鎖定。在實際的程序設計中,一定要注意這一點,不要試圖從擁有鎖定對象的數據庫來生成復本。

注意,生成一個新復本后,將把源復本中的所有可復制對象和屬性復制到新復本中。雖然所有鏈接表也被復制,但如果新復本位于網絡上,鏈接表的路徑可能會不正確。因此,一定要對新復本進行測試,以確定是否需要為鏈接表建立新路徑。->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 林芝县| 呼和浩特市| 乃东县| 襄樊市| 平阳县| 安远县| 思南县| 垦利县| 从化市| 长武县| 陇南市| 永平县| 香港 | 温宿县| 齐河县| 昌图县| 天等县| 栖霞市| 白沙| 汕头市| 阜康市| 天水市| 清水县| 鸡东县| 合山市| 二手房| 樟树市| 东源县| 嘉兴市| 永定县| 元谋县| 澳门| 灌云县| 五指山市| 田东县| 海南省| 天长市| 同江市| 望谟县| 富锦市| 晴隆县|