📄 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 + -