程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 復制數據庫(1)--網絡數據庫的復制和同步(5)

復制數據庫(1)--網絡數據庫的復制和同步(5)

編輯:VB綜合教程
所謂建立數據庫復本,實際上就是建立數據庫的拷貝。通過數據庫復制,每個用戶都可以使用數據庫中數據的一份拷貝,並可在某個時亥把各個數據庫重新組合成宿主數據庫,而對宿主數據庫的修改都傳送到數據庫復本。注意,數據庫復制功能僅對MicrosoftJet3.5版的數據庫有效。
  
  MicrosoftJet數據庫引擎不允許用數據庫密碼來保護復制數據庫。在開始使用復本之前,必須先從將要復制的數據庫中刪去所有數據庫密碼保護。設置用戶權限與復本同步沒有沖突。
  
  用DAO復制數據庫的一般步驟如下:
  
  (1)識別數據庫中不需要復制的對象,並將它們的KeepLocal屬性設置為“T”。
  (2)將數據庫的Replicable屬性設置為“T”,使它變成設計原版。
  (3)用MakeReplica方法從設計原版中生成附加的復本。
  在設置Replicable屬性之前,應先確定在轉換數據庫以前數據庫是否已經被復制。
  
  1.保持對象本地化
  
  當把正常的數據庫轉換為設計原版時,將復制數據庫中的所有對象。如果不想把數據中的所有對象都放在復本集中,則可對不想復制的對象添加並設置KeepLocal屬性。例如,果數據庫中有一個表,在該表中含有機密的工資信息、初始化信息或登錄到數據庫的用名,則可能希望不把這些信息放到復本中。在這種情況下,可將該表的KeepLocal屬性設為“T”,使得復制數據庫時,這些信息不被復制。
  
  對於TableDef和QueryDef對象,可以建立keepLocal屬性並把它添加到對象的屬性集合中。對於由主機應用程序定義的窗體、報表、宏以及模塊,可以建立KeepLocal屬性並把它添加到表示該對象的Document對象的屬性集合中。
  
  注意,在設置keepLocal(以及Rep1icab1e)屬性之前,必須先建立它,然後添加到將使用它的對象的屬性集合中。如果在建立並添加該屬性之前先引用了它,則將產生一個運行時錯誤。
  
  【例】編寫一個Function過程,對數據庫中指定的對象進行本地化處理。
  
  FunctionSetKeepLocal(dbsAsDatabase,strCollectionAsString,stffobJectAsString)Asinteger
  DimiAsInteger
  DimblnMatchAsBoolean
  DimtdfAsTableDef
  DimPrPAsProperty
  DimdocAsDocument
  DimqdfAsQueryDef
  OnErrorGoToErrorHandler
  SelectCasestalollection
  Case"FormS","RelpOrtS",''MOdllleS'',''SCriptS`'
  Setdoc=dbs.Containers(strCollection).Documents(strObject)
  Setprp=doc.Createproperty("KeepLocal",dbText,`'T'')
  doc.Properties.Appendprp
  Case"TableDefs"
  Settdf=dbs.TableDefs(strObJect)
  Setprp=tdfCreateproperty(''KeepLocal'',dbText,''T'')
  tdfprol)etties.Appendprp
  Case''QuecyDefs'`
  Setqdf=dbs.QueryDefs(sbrobject)
  Setprp=qdf.Createproperty("KeepLocal",dbText,"T")
  qdf.properties.AppendPrP
  EndSelect
  ErrorHandler:
  SelectCaseErr
  Case0
  case3265'對象未發現
  SetKeepLocal=3265
  ExitFunction
  
  '屬性已經存在,把它設置為“T”
  
  Case3367
  SelectCasesttoollection
  CSSel''Forms'',''RelportS'',``Modlules'',''ScriptS'`
  doc.Properties(''KeepLocal'`).Value=`'T'`
  Case''TableDefs'`
  tdf.Properties(''KeepLocal'').Value=`'T'`
  Case''QueryDefs'`
  qdf.Properties(''KeepLocal'').Value=''T'`
  ExitFunction
  EndSelect
  SetKeepLocal=0
  ExitFunction
  CaseElse
  MsgBOx''Error''&Err&":",&Error,vbOKOnly
  SetKeepLocal=-1
  ExitFunction
  EndSelect
  EndFunction
  
  用上述過程可以對指定數據庫對象建立並添加KeepLocal屬性,如果該屬性已經存在,則將產生代碼為3367的錯誤,在這種情況下,將在錯誤處理程序中把該屬性的值設置為“T”
  
  該過程有3個參數,其中第一個參數是Database對象,第二個參數是集合的名字,第三個參數是數據庫中的對象名。過程的返回值是一個整型數,它實際上是一個錯誤代碼。為了調用上面的過程,可以在窗體上畫一個命令按鈕,然後編寫如下的事件過程:
  
  PrivateSubCommand1_Click()
  DimMyDbAsDatabase
  DimaAsinteger
  SetMyDb=OpenDatabase(''c:dbdirdb1.mdb'')
  a=SetKeepLocal(MyDb,''TableDefs'',''Tabel1'')
  Ifa=0Then
  MsgBox"已成功設置KeepLocal屬性"
  Elselfa=3265Then
  MsgBox"對象未找到"
  Elselfa=3367Then
  MsgBox"KeepLocal屬性已存在,設置為“T”
  Else
  MsgBox“出錯”
  Endlf
  Endsub
  
  該事件過程調用SetKeepLocal過程,用來建立並設置數據庫db1.mdb的TableDefs集合中Tabel1對象的KeepLocal屬性。
  
  如果已經在數據庫的兩個表之間建立起關系,則必須將兩個表的keepLocal屬性設置為相同的值,即兩個表都必須是本地的或者是可復制的。如果兩個表的keepLocal屬性設置不一樣,則轉換將會失敗。但是應注意,不能在關系有效時設置keepLocal屬性,也就是說,在設置屬性之前,應先刪除兩個表之間的關系,在設置好KeepLocal屬性之後再恢復兩個表之間的關系,然後繼續進行數據庫轉換。
  
  如果正在設置KeepLocal屬性的對象已經從其它對象中繼承了該屬性,則由其它對象設置的值對保留為本地對象的操作沒有影響,必須直接為每個對象設置keepLocal屬性。->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved