?? delp023.html
字號:
<html><!-- #BeginTemplate "/Templates/delphi.dwt" --><head><!-- #BeginEditable "doctitle" --> <title>獨孤之所 - Delphi中數據文件路徑的管理</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><meta NAME="author" VALUE="獨孤求敗(Fwolf)"><!-- #EndEditable --> <style type="text/css"><!--body { font-family: "宋體"; font-size: 9pt}td { font-family: "宋體"; font-size: 9pt}a:hover { text-decoration: underline}a { text-decoration: none}input { font-family: "宋體"; font-size: 9pt}select { font-family: "宋體"; font-size: 9pt}--></style></head><body><table width="98%" border="0" align="center"> <tr> <td width="33%"><a href="../../../index.html"><img src="../../../logos/fwolf9.gif" width="271" height="60" alt="獨孤之所首頁" border="0"></a></td> <td width="67%"> <div align="center"> </div> </td> </tr></table><table width="100%" border="0" align="center" cellspacing="1" bgcolor="#66FF66"> <tr> <td width="90%"><a href="../../../index2.html">獨孤之所</a> > <a href="../../book.htm">天下文章</a> > <a href="../delphi.html">Delphi</a> > <font color="#FF3333"><!-- #BeginEditable "2%C7%F8" -->Delphi中數據文件路徑的管理<!-- #EndEditable --></font> </td> <td width="10%"> <div align="center"><a href="javascript:window.close()">[關閉窗口]</a></div> </td> </tr></table><hr size="1"><br><table width="584" border="0" align="center" cellspacing="1"> <tr> <td width="582"> <font color="#FF3333"> <div align="center"><!-- #BeginEditable "%B1%EA%CC%E2" -->Delphi中數據文件路徑的管理<!-- #EndEditable --></div> </font> </td> </tr> <tr> <td width="582"> <div align="center"><!-- #BeginEditable "%D7%F7%D5%DF" --><!-- #EndEditable --></div> </td> </tr> <tr> <td width="582"><!-- #BeginEditable "%CE%C4%B1%BE%C7%F8" --> <center> <p align="left">Delphi中的Table控件(Component)和Query控件都有一個DatabaseName屬性。可以用DatabaseName屬性來指定該控件所引用的數據表的路徑。有兩種方法可以為屬性DatabaseName設置路徑:第一種方法是直接輸入數據表所在路徑,另一種方法是使用數據庫別名(Alias)。在Delphi中,數據庫別名是在數據庫引擎(BDE)中建立的,一個別名對應一個文件路徑。可以這樣為別名下定義:別名是對文件路徑的映射,是文件路徑的簡稱。因此,在屬性DatabaseName中使用數據庫別名和使用文件路徑實質都是一樣的,它們都作為查找數據表的根(Root)路徑。但是,在數據庫應用程序的設計中,如果涉及到的Table控件和Query控件比較多的話,那么使用別名來引用文件路徑就十分高效、方便,并且不容易出差錯。原因是顯而易見的:一方面,別名可以在列表中直接選取而不必像文件路徑那樣從鍵盤上輸入;另一方面,別名可以設置得很簡短,即使從鍵盤錄入也比較快捷。因此,筆者建議要多使用數據庫別名而少使用文件路徑。 <br> <br> 另外,在Table控件的屬性TableName和Query控件的SQL語句中,都可以包含數據表的路徑信息。因為Query控件和Table控件的情況十分相似,所以下面只對Table控件進行說明。這種路徑信息既可以是一個完整的路徑,也可以是一個完整路徑的后面部分。比如對Table控件的屬性TableName賦值時,可以把C:\Delphi\Demos\Data\CustomerDB賦給它,也可以把Data\CustomerDB賦給它。 <br> <br> 在實際應用中,我們可以把Table控件的屬性DatabaseName和屬性TableName結合起來使用。把屬性DatabaseName中的路徑作為根路徑,把屬性TableName中的不完整路徑(如果有的話)作為子路徑。把這兩個路徑結合起來就是訪問到數據表的一個完整的路徑。比如,假設在路徑C:\Delphi\Demos\Data下存在數據表CustomerDB,把Table控件的屬性DatabaseName指定為C:\Delphi\Demos\Data,然后把屬性TableName指定為CustomerDB,就可以訪問數據表CustomerDB了。如果屬性DatabaseName指定為C:\Delphi\Demos,要想訪問數據表CustomerDB,只要把屬性TableName指定為data\CustomerDB就行了。有時候這二者并不同時起作用。例如,如果屬性TableName中包括了完整的路徑,那么屬性DatabaseName中的路徑就不起任何作用了。又如,如果屬性DatabaseName中沒有指定任何路徑,而屬性TableName中的路徑又是不完整的,如Data\CustomerDB,那么應用程序運行時的當前路徑就作為根路徑。為了便于程序移植,筆者有兩點建議: <br> 1、通常,只需要在屬性DatabaseName中指定數據表的路徑,而在屬性TableName中不必包括路徑信息。 <br> 2、一般情況下,不要在屬性TableName中指定完整的路徑。 <br> <br> 下面就來介紹一下如何提高數據庫應用程序的移植性。 <br> 數據庫應用程序的移植是一個重要的問題。因為在數據庫應用程序中要訪問數據庫或數據表,就要涉及到數據文件的路徑。一般來說,數據庫應用程序開發完成后要移植到其它機器上使用,因此數據庫應用程序運行時的數據文件的路徑很可能和開發時的不同。所以必須對數據文件的路徑進行有效的管理,以便于系統的移植。下面介紹三種管理數據文件路徑的方法。 <br> 1、把數據文件建立在應用程序所在目錄的子目錄下。具體過程為: <br> (1)為了設計起來方便,在設計時可以使用數據庫別名,且該數據庫別名指向應用程序所在路徑。把子路徑名加上數據表名字之后賦給Table控件的屬性TableName。 <br> ?。?)在發行應用程序前,把所有的Table控件或Query控件的屬性Active都置為False,刪除屬性DatabaseName中的所有字符(即置空)。 <br> 在缺省情況下,應用程序運行時的當前目錄是應用程序所在的目錄。如果在應用程序中沒有調用ChDir等過程改變當前目錄的話,那么就不必執行第三步,否則進行第三步的處理。 <br> (3)在使用到Table控件和/或Query控件的窗體的創建(OnCreate)事件中,把應用程序所在路徑賦給該窗體中的每一個Table控件和Query控件。具體的形式如下所示: <br> Table對象(或Query對象)?DatabaseName:=ExtractFilePath(Application?ExeName); <br> <br> 2、利用配置文件存放數據庫路徑 <br> 此方法是在應用系統安裝或第一次運行時把數據庫路徑信息寫入配置文件,以后運行時把路徑信息從配置文件中讀出。配置文件的讀寫利用類TIniFile(Delphi1.0和Delphi3.0)、類TRegIniFile(Delphi 3.0/4.0)和類TRegistry(Delphi3.0/4.0)所提供的方法來實現。各個方法具體的用法請查閱Delphi聯機幫助。本方法的基本思路為: <br> (1)為了設計方便,在設計時可以使用數據庫別名。 <br> ?。?)同1的步驟(2),但必須進行第三步的處理。 <br> (3)同1的步驟(3)類似。即,在窗體的創建事件中把數據庫路徑賦給該窗體中的每一個Table控件和Query控件,用形式化語言描述如下: <br> Table對象(或Query對象)?DatabaseName:=配置文件記錄中的數據庫路徑。 <br> <br> 3、利用數據庫別名存放數據庫路徑 <br> 在設計時使用數據庫別名。在應用系統安裝或第一次運行時利用系統對象Session在BDE中建立與設計時相同的別名,使別名指向相應的數據庫路徑。下面的代碼說明了如何建立名字為“FDB”的別名,它的數據庫路徑為d:\test,數據庫類型為Paradox。 <br> Session.ConfigMode:=cmAll; <br> Session.AddStandardAlias(′FDB′,′d:\test′,′PARADOX′); <br> Session.SaveConfigFile; {保存新建立的別名} <br> <br> 注:在Delphi1.0中Session對象不具有第三種方法中所用到的屬性和方法。以上三行代碼在Delphi3.0/4.0下調試通過。 <br> <br> 從上面的討論可以看出,方法三實現起來最簡單,其次是方法一,最后是方法二。筆者認為,如果應用系統是用Delphi3.0/4.0開發的,那么應盡量使用方法三。 <div align=right></div> </center> <!-- #EndEditable --></td> </tr> <tr> <td width="582"><!-- #BeginEditable "%B1%B8%D7%A2" --><!-- #EndEditable --></td> </tr></table><br><hr size="1"><table width="25%" border="1" align="center" cellspacing="0" cellpadding="0" bordercolorlight="#CCCCFF" bordercolordark="#000033" bordercolor="#6666FF"> <tr align="center"> <td> 轉載請注明出于 <a href="http://fwolf.yeah.net" target="_blank">獨孤之所</a><!--Fwolf出品fwolf001@163.nethttp://fwolf.yeah.net --> </td> </tr> <tr align="center"> <td> <script>document.write("<a href=http://www.topcn.com/siteinfo.asp?UserName=fwolf2000&SiteType=0 target=_blank><img src=http://www1.topcn.com:8081/statistics.asp?fwolf2000&referURL="+escape(top.document.referrer)+"&curURL="+escape(top.document.URL)+"&imgStyle=0"+" border=0 alt='Top中文網站龍虎榜' ></a>");</script> <script>document.write("<a href=http://www.textclick.com/viewmain.asp?name=fwolf2000 target=_blank><img src=http://ad.t2t2.com/stat.asp?user=fwolf2000&refer="+escape(document.referrer)+"&cur="+escape(document.URL)+" alt=太極統計 border=0></a>");</script> </td> </tr></table><table width="100%" border="0" align="center" cellspacing="1" bgcolor="#66FF66"> <tr> <td width="10%"><a href="javascript:window.close()">[關閉窗口]</a></td> <td width="90%"> <div align="left"></div> </td> </tr></table><div id="Layer1" style="position:absolute; width:470px; height:60; z-index:1; left: 293px; top: 13px; overflow: hidden"> <table width="100%" border="0" cellspacing="0" cellpadding="0" height="60"> <tr> <td><a href="http://202.99.67.100/adclick2/click/random.cgi?job=go&id=1490" target="_blank"><img src="http://202.99.67.100/adclick2/click/random.cgi?id=1490" border="0" width="468" height="60"></a> </td> </tr> </table></div><div align="center"></div><p align="center"> <script language="JavaScript1.1" src=http://ad.t2t2.com/textclick.asp?user=fwolf&style=4&bkcolor=no></script></p><p align="center"> </p></body><!-- #EndTemplate --></html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -