DELPHI中數據文件路徑的管理

Delphi中的Table控件(Component)和query控件都需要有一個DatabaseName屬性。可以用DatabaseName屬性來指定該控件所引用的數據表路徑。有兩種方法可以爲屬性DatabaseName設置路徑:第一種方法是直接輸入數據表所在路徑,另一種方法是使用數據庫別名(Alias)。在Delphi中數據庫別名是在數據庫引擎(BDE)中設定的,一個別名對應一個文件路徑。可以這樣爲別名定義:別名是對文件路徑的映射,是文件路徑的簡稱。因此,在屬性DataBaseName中使用數據庫別名和使用文件路徑實質上都是一樣的,他們都是作爲查找數據表的根路徑。但是,在數據庫應用程序設計中,如果涉及到的Table控件和Query控件比較多的話,那麽使用別名來引用文件路徑就十分高效、方便,且不容易出錯。原因是顯而易見的:一方面,別名可以在列表中直接存取而不像文件路徑那樣需要從鍵盤輸入;另一方面,別名可以設置的很短,即使從鍵盤上輸入也比較快捷。

另外,在Table控件的屬性TableName和Query控件的SQL語句中,都可以包含數據表的路徑信息。因爲Query和Table控件的情況十分相似,所以下面只對Table控件進行說明。這種路徑信息既可以是一個完整的路徑,也可以是一個完整路徑的後面部分。比如對Table控件的屬性TableName進行賦值時,可以把c:\delphi\demo1\data\subscriber賦給它,也可以把data\subscriber賦給它。即,可以使用絕對路徑,也可以使用相對路徑。

爲了便于程序移植,通常只需要在屬性DataBaseName中指定數據表的路徑,而在TableName中不必包括路徑信息。一般情況下,不要在屬性TableName 中指定完整的路徑。

數據庫應用程序的移植是一個重要的問題。因爲在數據庫應用程序中要訪問數據庫或數據表,就要涉及到數據文件的路徑。一般來說,數據庫應用程序開發完成後要移植到其他的機器上使用,因此數據庫應用程序運行時的數據文件路徑很可能和開發時的不同。所以必須對數據文件的路徑進行有效的管理,以便用于系統的移植。下面介紹三種管理數據文件路徑的方法。

1.把數據文件建立在應用程序所在目錄的子目錄下。具體過程爲

(1) 爲了設計起來方便,在設計時可以使用數據庫別名,且該數據庫別名指向應用程序所在路徑。把子路徑名加上數據表名後賦值給Table控件的屬性TableName。

(2) 在發行應用程序之前,把所有的Table控件和Query空間的屬性Active都設置爲False,刪除屬性DataBase中的所有字符(即置空)。

在缺省情況下,應用程序運行時的當前目錄是應用程序所在的目錄。如果在應用程序中沒有調用ChDir等過程改變當前目錄的話,那就不必執行第三步,否則執行第三步的處理。

(3) 在使用到Table控件和Query控件的窗體的OnCreate事件中,把應用程序所在路徑賦值給該窗體上的每一個Table控件和Query控件。 Table1.databasename:=ExtractFilePath(application.ExeName);

2.利用配置文件存放數據路徑

此方法是在應用系統安裝或者第一次運行時把數據庫路徑信息寫入配置文件。

以後運行時把路徑信息從配置文件中讀出。配置文件的讀寫使用的是類

TiniFile、類TregIniFile和類Tregistry所提供的方法來實現。

本方法基本思路爲:

(1)爲了設計方便,在設計時使用數據庫別名。

(2)在發行應用程序之前,把所有的Table控件和Query空間的屬性Active都設

置爲False,刪除屬性DataBase中的所有字符(即置空)。

(3)在使用到Table控件和Query控件的窗體的OnCreate事件中,把應用程序所在路徑賦值給該窗體上的每一個Table控件和Query控件。

Table1.databasename:=ExtractFilePath(application.ExeName);

3.利用數據庫別名存放數據庫路徑

