版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、9.6.1 简单查询的实现9.6.2 主从表的查询9.6.3 组合查询的实现9.6 数据查询设计9.6 数据查询设计 简单查询的实现较为简单,首先建立一个带参数的数据窗口,在窗口中除添加数据窗口控件(dw_1)和命令按钮(cb_1)外,还需添加一个单行编辑框(sle_1),该框主要用于输入数据。例如对Wzbmb建立数据窗口,定义一个字符型参数,并使参数与字段wzbm对应起来。在命令按钮cb_1的clicked事件中写上:dw_1.retrieve(sle_1.text)即可。应当注意的是sle_1.text是字符型的,如果数据窗口参数是其它类型,必须进行强制转换。9.6.1 简单查询的实现9.
2、6.1 简单查询的实现 在实际应用中会经常出现主从表的查询。其实现方法为:对主表建立一个数据窗口,对从表建立一个带参数的数据窗口,其参数对应的字段为主从表的公共字段,在窗口中添加两个数据窗口控件(dw_1、dw_2),dw_1对应主表建立的数据窗口对象,dw_2对应从表建立的数据窗口对象。在dw_1的事件doubleclicked中,获得当前行的值,即为dw_2的参数值,利用dw_2.retrieve(参数值)检索数据即可。这样程序在运行中,鼠标双击dw_1中某一条记录,在dw_2中即可查询出与dw_1中被双击记录有关的从表的一些记录。9.6.2 主从表的查询9.6.2 主从表的查询1查询的基
3、本方法 对大型数据库的查询,都是用SQL语句来操纵后台数据库实现的,其关键是构造合适的where查询子句。PB提供的数据窗口和数据存储能通过调用两种查询函数dwcontrol.Retrieve(argument, argument.)与dwcontrol.SetFilter(format)和 dwcontrol.Filter( )的组合来实现与数据库绝大多数的交互操作。9.6.3 组合查询的实现9.6.3 组合查询的实现2设计思路 通常情况下,用户对表的结构及其查询描述是不清晰的、含糊的,所以,应将表结构展示给用户,由其从中选择所需列名,再根据列名设置不同的模糊条件,通过模糊条件的迭代后,形成
4、综合查询条件。经执行查询得到返回结果集,最后,由用户决定是使用默认排序,还是根据需要重新排序。这其中,为了展示各表的结构,可将系统表pbcatcol导出。为了方便用户对条件的描述和实现数据的一致性约束,采用了下拉式数据窗口的增量式输入的辅助措施。为了方便用户查询结果集,采用了按字段名的适时排序方法。而动态模糊SQL语句的构造,则采用循环迭代的查询字符串得到WHERE查询子句的完整表达和默认排序,实现了查询程序的高通用性和代码的高重用性。9.6.3 组合查询的实现2设计思路9.6.3 组合查询的实现3通用的动态模糊查询的实现(1) 导出系统表pbcatcol以实现表中字段的自动显示(2) 数据窗
5、口中查询条件的设置(3) 动态模糊查询条件的生成(4) 查询结果的显示9.6.3 组合查询的实现9.6.3 组合查询的实现9.6.3 组合查询的实现(1) 导出系统表pbcatcol以实现表中字段的自动显示 导出系统表pbcatcol,设置检索参数为pbcatcol.pbc_owner = wz,并选取其中的pbc-tnam(表名), pbc-cnam(列名), pbc-hdr(中文注释)等字段后,把pbc-tnam和pbc-cnam剪切掉,只保留了pbc-hdr以构造下拉式子数据窗口d_cxzd1,并在d_cx1中挂于“zdlm”字段下,选择pbc-hdr为数据列和显示数据列,并通过外部数据
6、源建立数据窗口d_1挂在“value”字段下,dw_cx1可通过建立表或通过外部数据源建立的数据窗口,其数据窗口形式如图9.5所示。 图9.5 数据窗口d_cx19.6.3 组合查询的实现(1) 导出系统表pbcatcol9.6.3 组合查询的实现 建立窗口w_query,在其中添加2个数据窗口控件dw_3和dw_4及3个命令按钮,并在dw_3的Properties中指定DataObject为d_cx1。在窗口w_query的定义全局变量如下:datawindowchild dwc,dwc1string dwsyntax_str,cxbm,tablename datawindow dw_all
7、,gd_source定义实例变量如下:int n,sellong il_lastrowstring lm2,lm19.6.3 组合查询的实现 建立窗口w_query,9.6.3 组合查询的实现 窗口w_query的open事件中用脚本根据表名参数过滤出相应的表字段,并在条件设置数据窗口dw_3中显示出来:dw_4.visible=falsetablename=wzbmbdw_3.getchild(zdlm,dwc)/得到子数据窗口dwc.settransobject(sqlca)/设置事物对象dwc.setfilter(pbc_tnam = +tablename+)/根据全局变量tablena
8、me设置过滤条件dwc.filter()/根据设置好的过滤条件过滤dwc.retrieve()/过滤后再检索,否则无数据9.6.3 组合查询的实现 窗口w_query9.6.3 组合查询的实现(2) 数据窗口中查询条件的设置 对应于不同的字段列名,有不同的属性和数据类型,而用户很难分清具体的差别并给予正确的值的输入,所以,必须在字段选好后,就把相应的属性及数据类型配置好供用户选取和修改。因此,我们采用了在数据窗口输入条件时动态地修改下拉式数据窗口相关属性的方式保证用户输入的准确性,并用增量式输入技术对用户输入数据进行适时跟踪和向导。在dw_3的itemchanged事件里用describe()
9、和modify()函数组合来实现动态子数据窗口功能,其主要程序段如下:9.6.3 组合查询的实现9.6.3 组合查询的实现IF this.getcolumnname()=zdlm THENlm1=dataSELECT count() INTO :count FROM pbcatcol WHERE Pbcatcol.pbc_ownr = wz AND pbcatcol.pbc_hdr=:lm1; IF count0 THEN Sel=0 RETURNEND IF9.6.3 组合查询的实现 在 dw_3中用e9.6.3 组合查询的实现dddwcol=this.describe(value.dddw
10、.displaycolumn)/ value列子数据窗口的当前显示列input=this.gettext()/得到输入数据IF input THEN /有输入数据时 input=lower(left(input,len(input) - this.selectedlength()/除选中字符外输入字符长度 condition=dddwcol+ like +input+% dwc1.setfilter(condition) /设置过滤条件 dwc1.filter()/根据过滤条件过滤记录 IF dwc1.rowcount()0 THEN/如果有记录时 firstline=dwc1.getitem
11、string(1,aa)/找到过滤后子数据窗口的第一行/aa为value字段的下拉数据窗口d_1的字段名。9.6.3 组合查询的实现dddwcol=this.desc9.6.3 组合查询的实现 this.settext(firstline) /设置浮动数据 this.selecttext(len(input)+1,len(firstline)/选中firstline中还未输入部分 Sel=this.selectedlength()/选中的字符长 ELSE/如果没有满足过滤条件的记录时 this.selecttext(len(input),len(input)/选中没有匹配上的用户刚输入的字符
12、Sel=1 beep(1) /发出警告声END IF END IFEND IF9.6.3 组合查询的实现 this.settext(fir9.6.3 组合查询的实现 对于增量式输入还可通过用户定制事件pbm_downkey来实现,但效果不如editchanged事件好,且还需考虑其他键值(如退格键Backspace)的影响。通过setfilter()和filter()函数的搭配使用来设置过滤条件,尤其在本方法中经检索函数retrieve()后再过滤,是从缓冲区而不是数据库过滤记录,不会带来额外的系统开销。9.6.3 组合查询的实现 对于增量式输入还可9.6.3 组合查询的实现(3) 动态模糊查
13、询条件的生成 先取出数据窗口dw_3中的模糊条件的相应字段,根据不同的字段类型和运算符进行预处理,再用循环得到最终的条件组合,构成的优化和标准的where子句。即在确定条件按钮的clicked事件中,编写如下脚本:integer m,kstring data_typem=1string cnam,n1,n2,n3,n4,cxtj,errors,cxbm1,orderby,n3plusstring n3plusplus1,n3plusplus2,cxtj1datawindow dw_ylboolean netn = dw_3.rowcount()/n为行数全局变量IF dw_3.getrow()
14、=n AND n0 THEN dw_3.setitem(n,ljf,and)END IF9.6.3 组合查询的实现(3) 动态模糊查询条件的生成9.6.3 组合查询的实现FOR k=1 TO n/查看dw-3中条件填写是否完全net=(isnull(dw_3.getitemstring(k,zdlm)=true OR isnull(dw_3.getitemstring(k,ysf) = true OR isnull(dw_3.getitemstring(k,value)= true OR isnull(dw_3.getitemstring(k,ljf)= true ) or net NEXTI
15、F n0 AND net=false THEN/完全条件数=1时 DO WHILE m=n/循环取查询条件标准化n1=dw_3.getitemstring(m,2,primary!,false)/取出第m行的列名zdlm SELECT pbc_cnam INTO :cnam FROM pbcatcol WHERE pbc_hdr=:n1 AND pbc_tnam=:tablename;IF m=1 THENorderby=cnam/默认第1条件为排序条件END IF9.6.3 组合查询的实现FOR k=1 TO n/查看d9.6.3 组合查询的实现n2=dw_3.getitemstring(m
16、,3,primary!,false) n3=dw_3.getitemstring(m,4,primary!,false)n4=dw_3.getitemstring(m,5,primary!,false) /假设只有字符型和数字型两种类型SELECT data_type INTO :data_type FROM user_tab_column WHERE owner=wz AND table_name=:tablename AND column_name=:cnam;IF lower(data_type)number THENn3plus=ELSE n3plus=END IFIF isnull(
17、n4)=true OR m=n THEN/处理逻辑符n4=END IF9.6.3 组合查询的实现n2=dw_3.getitemst9.6.3 组合查询的实现CHOOSE CASE n2/按ysf分类处理查询条件,CASE =,=,n3plusplus1=n3plusplus2=CASE like,not liken3plusplus1=%n3plusplus2=%END CHOOSE9.6.3 组合查询的实现9.6.3 组合查询的实现cxtj1=cxtj1 + cnam+ + n2+ + n3plus+ n3plusplus1 + n3 + n3plusplus2 + n3plus+ +n4+
18、 “ /最终的查询条件m=m+1/计数器增加1 LOOPcxtj1=select * from +tablename+ where +cxtj1+ order by +orderbydwsyntax_str=sqlca.syntaxfromsql(cxtj1,style(type=grid),errors)/设置数据窗口的语法IF Len(ERRORS) 0 THEN/语法出错警报MessageBox(Caution, SyntaxFromSQL caused these errors: + ERRORS)RETURNEND IF9.6.3 组合查询的实现cxtj1=cxtj1 + cna9.
19、6.3 组合查询的实现dw_4.reset()dw_4.Create( dwsyntax_str, ERRORS)/根据语法动态创建一个数据窗口dw_4.settransobject(sqlca)dw_4.retrieve()/检索得到最终的查询结果dw_4.Object.DataWindow.ReadOnly=Yes/设置动态的数据窗口为只读属性IF dw_4.retrieve() 0 THEN/创建动态数据窗口的出错警报MessageBox(Caution,Create causethese errors: + ERRORS)9.6.3 组合查询的实现dw_4.reset()9.6.3 组合查询的实现RETURNEND IF ELSEmessagebox(提示:,没有或不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年度大庆“庆蓝优引·社会招引”市属学校人才引进14人笔试备考题库及答案解析
- 2026四川国际博览集团有限公司招聘工作人员3人笔试模拟试题及答案解析
- 2026天津市眼科医院招聘人事代理制人员13人笔试备考题库及答案解析
- 【招聘】2026年3月永修县总医院面向社会公开招聘工作人员考试参考题库及答案解析
- 2026广东广州民航职业技术学院第一批博士学位教师及高级职称教师招聘56人考试备考试题及答案解析
- 2026江苏盐城市建湖县第三人民医院招聘合同制人员5人考试备考题库及答案解析
- 2026湖南新五丰股份有限公司兽医管理岗招聘1人考试参考题库及答案解析
- 2026年中国石油大庆石化分公司校园招聘考试参考题库及答案解析
- 2026广西玉林市北流市清湾镇中心卫生院赴广西科技大学春季双选会招聘编外专业技术人员1人考试参考题库及答案解析
- 2026年安徽皖信招聘铁塔阜阳市分公司 技术人员笔试参考题库及答案解析
- NCCN临床实践指南:头颈部肿瘤(2026.V1)解读课件
- 2026年安全员之C证(专职安全员)考试题库500道附参考答案【完整版】
- T CWEA水利水电工程钢筋机械连接施工规范
- 《用事实说话-透明化沟通的8项原则》读书笔记
- 《海洋工程设计基础》课件-第二章 海洋平台载荷
- (2025年)细选事业单位公共科目综合基础知识(管理岗)考试题库及答案
- 我国城市流浪犬猫安置的现状与分析
- 停业损失补偿协议书
- 桥梁结构健康监测技术研究
- 2025浙江单招试卷真题及答案
- 《头戴式电子助视器》
评论
0/150
提交评论