![]() |
|
||||||||||||||
| | 网站首页 | 数据库教程 | web编程 | 服务器 | 程序设计 | | ||
|
||
|
||||||
| Delphi中统一显示表格字段名的高效方法 | ||||||
作者:佚名 文章来源:不详 点击数: 更新时间:2007-9-12 ![]() |
||||||
|
问题描述:在开发数据库程序时,我们经常要使用很多的表格显示组件DBGrid。 我们在MS SQL Server 2000 中有一表,其结构如下: CREATE TABLE [Employees] ( [EmployeesID] [varchar] (6) NOT NULL , [EmployeesName] [varchar] (16) NOT NULL , [Sex] [char] (2) NULL , [Password] [varchar] (32) NULL , [Address] [varchar] (100) NULL , [Tel1] [varchar] (13) NULL , [Tel2] [varchar] (13) NULL , [Birthday] [datetime] NULL , [HireDate] [datetime] NULL , [LeaveDate] [datetime] NULL , [Notes] [varchar] (200) NULL , [CreateDate] [datetime] NOT NULL, [CreateMan] [varchar] (6) NOT NULL , [ModifyDate] [datetime] NOT NULL, [ModifyMan] [varchar] (6) NOT NULL , ) 该表拥有众多的字段,如果由Delphi开发的前台程序要使用该表在DBGrid显示,则我们必须依次修改字段的DisplayLable属性。 我们在数据库中创建一个辅助表,结构如下: CREATE TABLE [ColumnName] ( [ColumnName] [varchar] (20) PRIMARY KEY , [ChineseName] [varchar] (20) NULL , CONSTRAINT [PK_CN_CN] CLUSTERED ) 该表专门收集该数据库中所有视图和表格的英文字段标题和对应的中文标题。我们在MS SQL Server 2000中创建一个存储过程将所有表和视图的字段插入该表。该存储过程程序如下: /*将本数据库中的表和视图的字段名插入ColumnName表中*/ CREATE PROCEDURE pInsertColumnName AS INSERT INTO ColumnName (ColumnName) SELECT TableColumns FROM ( SELECT DISTINCT c.name AS TableColumns FROM dbo.sysobjects o FULL OUTER JOIN dbo.syscolumns c ON o.id = c.id WHERE (o.xtype = 'U' OR o.xtype = 'V') AND (o.name <> 'dtproperties') AND (o.name <> 'sysconstraints') AND (o.name <> 'syssegments') )as tc WHERE TableColumns NOT IN (SELECT ColumnName FROM ColumnName) 执行该存储过程,然后在表ColumnName中依次输入每个字段对应的中文标题。 我们知道,ADOQuery有Fields的属性,Fields又有FieldName的属性。FieldName即该字段的字段名。通过该FieldName我们就可以到ColumnName表中找到他对应的[ChineseName]。打开Delphi,在Delphi中创建一个过程,通过循环结构实现将每个字段的DisplayLable属性改成对应的[ChineseName]: {设置表格头,其中参数ADOQuery为临时表,用于获取[ChineseName],参数ADOQueryMain为要修改字段标题的TADOQuery } Procedure SetFieldsDisplayName(ADOQuery:TADOQuery;var ADOQueryMain:TADOQuery); var i: integer; begin with ADOQuery do begin Close; SQL.Clear; SQL.Add('SELECT ColumnName, ChineseName FROM ColumnName'); Open; end; try //循环遍历每个字段 for i := 0 to ADOQueryMain.FieldCount - 1 do ADOQueryMain.FieldByName(ADOQueryMain.Fields[i].FieldName).DisplayLabel := ADOQuery.Lookup('ColumnName', ADOQueryMain.Fields[i].FieldName, 'ChineseName') except Exit; end; end; 当query1组件要以中文显示每个字段头时我们在query1的AfterOpen事件中加入上面函数的调用: SetFieldsDisplayName(qyTemp,query1); 这样就可实现一次性设置表格头。当我们运行程序再次看到DBGrid时,所有字段都成了对应当中文标题了。 该方法非常适合于使用表格很多而字段名重复性高的程序,它不但免去了开发时每次使用要设置DisplayLable的繁琐操作,更有一个重要的优点是,它避免了同一字段在不同地方因为程序员粗心使用不同的DisplayLable显示的现象。如需更改某个字段的中文标题只要到ColumnName表中更改该字段对应当[ChineseName]就行了。 该方法是不是很好呢? 王伟internetroot@hotmail.com 本文来源:http://blog.csdn.net/Internetroot/archive/2007/09/03/1770853.aspx
|
||||||
| 文章录入:admin 责任编辑:admin | ||||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | ||||||
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 网站地图 | 管理登录 | | |||
|