要使用Session動態創建數據庫別名,需要在窗體上添加一個session1組件,添加成功後,系統該窗體對應的單元接口部分的uses子句裏添加一個DBTables單元。我們在動態創建和刪除數據庫別名時將用到的就是該單元定義的一個Session全局變量,而不是添加在窗體上的Session1組件。在試題庫系統的創建過程中,爲了以防混淆,我們刪除了窗體上的Session1組件,這樣做對于功能的實現是沒有任何影響的。

下面代碼說明如何建立名字爲“Subscriber”的別名,它的數據庫路徑爲“E:\subscriber”,數據庫類型爲PARADOX。

Session.ConfigMode:=cmall;//指定Session的配置模式

Session.AddStandardAlias(‘net’,’E:\ subscriber’,’PARADOX’); //創建別名爲net的paradox類型的數據庫,其路徑是e:\subscriber

Session.SaveConfigFile; //保存配置修改

如須對別名進行刪除,則先要檢查別名是否存在,如果對不存在的別名做刪除操作則會引起異常。下面代碼說明如何檢查數據庫別名“Subscriber”是否存在,如果存在則進行刪除。

定義變量:var strAlias:TStringList; //用于保存BDE數據庫別名表

代碼: strAlias:=TStringList.Create;//生成TstringList類的實例

Session.GetAliasNames(strAlias);//獲取當前所有數據庫別名

//查找subscriber是否存在,存在返回值爲-1,不存在爲非-1

if (strAlias.IndexOf(' Subscriber’) <> -1) then

begin

session.DeleteAlias(' Subscriber ');//刪除數據庫別名subscriber

session.SaveConfigFile; //保存

end;

 
關于中國企業集團管理發展路徑報告
  2009年3月13日,北京)《協同 集成 管控——中國企業集團管理發展路徑報告》(以下簡稱《報告》)在京發布,時處“兩會”,在“十大産業振興規劃”,“兩化融合”等一系列新政的支撐下,中國企業集團轉型升級與管...查看完整版>>關于中國企業集團管理發展路徑報告
 
如何查看數據文件所在的路徑?
  軟件環境: 1、Windows NT4.0+Oracle 8.0.4  2、ORACLE安裝路徑爲:C:\ORANT      SQL語句:    SQL col file_name format a50   SQL select tablespace_name,file_id,bytes/1024/1024,file_name ...查看完整版>>如何查看數據文件所在的路徑?
 
如何查看數據文件所在的路徑?
  軟件環境: 1、Windows NT4.0+ORACLE 8.0.4  2、ORACLE安裝路徑爲:C:\ORANT  SQL語句:   SQL col file_name format a50   SQL select tablespace_name,file_id,bytes/1024/1024,file_name  from dba...查看完整版>>如何查看數據文件所在的路徑?
 
Delphi項目相對路徑問題
你寫了一個程序,如何把源碼拷貝到其他機器的不同目錄下,是否程序不能編譯不能通過了,那麽很有可能是路徑出了問題,如何工程設置中都使用了相對路徑,那麽就方便多了,而且還會是項目管理更輕松,一幕了然. 在Project-&g...查看完整版>>Delphi項目相對路徑問題
 
北京彙智管理網-商業模式創新與戰略轉型-李振勇-顛覆了傳統商業模式路徑依賴,獨創中國企業最具成長性的商業模式理論體系,是中國第一套商業模式創新與設計系統解決方案,也是企業持續贏利的商業寶典,價值創新,
商品品牌:人間動力 教材組成:6VCD盤+1手冊 講 師:李振勇 上市日期:2009年06月15日 市 場 價:¥580.00 本 站 價:¥394.40(購買即送價值100元的:投資我主張-侯甯 朱建中 徐文明 伍朝輝 唐五湘 任一講師産品) 《商...查看完整版>>北京彙智管理網-商業模式創新與戰略轉型-李振勇-顛覆了傳統商業模式路徑依賴,獨創中國企業最具成長性的商業模式理論體系,是中國第一套商業模式創新與設計系統解決方案,也是企業持續贏利的商業寶典,價值創新,