《基于cxGrid控件的通用数据库查询维护》由会员分享,可在线阅读,更多相关《基于cxGrid控件的通用数据库查询维护(16页珍藏版)》请在金锄头文库上搜索。
1、基于基于 cxGrid 控件的通用数据库查询维护控件的通用数据库查询维护实用第一智慧密集j 誊-i-基;cx 蛳逼舅豢嚣霹毒簟j 誊 i摘要:阐述基于 cxGrid 控件的通用数据库查询维护程序的设计方法和程序实现.并通过一个实例给出了程序代码.关键词:cxGrid 控件;数据库;通用;查询维护程序1 引言一个程序往往仅能对固定结构的若干数据表进行查询,然而,在工作过程中,一个单位会产生大量的业务数据,也会从上,下级和友邻单位接收部分数据,由于历史或其他客观原因,这些数据往往格式不同,并分别存放在不同的数据库系统或数据文件中,由于资金限制等原因,不可能为所有这些零散的数据开发相应的软件,以对这
2、些数据进行查询利用,对中小单位来说尤其如此.各种数据库系统厂商虽然提供了数据的通用查询工具,但往往仅能查看自身格式的数据库表,而且表头显示的是物理字段名,不能满足中文环境的特别需求,而且数据的可读性差,并不能满足用户的查询使用需要.如果有一个通用的,能够适应不同的用户和数据库系统,数据库表变化不影响程序运行,能够体现中文环境特点的数据库查询程序,将在一定程度上满足用户复杂的数据查询需求,提高数据的利用效率和经济效益 cxGrid 控件是 DeveloperExpress 公司出品的众多优秀的第三方控件之一.它是一个功能强大,表现丰富,风格多样,方便易用的数据展示控件,是开发数据查询展示软件的得
3、力工具.在此将探讨一种基于 exGrid 控件的通用数据库查询程序(以下简称“查询程序“)的设计方法和程序实现.2 设计指标与方法查询程序必须体现“通用“这一主要特点,并满足适应性,应用性,中文环境特点,定制查询,分类汇总等设计指标,下面是指标描述和相应的设计实现方法:(1)通用性要好.能够适应不同的业务领域的用户,不能仅针对某一种特定对象.能够适应目前各种主要的关系数据库,桌面数据库和常见格式的数据文件.方法:采用 OLEDB数据库连接文件“.Udl“和 TADOConneetion 控件,它能够实现与 OLEDB 支持的各种数据库和数据文件的灵活连接,允许用户手工设置和测试数据库连接.(2
4、)适应性要强.能够适应业务不断变化的需要,数据表增加,减少和结构变化时,只要及时更新相关数据表的内容,2010.13毫奠螺程技巧不影响程序的主要功能.方法:设置表名称表和表字段表,用户可以根据需要自行维护.运行时表格的表头根据数据表结构动态生成,数据库表的变化不影响程序的正常使用,使程序具有高度的灵活性和适应性.(3)要简单易用.通用程序面对的主要是非计算机专业用户,操作使用必须简单易用.方法:通过程序提供的初始化】功能创建表名称和表字段表.并自动提取和添加表名称和表字段信息,用户只须使用该程序配置好数据库连接并执行初始化即可查询自己的数据库.(4)要体现中文环境特点.要能够满足中文环境的特别
5、需求,表名字段名不管是中文还是英文字母,标名称和表头标题必须能显示为汉字,数据取自外键表代码的字段必须能显示代码的中文含义,使显示内容可读性好.方法:在表名称表中设置实际表名,显示表名和类别字段:在表字段表中设置字段中文名称字段,为每一个字段设置中文名.在表头自动产生时根据表字段表,提取并显示字段中文名:在表字段表中为每一个有外键的字段设置外键表名,外键字段名,外键含义字段名,当创建表头标列对象时,提取外键数据项;这是本程序涉及到的关键核心技术.用户只需在维护好表名称表和表字段表中的显示表名,字段中文名和外键信息,程序运行时就够很好地处理名称,代码的汉字化显示问题.(5)要支持定制查询.用户的
6、数据查询需求往往是不确定的,要满足这个特点,查询程序就必须提供定制查询功能.方法:利用 cxGrid 自带的过滤生成器,使用户可以根据需要设置查询和过滤条件.(6)要能分类汇总.在用户按某一字段进行分类时,其他数值型字段的数值要能够自动汇总.方法:当生成表头时,如果字段类型为数字就添加一个分类汇总项和页脚合计项,充分发挥 cxGrid 的自动分类汇总功能.3 程序设计与实现3.1 实验环境操作系统:WindowsXPProfessionalpack2.开发工具:Delphi7.0.数据库:Access2003;SQLServer;Oracle8.1.7.0LEDB 提供程序:Microsofl
7、Jet4.0OLEDBProvider,MicrosoftOLEDBProviderforSQLServer,OracleProviderforOLEDB.需安装的第三方控件:ExpressDBTreeSuite1.3.1,ExpressQuantumGridSuite5.0.3.2 数据表设计(1)表名称表该表存放数据表名称信息,包括:实际表名,显示表名,类别,备注等字段.(2)表字段表该表存放数据表字段信息,包括:表名称,字段名称,字段中文名称,外键表,外键字段,外键含义字段,备注等字段.上述两数据表在用户设置好数据库连接后,执行初始化功能时可自动创建.3.3 程序设计与代码实现通用数据库
8、查询程序示例程序名称为 TYCXXT.DPR,它包括数据模块(DdtaMod),主窗体模块(Mian),数据查询维护模块(SJCX),表名称维护模块(CXWH),表字段维护模块(ZDWH)等 5 个程序单元,数据模块和主窗体模块须预先创建,其他模块都在程序运行过程中动态创建.其中,表名称维护模块用来维护需要表名称表.使用户可以添加,删除表名称记录.以及修改数据表的中文名称和分类信息;表字段维护模块用来维护表字段表,用户可以添加,删除表字段记录,以及修改字段的中文名称,外键表,外键字段和外键含义字段等信息;由于这两个模块技术实现简单,不再赘述,重点介绍数据模块,主窗体,数据查询 3 个模块的界面
9、设计与关键程序代码实现.3.3.1 数据模块(DataMod)数据模块主要存放 ADO 数据库连接和各模块用到的所有数据集控件.该模块的主要控件包括:数据库连接控件 MyConn,其 ConnectionString 设置为:“FILENAME=DBCONN.udl“,该连接指向程序所在目录的“dbdemos.mdb“数据库:AdoTable 控件 BMCB,BZDB 分别指向标名称表和表字段表:公用 AdoQuery 控件数据集 GQuery,GQueryl,GQuery2 和图 1 数据模块设计窗口GQuery3.所有的数据集的 Connection 属性均设置为“MyConn“.图 1
10、是数据模块设计时窗口,数据模块中没有任何时事件和过程,其代码从略.3.3I2 主窗体(Main)模块该模块是程序的主界面,表单上只有一个 MainMenul 菜单控件,包括连接设置,初始化,表名维护,字段维护,数据查询和退出等菜单项,分别为各个相应模块和过程提供访问人口.图 2 是主程序模块的设计窗口.图 2 主窗体模块设计窗口主窗体模块的关键程序代码如下:/【初始化】菜单的 Click 事件procedureTMainFrm.N7ClickSender:TObject);varMyTabList:TStringList;/声明保存表名称的字符串列表j,j:lnteger:begin/若不执行
11、初始化化就跳出过程ifApplication.MessageBox(确定要删除并重建表名称表和表字段表吗?,警告,MBOKCANCEL)IDOKthenexit;DataModFrm.MyConn.Close;/提取表名称列表MyTabList:=TStnngList.Create;DataModFrm.MyConn.GetTableNames(MyTabList,False);/删除表名称表tryDataModFrm.GQuery1.Close;DataModFrm.GQuery1.SQL.text:=DROPTABLE 表名称表:DataModFrm.GQueryt.ExecSQL;exc
12、eptend;NtTI建表名称表DataMOdFrm.GQuery1.Close;DataModFrm.GQuery1.SQL.text:=CREATETABLE 表名称表(实际表名 VARCHAR(100),显示表名 VARCHAR(100).类别VARCHAR(20),备注 VARCHAR(200),PRIMARYKEY(实际表名:DataModFrm.GQuery1.ExecSQL:-鳙目x%目实用第一智慧密集./删除表字段表tryDa 伯 M0dFrm.GQuery1.Close;DataModFrm.GQuery1.SQLtext:=DROPTABLE 表字段表:DataModFrm
13、GQuery1.ExecSQLIexceptend:/仓 U 建表字段表DataModFrm.GQuery1.Close;DataModFrm.GQueryl1.SQL.text:=CREATETABLE 表字段表(表名称 VARCHAR(10O)字段名称 VARCHAR(40),字段中文名称 VARCHAR40),外键表 VARCHAR(100),外键字段 VARCHAR(40),外键含义字段 VARCHAR(40),备注 VARCHARj200),PRIMARYKEY(表名称,字段名称“.DataModFrm.GQuery1.ExecSQL;/用一个将表名称并添加到表名称表DataModF
14、rm.BMCB.Open;fori:OtoMyTabList.Count-1dobeginifnotDataIModFrm.BMCB.Locate实际表名,MyTabList.Stringsi,)thenbeginDataModFrm.BMCB.Append;DataModFrm.BMCB.FieIdBVName(实际表名,)_AsString:=MyTabList.Stringsi;DataModFrm.BMCBFieldByName(显示表名).AsString:=MyTabList.String:DataModFrm.BMCBPost,enGencI/用两层循环将字段名称添加到表字段表中
15、DataModFFm.BZDBOpen:fori:=0toMyTabList.Count-1dobegin【DataModFrm.GQueryClose;DataModFrm,GQuery.SQLText:=selectfrom4-MyTabList.Strings1】十where1=2;DataModFrm.GQuery.Open:fof:=OtoDataModFrm.GQuery.FieldCount-1dolbeginlfnOtDataModFrm.BZDB.Locate 表名称:字段名称,VarArrayOf(MyTabList.StringsliDataModFrm.GQuery.F
16、ields【j】_FieldName】),I1)thenbeginDataModFrm.BZDB.Append:DataModFrm.BZDBFieldByNamel 表名称,),AsString:=MyTabList.StringsiiDataModFrm.BZDB.FieldByName字段名称,)_AsString=DataModFrm.GQuen,.Fieldsj.FeldName【DataModFrm.BZDB.FieIdByName字段中文名称).AsString:=DataModFrmGQUery.FieldS【j1.FieldName,-DataModFfm.BZDB.Post;end;end;end:MyTabList.Free;13技巧与Application.MessageBox(初始化完毕,已经重建表名称表和表字段表,提示,O):end;3.3.3 查询维护(SJCX)模块数据查询维护模块提供当对数据库所有数据