(1)源數(shù)據(jù)庫(kù)類(lèi)型:可以是下列中的一個(gè):
·FOXPro2.0
·FOXPro2.5
·FOXPro2.6
·FOXPro3.0
·FOXProDBC
(2)數(shù)據(jù)庫(kù)名稱:目錄的完整路徑,在該目錄中包含各種希望訪問(wèn)的FoxPro文件(對(duì)于MicrosoftFoxProDBC,該路徑必須包括.dbC文件的名稱。)
(3)源表名稱:表的名稱。在MicrosoftJet中,把FoxPro的一個(gè)數(shù)據(jù)庫(kù)文件(.dbf)看作是一個(gè)表,因此,指定表名稱實(shí)際上是指定.dbf文件。在使用時(shí),應(yīng)去掉擴(kuò)展名.dbf;如果使用帶有擴(kuò)展名的完整的文件名,則須用數(shù)碼符號(hào)(#)代替文件擴(kuò)展名之前的點(diǎn)(.);對(duì)于MicrosoftFoxProDBC,則應(yīng)使用DBC中的表名。
1.鏈接FoxPro數(shù)據(jù)庫(kù)
為了將FoxPro數(shù)據(jù)庫(kù)鏈接到MicrosoftJet數(shù)據(jù)庫(kù),可以先用OpenDatabase方法打開(kāi)本地的MicrosoftJet數(shù)據(jù)庫(kù),建立TableDef對(duì)象,并設(shè)置該對(duì)象的Connect和SourceTableName屬性,然后分別指定要鏈接的FoxPro數(shù)據(jù)庫(kù)(表)的路徑和名稱。
例:編寫(xiě)程序,鏈接FoxPro數(shù)據(jù)庫(kù)。在窗體上畫(huà)一個(gè)命令按鈕,然后編寫(xiě)如下事件過(guò)程:
PrivateSubCommand1_Click()
DimdbsJetAsDatabase
DimtdfFoxTableAsTableDef
’打開(kāi)MicrosoftJet數(shù)據(jù)庫(kù)
SetdbsJet=OpenDatabase("C:/dbdir/db2.mdb")
’建立TableDef對(duì)象
SettdfFoxTable=dbsJet.CreateTableDef("LinkedFoxProTable")
’設(shè)置連接信息
tdfFOXTable.Connect="FOxPro3.0;DATABASE=a:/"
tdfFOxTable.SourceTableName="zf01"
’追加TableDef對(duì)象以創(chuàng)建鏈接
dbSJet.TableDefs.AppendtdfFoxTable
‘顯示確認(rèn)消息
MSgBOX"Finishedlinking"&tdfFOXTable.SourceTableName&".",0
EndSub
該例鏈接了外部FoxPro3.0的表,成功后顯示確認(rèn)消息框。
2.打開(kāi)FoxPro表
如前所述,可以用OpenDatabase方法直接打開(kāi)外部MicrosoftFoxPro表,其參數(shù)分別為路徑、獨(dú)占訪問(wèn)值、只讀值和數(shù)據(jù)源類(lèi)型。
例:編寫(xiě)程序,打開(kāi)FoxPro表,并顯示其內(nèi)容。
前面的例子鏈接了一個(gè)FoxPro表,該表位于A盤(pán)的根目錄下,名為zf01.dbf。可以在“可視化數(shù)據(jù)管理器”中打開(kāi)該表。我們用下面的程序打開(kāi)該數(shù)據(jù)庫(kù),然后顯示它的內(nèi)容。在窗體上畫(huà)一個(gè)命令按鈕,然后編寫(xiě)如下程序:
PrivateSubCommand1_Click()
DimdbsFoxAsDatabase
DimrstAccountsAsRecordset
,打開(kāi)外部FoxPro數(shù)據(jù)庫(kù)
SetdbsFox=OpenDatabase("a:/",FalSe,False,FOXPro3.0")
’從zf01表中建立Recordset對(duì)象
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
該例打開(kāi)了一個(gè)外部FoxPro3.0表,然后從該表中建立Recordset對(duì)象,最后在窗體上輸出表的內(nèi)容。程序運(yùn)行后,單擊命令按鈕,將顯示數(shù)據(jù)庫(kù)zf01.dbf的內(nèi)容。
3.將FoxPro數(shù)據(jù)類(lèi)型轉(zhuǎn)換為MicrosoftJet數(shù)據(jù)類(lèi)型
應(yīng)用程序在讀取數(shù)據(jù)時(shí),MicrosoftJet將每個(gè)FoxPro數(shù)據(jù)類(lèi)型轉(zhuǎn)換為相應(yīng)的MicrosoftJet數(shù)據(jù)類(lèi)型,其對(duì)應(yīng)關(guān)系見(jiàn)下:
Foxpro數(shù)據(jù)類(lèi)型Microsoft數(shù)據(jù)類(lèi)型
charactertext
Numeric,F(xiàn)loatDouble
Logicalboolean
datedate/time
memomemo
GenerallongBinary
Double*double
currency*currency
integerlong
datetime*data/time
(注:*只用于MicrosoftFoxPro3.0和MicrosoftFoxProDBC。)
4.處理己刪除的記錄
當(dāng)在應(yīng)用程序中刪除FoxPro表中的記錄時(shí),該記錄被加上刪除標(biāo)記,但是該記錄并沒(méi)有從表中移走,因?yàn)樵诒肀粔嚎s之前FoxPro不會(huì)發(fā)現(xiàn)標(biāo)記為刪除的記錄。不能通過(guò)MicrosftJet壓縮FoxPro表,必須壓縮FoxPro數(shù)據(jù)庫(kù)以從物理上移走記錄。盡管加了刪除標(biāo)記的記錄實(shí)際上并未從源數(shù)據(jù)庫(kù)中移走、但它們也不會(huì)出現(xiàn)在應(yīng)用程序中,因?yàn)镸icrosoftJet可以自動(dòng)篩掉標(biāo)記為己刪除的記錄。如果希望標(biāo)記為刪除的記錄出現(xiàn)在數(shù)據(jù)集中,必須將Windows注冊(cè)表中/HKEY_lOCAL_MACHINE/SOFTWARE/Microsoft/Jet/3.5/Engines/Xbase鍵的Deleted值設(shè)置為False,并且必須重新啟動(dòng)使用MicrosoftJet的應(yīng)用程序,以反映記錄被刪除的情況。
5.處理FoxPro索引
使用適當(dāng)?shù)腇oxPro索引文件(.idx或.cdx文件),可以提高M(jìn)icrosoftJet對(duì)各種FoxPro表的訪問(wèn)速度。通過(guò)建立與FoxPro數(shù)據(jù)庫(kù)同名的文本文件并加上.inf文件擴(kuò)展名,可以在.inf文件中指定索引文件。假定有一個(gè)名為Sales.dbf的FoxPro數(shù)據(jù)庫(kù)文件,為了建立相應(yīng)的.inf文件,可按如下步驟操作:
(1)建立文本文件Sales.inf。
(2)在文本文件的第一行,指定數(shù)據(jù)庫(kù)類(lèi)型,并把它放在方括號(hào)中。例如,為了指定
FoxPro3.0的索引,可以鍵入:
[FoxPro2.0]
(3)對(duì)數(shù)據(jù)庫(kù)的第一個(gè)索引賦予一個(gè)索引號(hào)。第一個(gè)索引記為IDX1,第二個(gè)記為
IDX2,以此類(lèi)推。如果要為FoxPro數(shù)據(jù)庫(kù)指定組合索引文件(.cdx),則應(yīng)使用形如CDX1,
CDX2等的索引號(hào)。如果在索引號(hào)之前加上字符“U”,則可以指定唯一索引。
(4)在索引號(hào)之后加上一個(gè)等號(hào),再加上要指定的索引文件名(包括擴(kuò)展名)。注意,
在該項(xiàng)中不能有任何空格。例如,要指定索引custname.idx作為第一個(gè)索引,而唯一索引
custno.idx作為第二個(gè)索引,則應(yīng)在文件中添加下面的項(xiàng):
IDX1=custname.idx
UIDXl=custno.idx
(5)重復(fù)第(3)步和第(4)步,直到指定完數(shù)據(jù)庫(kù)表的所有索引。完成后的.inf文
件看起來(lái)像下面這樣:
[FOxPro3.0]
IDX1=custname.idx
UIDX1=custno.idx
(6)將.inf文件保存在FoxPro數(shù)據(jù)庫(kù)所在的目錄下。
如果不能將.inf文件與數(shù)據(jù)庫(kù)存儲(chǔ)在同一目錄下,或者為了維護(hù)方便而希望將所有的文件存儲(chǔ)在一個(gè)共享的目錄下,則可以建立一個(gè)指向存儲(chǔ).inf文件路徑的Windows注冊(cè)表項(xiàng),即在Windows注冊(cè)表中建立INFPath項(xiàng),這可以通過(guò)在注冊(cè)表編輯器中手工添加一個(gè)字符串注冊(cè)表值來(lái)實(shí)現(xiàn)。其方法是:打開(kāi)Windows注冊(cè)表的\HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Jet/3.5\Engines\Xbase鍵,執(zhí)行“編輯”菜單中的“新建”,然后單擊“字符串值”,輸入INFPath作為名稱,再在“數(shù)據(jù)”列輸入該.inf文件的完整的目錄或者網(wǎng)絡(luò)路徑。為了使用該設(shè)置值,應(yīng)保存修改后的注冊(cè)表,并重新啟動(dòng)使用MicrosoftJet的應(yīng)用程序。
注意,F(xiàn)oxPro數(shù)據(jù)庫(kù)中的數(shù)據(jù)經(jīng)常變更,因此MicrosoftJet也要經(jīng)常更新索引文件。如果FoxPro數(shù)據(jù)庫(kù)與MicrosonJet建立了鏈接,或者FoxPro數(shù)據(jù)庫(kù)是在MicrosoftJet數(shù)據(jù)庫(kù)中打開(kāi)的,則只有在這些索引對(duì)MicrosoftJet數(shù)據(jù)庫(kù)同樣有效的情況下,才能使其與FoxPro數(shù)據(jù)庫(kù)相關(guān)聯(lián)。此外還應(yīng)注意,在沒(méi)有更新相關(guān)聯(lián)的引用(例如Windows注冊(cè)表中的INFPath項(xiàng))前,不要?jiǎng)h除或者移動(dòng)索引文件或.inf文件。如果MicrosoftJet不能獲得最新的索引信息,則不能正確地處理查詢。
6.處理備注字段
FoxPro數(shù)據(jù)庫(kù)的備注字段是存儲(chǔ)在文件系統(tǒng)中而不是數(shù)據(jù)庫(kù)中。如果希望打開(kāi)或鏈接具有備注字段的FoxPro數(shù)據(jù)庫(kù),則應(yīng)確保備注文件與數(shù)據(jù)庫(kù)文件存放在同一目錄下。否則會(huì)產(chǎn)生出錯(cuò)信息。(實(shí)時(shí)錯(cuò)誤‘3166’;不能定位所需的Xbase備注文件。)
->
|
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注