線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1415
推到 Plurk!
推到 Facebook!

Delphi中資料檔案路徑的管理

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-25 12:14:07 IP:61.221.xxx.xxx 未訂閱
此為轉貼資料 Delphi中資料檔案路徑的管理 Delphi中的Table控制項(Component)和Query控制項都有一個DatabaseName屬性。可以用DatabaseName屬性來指定該控制項所引用的資料表的路徑。有兩種方法可以?屬性DatabaseName設置路徑:第一種方法是直接輸入資料表所在路徑,另一種方法是使用資料庫別名(Alias)。在Delphi中,資料庫別名是在資料庫引擎(BDE)中建立的,一個別名對應一個文件路徑。可以這樣?別名下定義:別名是對文件路徑的映射,是文件路徑的簡稱。因此,在屬性DatabaseName中使用資料庫別名和使用文件路徑實質都是一樣的,它們都作?查找資料表的根(Root)路徑。但是,在資料庫應用程式的設計中,如果涉及到的Table控制項和Query控制項比較多的話,那?使用別名來引用文件路徑就十分高效、方便,並且不容易出差錯。原因是顯而易見的:一方面,別名可以在列表中直接選取而不必像文件路徑那樣從鍵盤上輸入;另一方面,別名可以設置得很簡短,即使從鍵盤錄入也比較快捷。因此,筆者建議要多使用資料庫別名而少使用文件路徑。 另外,在Table控制項的屬性TableName和Query控制項的SQL語句中,都可以包含資料表的路徑資訊。因?Query控制項和Table控制項的情況十分相似,所以下面只對Table控制項進行說明。這種路徑資訊既可以是一個完整的路徑,也可以是一個完整路徑的後面部分。比如對Table控制項的屬性TableName賦值時,可以把C:DelphiDemosDataCustomerDB賦給它,也可以把DataCustomerDB賦給它。 在實際應用中,我們可以把Table控制項的屬性DatabaseName和屬性TableName結合起來使用。把屬性DatabaseName中的路徑作?根路徑,把屬性TableName中的不完整路徑(如果有的話)作?子路徑。把這兩個路徑結合起來就是訪問到資料表的一個完整的路徑。比如,假設在路徑C:DelphiDemosData下存在資料表CustomerDB,把Table控制項的屬性DatabaseName指定?C:DelphiDemosData,然後把屬性TableName指定?CustomerDB,就可以訪問資料表CustomerDB了。如果屬性DatabaseName指定?C:DelphiDemos,要想訪問資料表CustomerDB,只要把屬性TableName指定?dataCustomerDB就行了。有時候這二者並不同時起作用。例如,如果屬性TableName中包括了完整的路徑,那?屬性DatabaseName中的路徑就不起任何作用了。又如,如果屬性DatabaseName中沒有指定任何路徑,而屬性TableName中的路徑又是不完整的,如DataCustomerDB,那?應用程式運行時的當前路徑就作?根路徑。?了便於程式移植,筆者有兩點建議: 1、通常,只需要在屬性DatabaseName中指定資料表的路徑,而在屬性TableName中不必包括路徑資訊。 2、一般情況下,不要在屬性TableName中指定完整的路徑。 下面就來介紹一下如何提高資料庫應用程式的移植性。 資料庫應用程式的移植是一個重要的問題。因?在資料庫應用程式中要訪問資料庫或資料表,就要涉及到資料檔案的路徑。一般來說,資料庫應用程式開發完成後要移植到其他機器上使用,因此資料庫應用程式運行時的資料檔案的路徑很可能和開發時的不同。所以必須對資料檔案的路徑進行有效的管理,以便於系統的移植。下面介紹三種管理資料檔案路徑的方法。 1、把資料檔案建立在應用程式所在目錄的子目錄下。具體過程?: (1)?了設計起來方便,在設計時可以使用資料庫別名,且該資料庫別名指向應用程式所在路徑。把子路徑名加上資料表名字之後賦給Table控制項的屬性TableName。 (2)在發行應用程式前,把所有的Table控制項或Query控制項的屬性Active都置?False,刪除屬性DatabaseName中的所有字元(即置空)。 在缺省情況下,應用程式運行時的當前目錄是應用程式所在的目錄。如果在應用程式中沒有調用ChDir等過程改變當前目錄的話,那?就不必執行第三步,否則進行第三步的處理。 (3)在使用到Table控制項和/或Query控制項的表單的創建(OnCreate)事件中,把應用程式所在路徑賦給該表單中的每一個Table控制項和Query控制項。具體的形式如下所示: Table物件(或Query物件)PDatabaseName:=ExtractFilePath(ApplicationPExeName); 2、利用配置文件存放資料庫路徑 此方法是在應用系統安裝或第一次運行時把資料庫路徑資訊寫入配置文件,以後運行時把路徑資訊從配置文件中讀出。配置文件的讀寫利用類TIniFile(Delphi1.0和Delphi3.0) 、類TRegIniFile(Delphi 3.0/4.0)和類TRegistry(Delphi3.0/4.0)所提供的方法來實現。各個方法具體的用法請查閱Delphi聯機幫助。本方法的基本思路?: (1)?了設計方便,在設計時可以使用資料庫別名。 (2)同1的步驟(2),但必須進行第三步的處理。 (3)同1的步驟(3)類似。即,在表單的創建事件中把資料庫路徑賦給該表單中的每一個Table控制項和Query控制項,用形式化語言描述如下: Table物件(或Query物件)PDatabaseName:=配置文件記錄中的資料庫路徑。 3、利用資料庫別名存放資料庫路徑 在設計時使用資料庫別名。在應用系統安裝或第一次運行時利用系統物件Session在BDE中建立與設計時相同的別名,使別名指向相應的資料庫路徑。下面的代碼說明了如何建立名字?“FDB”的別名,它的資料庫路徑?d: est,資料庫類型?Paradox。 Session.ConfigMode:=cmAll; Session.AddStandardAlias(′FDB′,′d: est′,′PARADOX′); Session.SaveConfigFile; {保存新建立的別名} 注:在Delphi1.0中Session物件不具有第三種方法中所用到的屬性和方法。以上三行代碼在Delphi3.0/4.0下調試通過。 從上面的討論可以看出,方法三實現起來最簡單,其次是方法一,最後是方法二。筆者認?,如果應用系統是用Delphi3.0/4.0開發的,那?應儘量使用方法三。
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
系統時間:2024-11-22 15:56:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!