怎样在TDataset中汉英混用

2008-04-09 04:17:46来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

我们知道,在 TDataset 控件中,字段名是可以用中文的,不过在实际编程时往往中文字段不比英文字段显得方便,相反出错的几率到是很高的。而针对客户或是制成实用(商品化)的软件,没有了中文表达,没有了适合本国国情特色 的界面,该软件又是不成功的。如果 TDataSet 能提供这样一种转换功能,即内部是英文字段,而呈现给用户的是中文界面,不仅查找、搜索对用户来说容易、简单而且大大简化了开发者的编程难度,那么这样的属性(功能)应该是大受欢迎的。

实现这样的转换可以有好几种方法。

一种是静态转换。所谓静态,即是在设计字段或制作表头时,修改其相关Lebel 或 DisplayLabel。无论该字段是否引用或参照别的字段,一旦形成可执行的组件对象,这中形式也就随之固定下来。到了实际运行时,这时的形式也可以满足一般的需求。但是这种形式不具备伸缩性,也不具备可扩充性。

另一种是动态修改。我们从 TTable 控件得知,Fields 属性是该 Table 的字段属性,而其每一字段的 DisplayLabel 属性是在运行时可以改动的。利用这一点,我门可以制作一个通用的作用于 TDataSet 的控件,使其具有数据感知功能,在数据库加载时替我们做这个动态转换。至于控件对象选用 TDataset 而不选用 Table(TQuery)是出于移植性的考虑。

下面说一说其工作原理。

当一 Delphi 的执行程序加载到内存当中时,它首先是完成各成员对象的初始化即完成 Load 事件,然后才根据需要执行各组件的 Create,对于继承自 TDataSet的TTable、TQuery 等也不例外。我们关心的是 Form 的 Close事件和 TTDataSet 的 Open 和 Close 事件,当我们连结(HOOK)到这些对象的Notify事件,也就具备了被事件驱动(唤醒)的功能。SetEnevts 和 RestoreEvents 这两个过程是起到在Load(装载)时设置主单元 Form和 TDataSet 的OPen和Close 事件,在关闭(主单元或数据库)时,恢复其原来的事件。GetForm 为获取主单元的窗体的过程。IniFileName 为保存有字段中英文对照表的 INI 文件。

其格式如下:

 [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 

IniSection 指定该库(TTable,TQuery) 位于 IniFileName 的哪一区。我们看到在 Load 这个重载过程中,有一个Loading 的变量,它是为了防止在构建Form或DataMoudle时加载了SetEvents, 而我们的目的是在运行时设置,而不是在 Delphi的集成环境里进行 Form 的设计时。在 Save 的过程中,IniFileName 的存取位置在该执行程序的目录下,Save 过程分为两部分进行。

当用户指定了IniSection 时,对于本 FDataSet 的字段都将放在指定的 IniSection 区中, 期间对以前的任何数据不作保留。

当用户没有指定 Inisection 时,FDataSet 的字段都将放在 Default(缺省)区中,此时对保存的 FDataSet 字段做进一步的更新处理。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:用Delphi实现网络驱动器的映射和断开

下一篇:Delphi4.0系统提示信息的汉化