如何在Delphi中实现错综复杂的复合查询

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:prince262
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:本文详细介绍了在Delphi中,如何对数据库中的数据错综复杂的复合查询。
  关键词: Delphi;复合查询
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)04-10899-02
  
  1 引言
  在编写有关数据库管理系统时,设计单一的数据查询很容易,但要实现多功能的复合查询就需要费一点周折。本人在编写企业安全管理系统时实现了较为复杂的查询功能;在此拿出来与大家共同探讨。系统的前台环境为Delphi6.0,后台数据库单机版不做限制,网络版采用SQL Server2000,这里以Microsoft Access数据库为例做简单介绍。
  
  2 设计思想
  要实现错综复杂的复合查询,只要能够动态生成合法的SQL查询语句即可。换句话说,就是要动态的得到要显示的字段和查询的条件,然后再把取得的要显示的字段和待查询的条件组合成合法的SQL语句送往数据库执行查询。
  
  3 实现方法
  3.1 数据库
  表字段名最好用英文,这是因为Delphi对中文字段名支持的不是很好。
  3.2 本程序所用到的控件的属性(略)
  3.3 编码
  (1)在窗体Picture_Zoom的Public部分定义如下全局变量:
  
  (2)在窗体Pictue_Zoom的FormShow事件中编写如下代码:
  procedure Tcar_Date_Complex_Query.BitBtn7Click(Sender: Tobject);
  beginwhile Listbox2.Items.Count>0 do
  beginListbox2.Items.Delete(0); end;
  bitbtn7.Enabled :=false;move :='true';query :='false';end;
  (7)在Bitbt6的Click事件编写如下代码(负责组合SQL语句,最后执行查询命令):
  procedure Tcar_Date_Complex_Query.BitBtn6Click(Sender: Tobject);
  var str1,str2,str3 :string;var ldh :integer;
  beginstr1 :=''; str2 :='';str3 :='';Exist_No_No :='false';
  if (listbox2.Items.Count=0) and (listbox4.Items.Count<>0) then
  beginquery :='true';end;
  if (query ='true') and (listbox4.Items.Count<>0) then
  begin for ldh :=0 to listbox4.Items.Count-1 do
  begin Exist_No_No:='true'; end;
  if (group_by ='true') and (Listbox4.items[ldh] ='number') then
  begin exist_number :='true';end
  elsebegin
  if str1<>'' then
  beginstr1 :=str1+','+Listbox4.items[ldh];end
  elsebegin str1 :=Listbox4.items[ldh]; end;
  for ldh :=0 to listbox2.Items.Count-1 do
  begin Listbox2.items[ldh] :=Car_Date_CdataFieldToEDataField(Listbox2.items[ldh]);
  if ldh=0 thenbeginstr2 :=' where '; end;
  if ldh  beginstr2 :=str2+ChineseExpressionToEnglishExpression(Listbox2.items[ldh])+' '; end
  else beginstr2:=str2+ChineseExpressionToEnglishExpression(Listbox2.items[ldh]); end; if (group_by ='false') or (exist_number ='false') then
  beginstr :='select '+str1+' from '+tablename+str2;end
  else begin
  if (listbox4.Items.Count =1) and (listbox4.Items[0] ='number') then
  begin str1 :='number'; str :='select '+str1+' from '+tablename+str2;end
  if group_by ='true' then
  begin str :='select '+str1+',count('+Car_Date_CdataFieldToEDataField(Listbox4.items[0])+') as 数量'+str3+' from '+tablename+str2+' group by '+str1; end;
  DataModule23.cnjdcldazldjb_query_ADODataSet.active:= false;
  DataModule23.cnjdcldazldjb_query_ADODataSet.active:= true; BitBtn10.Click; end
  end; end;
  (8)在Bitbt12的Click事件编写如下代码:
  procedure Tcar_Date_Complex_Query.BitBtn12Click(Sender: Tobject);
  var I :integer;
  beginCar_Date_Report_Forms :=Tcar_Date_Report_Forms.Create(Application); with Car_Date_Report_Forms do
  begin
  if DataModule23.cnjdcldazldjb_query_ADODataSet.Eof =false then
  begin QRDBText1.DataField:='';QRDBText2.DataField:='';QRDBText3.DataField :='';
  QuickRep1.DataSet :=DataModule23.cnjdcldazldjb_query_ADODataSet;
  for I :=0 to DBGrid1.Columns.Count – 1do
  begin if DBGrid1.Columns[I].Title.Caption ='车辆编号' then
  beginQRDBText1.Enabled :=true; QRDBText1.DataField :='Car_No'; end
  else if DBGrid1.Columns[I].Title.Caption ='车辆种类' then
  beginQRDBText4.Enabled :=true; QRDBText4.DataField :='Car_Kind';end
  else if DBGrid1.Columns[I].Title.Caption ='厂牌' then
  beginQRDBText5.Enabled :=true;QRDBText5.DataField :='Manufacturer_License_Plate'; end
  else if DBGrid1.Columns[I].Title.Caption ='燃油种类' then
  beginQRDBText9.Enabled :=true; QRDBText9.DataField :='Fuel_Style'; end
  else if DBGrid1.Columns[I].Title.Caption ='发动机型号' then
  begin QRDBText10.Enabled :=true; QRDBText10.DataField :='Engine_Style';end
  elsebeginmessagedlg('没有查到数据,您不能打印!!!',mtError,[mbok],0);end;
  end;end;
  (9)在Bitbt8的Click事件编写如下代码(关闭程序):
  procedure Tcar_Date_Complex_Query.BitBtn8Click(Sender: Tobject);
  begin Close; end;
  
  4 结束语
  查询在数据库管理系统中是非常重要的功能,如何实现快速、高效、功能强大的查询,是编程人员必须认真考虑的重点。本文所述功能,基本能满足用户任意组合查询条件,得到查询结果。
  参考文献:
  [1]只飞.Delphi数据库开发指南[M].北京希望电子出版社,2003年3月第1版.
  [2]陈豫龙.Delphi数据库系统开发实例导航[M].人民邮电出版社出版,2002年3月第1版.
  本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
