论文部分内容阅读
摘要:文章提出在VFP数据库管理系统中实现组合条件查询数据的两种程序设计方法。该方法使VFP系统的条件查询功能大大增强,且操作简单,易实现。
关键词:组合条件;IIF()函数;VFP
中图分类号:TP311 文献标识码:A文章编号:1009-3044(2007)15-30626-01
The Design And Implementation of Data Retrieval for Combined Search Conditions
ZHU Xiao-zhong,LIU Xian-cheng
(College of Computer & Information Engineering ,Hehai Univ.,Changzhou 213022,China)
Abstract:Two programs design method for searching data retrieval at combined conditions in the VFP database management system are proposed in this paper,by means of which the condition searching function of the VFP system could be greatly enhanced,and the operation and realization is simple.
Key words:combined conditions;iif() Function;VFP
1 引言
自20世纪70年代以来,数据库技术得到迅速发展,其应用已经深入到社会生活的各个领域。价格审计系统是为中国南方机车车辆集团下属某大型企业所开发。该系统使用计算机对物资采购信息进行管理,并完成价格审计工作。在该系统的开发研制过程中,用户有这样的检索要求:有多项检索条件,但在实际检索过程中,只能提供所掌握的多项条件中任意几项的条件值,可能是一项,也可能是多项甚至是所有项的条件值,进而要求检索同时满足所提供的几项条件值的数据记录。针对这种情况如何在Visual Foxpro简称VFP开发的软件中具体实现呢?本文介绍了两种实现多条件任意组合检索的具体方法。
2 表单的设置
将相关的数据表添加到该表单(图1)的数据环境中,其中包括审计表(合同号,物资名称,类别,采购单位,供货单位,日期)。设表单上关于日期的两个文本框名分别为rq1,rq2,合同号的下拉列表框名为hth,以此类推,类别,采购单位,供货单位,物资名称的下拉列表框名分别是:lb,cgdw,ghdw, wzmc。
以下的程序设计在表单上“查询“按钮的”click”事件中进行。
zxz01.tif图1
3 两种程序设计的实现过程
3.1 基于IF-ELSE判断的实现方法
(1)用变量接收表单上文本框和下拉列表框的值。
m_lb=allt(thisform.lb.displayvalue)
m_cgdw=allt(thisform.cgdw.displayvalue)
m_ghdw=allt(thisform.ghdw.displayvalue)
m_hth=allt(thisform.hth.displayvalue)
m_wzmc=allt(thisform.wzmc.displayvalue)
m_d1=thisform.rq1.value
m_d2=thisform.rq2.value
(2)用if-else语句进行条件判断
if len(m_lb)=0
mc1=.T.
else
mc1=”m_lb$审计表.类别”
endif
if len(m_cgdw)=0
mc2=.T.
else
mc2=”m_cgdw$审计表.采购单位”
endif
以此类推,若供货单位一项空白,则mc3=.T. 否则让变量mc3=”m_ghdw$审计表.供货单位”,同样的,可以用变量mc4,mc5,mc6分别完成对合同号,物资名称,日期的缺省与否的判断。
(3)对审计表使用 set filter to &mc1..and..&mc2..and..&mc3..and..&mc4..and..&mc5..and..&mc6则可筛选出符合条件的记录。将这些记录放入一临时表,并将此临时表作为图1表单中“GRID”控件的数据源,刷新后表单上就显示出了查询到的记录。”&”是VFP语言中的宏运算符。
3.2 基于IIF()函数的实现方法
3.2.1 IIF() 函数的内容[1]
iif() 函数是数据库类编程语言VFP 中的一个判断表达式并返回值的函数。iif() 函数的具体语法是iif(1Expression ,eExpression1 ,eExpression2) ,它计算逻辑表达式1Expression ,如果计算结果的值是“真”(.T.) ,则iif() 函数返回表达式eExpression1 ,如果计算结果的值是“假”(.F.) ,则iif() 函数返回表达式eExpression2。
例如: iif(5 + 6 >10 ,3 + 4 ,5 - 2) 则返回‘7’。
3.2.2 基于IIF()函数的方法设计
(1)用变量接收表单上文本框和下拉列表框的值。
m_lb=allt(thisform.lb.displayvalue)
m_cgdw=allt(thisform.cgdw.displayvalue)
m_ghdw=allt(thisform.ghdw.displayvalue)
m_d1=thisform.rq1.value
m_d2=thisform.rq2.value
m_hth=allt(thisform.hth.displayvalue)
m_wzmc=allt(thisform.wzmc.displayvalue)
(2)用iif()函数判断(1)中变量的状态,根据其是否为空而将iif()函数的eExpression1 或eExpression2作为返回值赋给mc1,mc2,…,mc6。
mc1=iif(empty(m_lb)," ","mlb$审计表.类别")
mc2=iif(empty(m_cgdw)," ","mcgdw$审计表.采购单位")
mc3=iif(empty(m_gydw)," ","mgydw$审计表.供货单位")
mc4=iif(not empty(m_d1) and not empty(m_d2),"between(审计表.日期,md1,md2)"," ")
mc5=iif(empty(m_hth)," ","mhth$审计表.合同号")
mc6=iif(empty(m_wzmc)," ","mwzmc$审计表.物资名称")
(3)反复使用iif()函数,对mc1变量进行迭代,使得所需的检索表达式最终保存在mc1变量中。
mc1=iif(not empty(mc1) and not empty(mc2+mc3+mc4+mc5+mc6), mc1+" and " , mc1)
mc1=iif(not empty(mc2) and not empty(mc3+mc4+mc5+mc6), mc1+mc2+" and " , mc1+mc2)
mc1=iif(not empty(mc3) and not empty(mc4+mc5+mc6), mc1+mc3+" and " , mc1+mc3)
mc1=iif(not empty(mc4) and not empty(mc5+mc6), mc1+mc4+" and " , mc1+mc4)
mc1=iif(not empty(mc5) and not empty(mc6), mc1+mc5+" and ", mc1+mc5)
mc1=mc1+mc6
经过上面的三个步骤,变量mc1中保存了用户的检索条件。
如图1中所输入的条件,此时执行 setfilter to &mc1 相当于执行 set filter to审计表.燃料$类别 and 物资处$审计表.采购单位 and between(审计表.日期,{01/01/02},{01/01/03})
4 结束语
以上两种方法均实现了组合条件查询。方法一简单易于理解;方法二条理性强,初看起来觉得比较复杂,但实际上还是一个按部就班的过程。按照这两种思路编程,可以在任何常见的数据库系统中实现组合条件查询,而且,当查询条件增加的时候程序的代码量不会增加太多。基于以上两种思路编写的程序在VFP 6.0中文版中均运行通过。
参考文献:
[1]焦敏杰.中文VISUAL FOXPRO 6.0函数与命令参考大全[M].北京:北京大学出版社,2002.
[2]史济民,汤观全.Visual FoxPro及其应用系统开发[M].北京:清华大学出版社,2000.
[3]吴迪,曲蒙.Visual FoxPro6.0程序设计指南[M].北京:清华大学出版社,1999.
关键词:组合条件;IIF()函数;VFP
中图分类号:TP311 文献标识码:A文章编号:1009-3044(2007)15-30626-01
The Design And Implementation of Data Retrieval for Combined Search Conditions
ZHU Xiao-zhong,LIU Xian-cheng
(College of Computer & Information Engineering ,Hehai Univ.,Changzhou 213022,China)
Abstract:Two programs design method for searching data retrieval at combined conditions in the VFP database management system are proposed in this paper,by means of which the condition searching function of the VFP system could be greatly enhanced,and the operation and realization is simple.
Key words:combined conditions;iif() Function;VFP
1 引言
自20世纪70年代以来,数据库技术得到迅速发展,其应用已经深入到社会生活的各个领域。价格审计系统是为中国南方机车车辆集团下属某大型企业所开发。该系统使用计算机对物资采购信息进行管理,并完成价格审计工作。在该系统的开发研制过程中,用户有这样的检索要求:有多项检索条件,但在实际检索过程中,只能提供所掌握的多项条件中任意几项的条件值,可能是一项,也可能是多项甚至是所有项的条件值,进而要求检索同时满足所提供的几项条件值的数据记录。针对这种情况如何在Visual Foxpro简称VFP开发的软件中具体实现呢?本文介绍了两种实现多条件任意组合检索的具体方法。
2 表单的设置
将相关的数据表添加到该表单(图1)的数据环境中,其中包括审计表(合同号,物资名称,类别,采购单位,供货单位,日期)。设表单上关于日期的两个文本框名分别为rq1,rq2,合同号的下拉列表框名为hth,以此类推,类别,采购单位,供货单位,物资名称的下拉列表框名分别是:lb,cgdw,ghdw, wzmc。
以下的程序设计在表单上“查询“按钮的”click”事件中进行。
zxz01.tif图1
3 两种程序设计的实现过程
3.1 基于IF-ELSE判断的实现方法
(1)用变量接收表单上文本框和下拉列表框的值。
m_lb=allt(thisform.lb.displayvalue)
m_cgdw=allt(thisform.cgdw.displayvalue)
m_ghdw=allt(thisform.ghdw.displayvalue)
m_hth=allt(thisform.hth.displayvalue)
m_wzmc=allt(thisform.wzmc.displayvalue)
m_d1=thisform.rq1.value
m_d2=thisform.rq2.value
(2)用if-else语句进行条件判断
if len(m_lb)=0
mc1=.T.
else
mc1=”m_lb$审计表.类别”
endif
if len(m_cgdw)=0
mc2=.T.
else
mc2=”m_cgdw$审计表.采购单位”
endif
以此类推,若供货单位一项空白,则mc3=.T. 否则让变量mc3=”m_ghdw$审计表.供货单位”,同样的,可以用变量mc4,mc5,mc6分别完成对合同号,物资名称,日期的缺省与否的判断。
(3)对审计表使用 set filter to &mc1..and..&mc2..and..&mc3..and..&mc4..and..&mc5..and..&mc6则可筛选出符合条件的记录。将这些记录放入一临时表,并将此临时表作为图1表单中“GRID”控件的数据源,刷新后表单上就显示出了查询到的记录。”&”是VFP语言中的宏运算符。
3.2 基于IIF()函数的实现方法
3.2.1 IIF() 函数的内容[1]
iif() 函数是数据库类编程语言VFP 中的一个判断表达式并返回值的函数。iif() 函数的具体语法是iif(1Expression ,eExpression1 ,eExpression2) ,它计算逻辑表达式1Expression ,如果计算结果的值是“真”(.T.) ,则iif() 函数返回表达式eExpression1 ,如果计算结果的值是“假”(.F.) ,则iif() 函数返回表达式eExpression2。
例如: iif(5 + 6 >10 ,3 + 4 ,5 - 2) 则返回‘7’。
3.2.2 基于IIF()函数的方法设计
(1)用变量接收表单上文本框和下拉列表框的值。
m_lb=allt(thisform.lb.displayvalue)
m_cgdw=allt(thisform.cgdw.displayvalue)
m_ghdw=allt(thisform.ghdw.displayvalue)
m_d1=thisform.rq1.value
m_d2=thisform.rq2.value
m_hth=allt(thisform.hth.displayvalue)
m_wzmc=allt(thisform.wzmc.displayvalue)
(2)用iif()函数判断(1)中变量的状态,根据其是否为空而将iif()函数的eExpression1 或eExpression2作为返回值赋给mc1,mc2,…,mc6。
mc1=iif(empty(m_lb)," ","mlb$审计表.类别")
mc2=iif(empty(m_cgdw)," ","mcgdw$审计表.采购单位")
mc3=iif(empty(m_gydw)," ","mgydw$审计表.供货单位")
mc4=iif(not empty(m_d1) and not empty(m_d2),"between(审计表.日期,md1,md2)"," ")
mc5=iif(empty(m_hth)," ","mhth$审计表.合同号")
mc6=iif(empty(m_wzmc)," ","mwzmc$审计表.物资名称")
(3)反复使用iif()函数,对mc1变量进行迭代,使得所需的检索表达式最终保存在mc1变量中。
mc1=iif(not empty(mc1) and not empty(mc2+mc3+mc4+mc5+mc6), mc1+" and " , mc1)
mc1=iif(not empty(mc2) and not empty(mc3+mc4+mc5+mc6), mc1+mc2+" and " , mc1+mc2)
mc1=iif(not empty(mc3) and not empty(mc4+mc5+mc6), mc1+mc3+" and " , mc1+mc3)
mc1=iif(not empty(mc4) and not empty(mc5+mc6), mc1+mc4+" and " , mc1+mc4)
mc1=iif(not empty(mc5) and not empty(mc6), mc1+mc5+" and ", mc1+mc5)
mc1=mc1+mc6
经过上面的三个步骤,变量mc1中保存了用户的检索条件。
如图1中所输入的条件,此时执行 setfilter to &mc1 相当于执行 set filter to审计表.燃料$类别 and 物资处$审计表.采购单位 and between(审计表.日期,{01/01/02},{01/01/03})
4 结束语
以上两种方法均实现了组合条件查询。方法一简单易于理解;方法二条理性强,初看起来觉得比较复杂,但实际上还是一个按部就班的过程。按照这两种思路编程,可以在任何常见的数据库系统中实现组合条件查询,而且,当查询条件增加的时候程序的代码量不会增加太多。基于以上两种思路编写的程序在VFP 6.0中文版中均运行通过。
参考文献:
[1]焦敏杰.中文VISUAL FOXPRO 6.0函数与命令参考大全[M].北京:北京大学出版社,2002.
[2]史济民,汤观全.Visual FoxPro及其应用系统开发[M].北京:清华大学出版社,2000.
[3]吴迪,曲蒙.Visual FoxPro6.0程序设计指南[M].北京:清华大学出版社,1999.