Delphi中的Table控件(Component)和query控件都需要有一個(gè)DatabaseName屬性。可以用DatabaseName屬性來指定該控件所引用的數(shù)據(jù)表路徑。有兩種方法可以為屬性DatabaseName設(shè)置路徑:第一種方法是直接輸入數(shù)據(jù)表所在路徑,另一種方法是使用數(shù)據(jù)庫別名(Alias)。在Delphi中數(shù)據(jù)庫別名是在數(shù)據(jù)庫引擎(BDE)中設(shè)定的,一個(gè)別名對(duì)應(yīng)一個(gè)文件路徑。可以這樣為別名定義:別名是對(duì)文件路徑的映射,是文件路徑的簡稱。因此,在屬性DataBaseName中使用數(shù)據(jù)庫別名和使用文件路徑實(shí)質(zhì)上都是一樣的,他們都是作為查找數(shù)據(jù)表的根路徑。但是,在數(shù)據(jù)庫應(yīng)用程序設(shè)計(jì)中,如果涉及到的Table控件和Query控件比較多的話,那么使用別名來引用文件路徑就十分高效、方便,且不容易出錯(cuò)。原因是顯而易見的:一方面,別名可以在列表中直接存取而不像文件路徑那樣需要從鍵盤輸入;另一方面,別名可以設(shè)置的很短,即使從鍵盤上輸入也比較快捷。
另外,在Table控件的屬性TableName和Query控件的SQL語句中,都可以包含數(shù)據(jù)表的路徑信息。因?yàn)镼uery和Table控件的情況十分相似,所以下面只對(duì)Table控件進(jìn)行說明。這種路徑信息既可以是一個(gè)完整的路徑,也可以是一個(gè)完整路徑的后面部分。比如對(duì)Table控件的屬性TableName進(jìn)行賦值時(shí),可以把c:/delphi/demo1/data/subscriber賦給它,也可以把data/subscriber賦給它。即,可以使用絕對(duì)路徑,也可以使用相對(duì)路徑。
為了便于程序移植,通常只需要在屬性DataBaseName中指定數(shù)據(jù)表的路徑,而在TableName中不必包括路徑信息。一般情況下,不要在屬性TableName 中指定完整的路徑。
(3) 在使用到Table控件和Query控件的窗體的OnCreate事件中,把應(yīng)用程序所在路徑賦值給該窗體上的每一個(gè)Table控件和Query控件。 Table1.databasename:=ExtractFilePath(application.ExeName);
(3)在使用到Table控件和Query控件的窗體的OnCreate事件中,把應(yīng)用程序所在路徑賦值給該窗體上的每一個(gè)Table控件和Query控件。
Table1.databasename:=ExtractFilePath(application.ExeName);
3.利用數(shù)據(jù)庫別名存放數(shù)據(jù)庫路徑
要使用session動(dòng)態(tài)創(chuàng)建數(shù)據(jù)庫別名,需要在窗體上添加一個(gè)session1組件,添加成功后,系統(tǒng)該窗體對(duì)應(yīng)的單元接口部分的uses子句里添加一個(gè)DBTables單元。我們在動(dòng)態(tài)創(chuàng)建和刪除數(shù)據(jù)庫別名時(shí)將用到的就是該單元定義的一個(gè)Session全局變量,而不是添加在窗體上的Session1組件。在試題庫系統(tǒng)的創(chuàng)建過程中,為了以防混淆,我們刪除了窗體上的Session1組件,這樣做對(duì)于功能的實(shí)現(xiàn)是沒有任何影響的。
下面代碼說明如何建立名字為“Subscriber”的別名,它的數(shù)據(jù)庫路徑為“E:/subscriber”,數(shù)據(jù)庫類型為PARADOX。
Session.ConfigMode:=cmall;//指定Session的配置模式
Session.AddStandardAlias(‘net’,’E:/ subscriber’,’PARADOX’); //創(chuàng)建別名為net的paradox類型的數(shù)據(jù)庫,其路徑是e:/subscriber
如須對(duì)別名進(jìn)行刪除,則先要檢查別名是否存在,如果對(duì)不存在的別名做刪除操作則會(huì)引起異常。下面代碼說明如何檢查數(shù)據(jù)庫別名“Subscriber”是否存在,如果存在則進(jìn)行刪除。
定義變量:var strAlias:TStringList; //用于保存BDE數(shù)據(jù)庫別名表
代碼: strAlias:=TStringList.Create;//生成TstringList類的實(shí)例
Session.GetAliasNames(strAlias);//獲取當(dāng)前所有數(shù)據(jù)庫別名
//查找subscriber是否存在,存在返回值為-1,不存在為非-1
if (strAlias.IndexOf(' Subscriber’) <> -1) then
begin
session.DeleteAlias(' Subscriber ');//刪除數(shù)據(jù)庫別名subscriber
session.SaveConfigFile; //保存
end;
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注