(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")
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備注文件。)
->