程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 訪問Foxpro數據庫----用MicrosoftJet訪問桌面數據庫(二)

訪問Foxpro數據庫----用MicrosoftJet訪問桌面數據庫(二)

編輯:VB綜合教程
MicrosoftJetXbaseIISAM驅動程序支持下列版本的MicrosoftFoxPro:2.0,2.5,2.6,3.0和DBC。當通過MicrosoftJet數據庫引擎訪問FoxPro數據庫時,還應當考慮MicrosoftJet如何處理FoxPro數據類型、已刪除的記錄、FoxPro索引和備注字段。為了在MicrosoftJet中訪問FoxPro數據庫,應指定適當的連接信息,包括:

  (1)源數據庫類型:可以是下列中的一個:

  ·FOXPro2.0

  ·FOXPro2.5

  ·FOXPro2.6

  ·FOXPro3.0

  ·FOXProDBC

  (2)數據庫名稱:目錄的完整路徑,在該目錄中包含各種希望訪問的FoxPro文件(對於MicrosoftFoxProDBC,該路徑必須包括.dbC文件的名稱。)

  (3)源表名稱:表的名稱。在MicrosoftJet中,把FoxPro的一個數據庫文件(.dbf)看作是一個表,因此,指定表名稱實際上是指定.dbf文件。在使用時,應去掉擴展名.dbf;如果使用帶有擴展名的完整的文件名,則須用數碼符號(#)代替文件擴展名之前的點(.);對於MicrosoftFoxProDBC,則應使用DBC中的表名。

  1.鏈接FoxPro數據庫

  為了將FoxPro數據庫鏈接到MicrosoftJet數據庫,可以先用OpenDatabase方法打開本地的MicrosoftJet數據庫,建立TableDef對象,並設置該對象的Connect和SourceTableName屬性,然後分別指定要鏈接的FoxPro數據庫(表)的路徑和名稱。

  例:編寫程序,鏈接FoxPro數據庫。在窗體上畫一個命令按鈕,然後編寫如下事件過程:

  PrivateSubCommand1_Click()

  DimdbsJetAsDatabase

  DimtdfFoxTableAsTableDef

  ’打開MicrosoftJet數據庫

  SetdbsJet=OpenDatabase("C:dbdirdb2.mdb")

  ’建立TableDef對象

  SettdfFoxTable=dbsJet.CreateTableDef("LinkedFoxProTable")

  ’設置連接信息

  tdfFOXTable.Connect="FOxPro3.0;DATABASE=a:"

  tdfFOxTable.SourceTableName="zf01"

  ’追加TableDef對象以創建鏈接

  dbSJet.TableDefs.AppendtdfFoxTable

  ‘顯示確認消息

  MSgBOX"Finishedlinking"&tdfFOXTable.SourceTableName&".",0

  EndSub

  該例鏈接了外部FoxPro3.0的表,成功後顯示確認消息框。

  2.打開FoxPro表

  如前所述,可以用OpenDatabase方法直接打開外部MicrosoftFoxPro表,其參數分別為路徑、獨占訪問值、只讀值和數據源類型。

  例:編寫程序,打開FoxPro表,並顯示其內容。

  前面的例子鏈接了一個FoxPro表,該表位於A盤的根目錄下,名為zf01.dbf。可以在“可視化數據管理器”中打開該表。我們用下面的程序打開該數據庫,然後顯示它的內容。在窗體上畫一個命令按鈕,然後編寫如下程序:

  PrivateSubCommand1_Click()

  DimdbsFoxAsDatabase

  DimrstAccountsAsRecordset

  ,打開外部FoxPro數據庫

  SetdbsFox=OpenDatabase("a:",FalSe,False,FOXPro3.0")

  ’從zf01表中建立Recordset對象

  SetrstAccounts=dbsFox.OpenRecordset("zf01")

  print

  DOUntilrstAccounts.EOF

  PrintrstAccounts.mc;"";

  printTab(15);rstAccounts.zd;

  PrintTab(25);rstAccounts.jz;

  printTab(35);rstAccounts.jg;

  printTab(45);rstAccounts.rq;

  printTab(55);rstAccounts.lC;

  PrintTab(60);rstAccounts.dz

  rstAccounts.MoveNext

  Loop

  rstAccounts.Close

  dbsFOX.Close

  EndSub

  該例打開了一個外部FoxPro3.0表,然後從該表中建立Recordset對象,最後在窗體上輸出表的內容。程序運行後,單擊命令按鈕,將顯示數據庫zf01.dbf的內容。

  3.將FoxPro數據類型轉換為MicrosoftJet數據類型

  應用程序在讀取數據時,MicrosoftJet將每個FoxPro數據類型轉換為相應的MicrosoftJet數據類型,其對應關系見下:

  Foxpro數據類型Microsoft數據類型

  charactertext

  Numeric,FloatDouble

  Logicalboolean

  datedate/time

  memomemo

  GenerallongBinary

  Double*double

  currency*currency

  integerlong

  datetime*data/time

  (注:*只用於MicrosoftFoxPro3.0和MicrosoftFoxProDBC。)

  4.處理己刪除的記錄

  當在應用程序中刪除FoxPro表中的記錄時,該記錄被加上刪除標記,但是該記錄並沒有從表中移走,因為在表被壓縮之前FoxPro不會發現標記為刪除的記錄。不能通過MicrosftJet壓縮FoxPro表,必須壓縮FoxPro數據庫以從物理上移走記錄。盡管加了刪除標記的記錄實際上並未從源數據庫中移走、但它們也不會出現在應用程序中,因為MicrosoftJet可以自動篩掉標記為己刪除的記錄。如果希望標記為刪除的記錄出現在數據集中,必須將Windows注冊表中HKEY_lOCAL_MACHINESOFTWAREMicrosoftJet3.5EnginesXbase鍵的Deleted值設置為False,並且必須重新啟動使用MicrosoftJet的應用程序,以反映記錄被刪除的情況。

  5.處理FoxPro索引

  使用適當的FoxPro索引文件(.idx或.cdx文件),可以提高MicrosoftJet對各種FoxPro表的訪問速度。通過建立與FoxPro數據庫同名的文本文件並加上.inf文件擴展名,可以在.inf文件中指定索引文件。假定有一個名為Sales.dbf的FoxPro數據庫文件,為了建立相應的.inf文件,可按如下步驟操作:

  (1)建立文本文件Sales.inf。

  (2)在文本文件的第一行,指定數據庫類型,並把它放在方括號中。例如,為了指定

  FoxPro3.0的索引,可以鍵入:

  [FoxPro2.0]

  (3)對數據庫的第一個索引賦予一個索引號。第一個索引記為IDX1,第二個記為

  IDX2,以此類推。如果要為FoxPro數據庫指定組合索引文件(.cdx),則應使用形如CDX1,

  CDX2等的索引號。如果在索引號之前加上字符“U”,則可以指定唯一索引。

  (4)在索引號之後加上一個等號,再加上要指定的索引文件名(包括擴展名)。注意,

  在該項中不能有任何空格。例如,要指定索引custname.idx作為第一個索引,而唯一索引

  custno.idx作為第二個索引,則應在文件中添加下面的項:

  IDX1=custname.idx

  UIDXl=custno.idx

  (5)重復第(3)步和第(4)步,直到指定完數據庫表的所有索引。完成後的.inf文

  件看起來像下面這樣:

  [FOxPro3.0]

  IDX1=custname.idx

  UIDX1=custno.idx

  (6)將.inf文件保存在FoxPro數據庫所在的目錄下。

  如果不能將.inf文件與數據庫存儲在同一目錄下,或者為了維護方便而希望將所有的文件存儲在一個共享的目錄下,則可以建立一個指向存儲.inf文件路徑的Windows注冊表項,即在Windows注冊表中建立INFPath項,這可以通過在注冊表編輯器中手工添加一個字符串注冊表值來實現。其方法是:打開Windows注冊表的\HKEY_LOCAL_MACHINESOFTWAREMicrosoftJet3.5\Engines\Xbase鍵,執行“編輯”菜單中的“新建”,然後單擊“字符串值”,輸入INFPath作為名稱,再在“數據”列輸入該.inf文件的完整的目錄或者網絡路徑。為了使用該設置值,應保存修改後的注冊表,並重新啟動使用MicrosoftJet的應用程序。

  注意,FoxPro數據庫中的數據經常變更,因此MicrosoftJet也要經常更新索引文件。如果FoxPro數據庫與MicrosonJet建立了鏈接,或者FoxPro數據庫是在MicrosoftJet數據庫中打開的,則只有在這些索引對MicrosoftJet數據庫同樣有效的情況下,才能使其與FoxPro數據庫相關聯。此外還應注意,在沒有更新相關聯的引用(例如Windows注冊表中的INFPath項)前,不要刪除或者移動索引文件或.inf文件。如果MicrosoftJet不能獲得最新的索引信息,則不能正確地處理查詢。

  6.處理備注字段

  FoxPro數據庫的備注字段是存儲在文件系統中而不是數據庫中。如果希望打開或鏈接具有備注字段的FoxPro數據庫,則應確保備注文件與數據庫文件存放在同一目錄下。否則會產生出錯信息。(實時錯誤‘3166’;不能定位所需的Xbase備注文件。)

->

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