虽然日前发布的QQ2007 Beta1并没有如用户所期待的那样采用全新的内核,除去可有可无的新皮肤外,这个版本还是“百尺竿头更进一步”,依然增加了一些非常实用的新功能。这里简单介绍一下:    新功能之一:QQ医生    “盗号”始终是困扰广大QQ用户的一个重大问题,不过现在你可以开始放宽心了,因为QQ2007 Beta1新增加了登录时使用QQ医生进行安全检查的功能。如图1所示,这里除了可以使用软
期刊
目前,网上一切都充满了个性,如头像、签名等等。和朋友们邮件来往,放在博客或论坛中的邮箱地址,单调乏味而又不能吸引别人的注意,咱也得想个办法给邮址改头换面,让自己Email Logo不再是单调的文字。其实,只要登录“个性E-mail DIY!”网站,就能轻松制作出个性E-mail Logo,而且还能加入博客中,彰显个人品位。制作方法如下:  1.登录E-mail Logo制作网站(http://bl
期刊
对于大学生而言,过外语四级、六级是最基本的能力考核,但往往需要付出很多努力,其中包括购买外语书籍和外语听力磁带,这可能要花费我们不少购买成本,其实,如果你有一款MP3或MP4随身听的话,可以借用别人的外语听力磁带,将其转录到电脑里,然后传输到随身听里欣赏,打造一台即能听歌、看电影,又能练习英语听力的学习机。    1前期准备    由于许多学生以前的听力材料都是采用普通的录音磁带,并且目前各书店的
期刊
摘要:我国现行的义务教育阶段学生学籍管理制度,不能适应近年来人口流动增加的实际情况。地区与地区之间缺乏必要的衔接,不同系统间的信息交换也没有统一的标准,造成当前电子学籍系统陷入“信息孤岛”的泥潭。B/S下基于.NET的国家义务教育管理系统,实现了省际信息共享,解决了学生跨省流动的难题。  关键词:信息孤岛;.NET;CLR;进程对;B/S;瘦客户端  中图分类号:TP311.5 文献标识码:A文章
期刊
BBS已经成为互联网上应用最为广泛的服务之一,它提供了众多的“公共”空间供用户进行讨论和交流,许多建立在BBS上的虚拟社区也已成为网民们流连忘返的家园。通常,我们都是通过网页浏览器访问网站后登录BBS的,但如果经常到多个BBS上“灌水”的话,要记住这些BBS的地址和登录不同的网站就显得有点烦琐。Cterm可以让我们更加轻松快捷地逛遍自己喜欢的BBS。  Cterm3.26是Clever Termi
期刊
使用数码相机摄影,不但可以即拍即得,随时预览和删除,还可以方便地导入电脑中,进行各种修饰、美化和艺术处理,让每一个人都可以体验“数字暗房”技术,这就是数码摄影的魅力所在!谈到数码相片后期处理软件,绝大部分人都会想到Photoshop。是的,毫无疑问,Photoshop是平面处理软件中的龙头老大,但我们大多数人不能熟练地应用Photoshop去做后期处理,因为专业要求高,难度大,操作比较复杂。形象地
期刊
摘要:SOX法案的实施对IT部门的规范化管理提出了直接的要求。本文阐述了SOX法案对IT部门的审计要求,对IT部门应如何应对这一挑战,整合IT资源,规范IT流程,提高核心竞争力做了一些探讨性分析。为国内企业IT的运营维护提供了一种思路。  关键词:审计;SOX;整合;流程管理  中图分类号:TP3文献标识码:A 文章编号:1009-3044(2007)04-10924-02    1 引言  由于
期刊
《战火》第一章“红色警戒”融入了RTS游戏的经典元素,强调策略、发展、配合等战斗中必不可少的关键环节,同时充分发挥了网游的互动性。《战火:红色警戒》中的任务,不仅从细微之处让人切身感受到自己正通过磨练不断地成长,也让每个人感受着这个处在遥远星系中的世界是如此真实。    初级主线任务    一、新人报道  1.找到新兵训练官“卡尔”  2.然后选择新手奖励    二、新手挑战  1.找新兵训练官“
期刊
摘要:基于ADO.Net以非连接环境方式访问数据库的Asp.Net应用程序中,DataGrid是比较常用的数据处理控件。本文主要对DataGrid如何实现数据库的更新、删除和插入操作进行了论述.  关键词:ADO.Net;非连接环境;ASP.Net;DataGrid;数据处理  中图分类号:TP274文献标识码:A文章编号:1009-3044(2007)04-10898-01    1 DataG
期刊
笔者是非常喜欢汽车的,相信各位男性朋友中的大部分都非常喜欢车吧,记得笔者刚获得身份证所办的第一件事就是去报考驾校,那时候驾校是非常落后的,笔者学习用的车辆是北京吉普212,那是笔者见过所有小车中采用两脚离合系统的小车了。还记得在训练的时候的一次突发事件,笔者正以60公里的速度(相对此车来说已经是高速了)前进,突然发现刹车系统失灵,笔者果断的采用了急轰油门强行降档的措施,因为猛松离合自然让车辆发生了
期刊