?? 060805_05.htm
字號:
<html>
<head>
<link REL="stylesheet" HREF="/style.css" TYPE="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>計算機世界日報:
怎樣在TDataset中漢英混用
</title>
<!--***********-->
</head>
<body bgcolor="#FFFFFF" >
<p><br>
<font color="#b904e8"><b><em><a href="class.htm">返回</a></em></b></font>
<center>
<font color="#0000c0"><h2>
怎樣在TDataset中漢英混用
</h2></font>
<h3>
云南昆明市江岸三期一組團
<br>吳中衛
</h3>
</center>
<p><font color="#ffffff">----</font>
我們知道,在 TDataset 控件中,字段名是可以用中文的,不過在實際編程時往往中文字段不比英文字段顯得方便,相反出錯的幾率到是很高的。而針對客戶或是制成實用(商品化)的軟件,沒有了中文表達,沒有了適合本國國情特色 的界面,該軟件又是不成功的。如果 TDataSet 能提供這樣一種轉換功能,即內部是英文字段,而呈現給用戶的是中文界面,不僅查找、搜索對用戶來說容易、簡單而且大大簡化了開發者的編程難度,那么這樣的屬性(功能)應該是大受歡迎的。
<p><font color="#ffffff">----</font>
實現這樣的轉換可以有好幾種方法。
<p><font color="#ffffff">----</font>
一種是靜態轉換。所謂靜態,即是在設計字段或制作表頭時,修改其相關Lebel 或 DisplayLabel。無論該字段是否引用或參照別的字段,一旦形成可執行的組件對象,這中形式也就隨之固定下來。到了實際運行時,這時的形式也可以滿足一般的需求。但是這種形式不具備伸縮性,也不具備可擴充性。
<p><font color="#ffffff">----</font>
另一種是動態修改。我們從 TTable 控件得知,Fields 屬性是該 Table 的字段屬性,而其每一字段的 DisplayLabel 屬性是在運行時可以改動的。利用這一點,我門可以制作一個通用的作用于 TDataSet 的控件,使其具有數據感知功能,在數據庫加載時替我們做這個動態轉換。至于控件對象選用 TDataset 而不選用 Table(TQuery)是出于移植性的考慮。
<p><font color="#ffffff">----</font>
下面說一說其工作原理。
<p><font color="#ffffff">----</font>
當一 Delphi 的執行程序加載到內存當中時,它首先是完成各成員對象的初始化即完成 Load 事件,然后才根據需要執行各組件的 Create,對于繼承自 TDataSet的TTable、TQuery 等也不例外。我們關心的是 Form 的 Close事件和 TTDataSet 的 Open 和 Close 事件,當我們連結(HOOK)到這些對象的Notify事件,也就具備了被事件驅動(喚醒)的功能。SetEnevts 和 RestoreEvents 這兩個過程是起到在Load(裝載)時設置主單元 Form和 TDataSet 的OPen和Close 事件,在關閉(主單元或數據庫)時,恢復其原來的事件。GetForm 為獲取主單元的窗體的過程。IniFileName 為保存有字段中英文對照表的 INI 文件。
<p><font color="#ffffff">----</font>
其格式如下:
<pre>
[DEFAULT] ; 設置為缺省庫
RKSJ=入庫時間 ;字段名 RKSJ 中文: 入庫時間
DJ=單價 ;字段名 DJ 中文:單價
YS=顏色 ;字段名 YS 中文:顏色
BZ=備注 ;字段名 BZ 中文:備注
[DEFAULT_SIZE] ;缺省庫字段長度
RKSJ=12 ;字段 RKSJ 顯示長度為 12
DJ=8 ;字段 DJ 顯示長度為 8
YS=10 ;字段 YS 顯示長度為 10
BZ=40 ;字段 BZ 顯示長度為 40
</pre>
<p><font color="#ffffff">----</font>
IniSection 指定該庫(TTable,TQuery) 位于 IniFileName 的哪一區。我們看到在 Load 這個重載過程中,有一個Loading 的變量,它是為了防止在構建Form或DataMoudle時加載了SetEvents, 而我們的目的是在運行時設置,而不是在 Delphi的集成環境里進行 Form 的設計時。在 Save 的過程中,IniFileName 的存取位置在該執行程序的目錄下,Save 過程分為兩部分進行。
<p><font color="#ffffff">----</font>
當用戶指定了IniSection 時,對于本 FDataSet 的字段都將放在指定的 IniSection 區中, 期間對以前的任何數據不作保留。
<p><font color="#ffffff">----</font>
當用戶沒有指定 Inisection 時,FDataSet 的字段都將放在 Default(缺省)區中,此時對保存的 FDataSet 字段做進一步的更新處理。
<p><font color="#ffffff">----</font>
原程序可<a href="060805-05.zip">下載</a> Zip 2KB
<p><font color="#ffffff">----</font>
該單元在 Delphi 3.1、Delphi 4.1 下編譯通過。
<p align="right"><small><em>中國計算機世界出版服務公司版權所有</em></small>
<br>
</p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -