此篇文章将带领大家实现PB9.0中“组合查询”的功能。
还记得“机房收费系统”中,我们如何实现“组合查询”的吗?首先,带领大家回忆一些界面:
还记得当初写过的一篇博客《【机房收费系统知识小结点系列】之组合查询》同样是关于“组合查询”的,其中程序的精华之处在于“1”。
下面带领大家回忆一下代码的精华之处:
解析:默认值设置为“1”,使得sql语句的最终拼接,出现1=1 and 1=1的恒等效果。用”1”封装了所有的变化,最终只要写一个sql语句就可以实现”组合查询”的效果。否则,你可能就需要多重if ……else……嵌套,并且多种sql语句来实现效果了。
用上述”1”的思想,用于设计PB9.0组合查询。
首先来看一下界面(此处的界面已经做了精简):
分析:
1、总共有四种查询条件:用户名、真实姓名、登陆日期、退出日期。
2、其中每一种查询条件都分为两种情况:
(1)输入的查询条件,则按照输入的信息进行查询
(2)没有输入查询条件,则默认为:1
w_queryuserlog窗体的open()事件:
//数据窗口dw设置连接事务sqlca
dw_queryuserlog.settransobject(sqlca)
//让数据窗口控件从库中提取数据
//dw_queryuserlog.retrieve()
//得到原始语法,为检索做准备
is_sql = dw_queryuserlog.getsqlselect()
cb_query事件:
//用于接受用户输入的数据
string struserno
string strusername
string strlogindate
string strlogoffdate
string Is_select
//用户表示数据库中的字段
string userno
string username
string logindate
string logoffdate
//判断查询条件:用户名是否为空
if trim(sle_userno.text)="" then
userno="1"
struserno="1"
else
userno="userno"
struserno=trim(sle_userno.text)
end if
//判断查询条件:真实姓名是否为空
if trim(sle_username.text)="" then
username="1"
strusername="1"
else
username="username"
strusername=trim(sle_username.text)
end if
//判断查询条件:登陆日期是否为空
if strlogindate="" then
logindate="1"
strlogindate="1"
else
logindate="logindate"
strlogindate=em_logindate.text
end if
//判断查询条件:退出日期是否为空
if strlogoffdate="" then
strlogoffdate="1"
logoffdate="1"
else
logoffdate="logoffdate"
strlogoffdate=em_logoffdate.text
end if
//SQL语句,表示查询条件
//Is_select=""
Is_select=is_sql +" where "
Is_select=Is_select+userno+"='"+struserno+"' and "
Is_select=Is_select+username+"='"+strusername+"' and "
Is_select=Is_select+logindate+"='"+strlogindate +"' and "
Is_select=Is_select+logoffdate+"='"+strlogoffdate +"' "
//检索数据
dw_queryuserlog.setsqlselect(Is_select)
//让数据窗口控件从库中提取数据
dw_queryuserlog.retrieve()
//统计显示记录的数目
int count
count=dw_queryuserlog.rowcount()
if count<>-1 then
sle_count.text=string(count)
else
sle_count.text="0"
end if
这样的好处就在于:
不需要对四中查询条件进行判断
不需要多重if……else……嵌套了
也不需要写多条sql语句了。
最重要的是,把一件看似很难很难的任务通过一种简单的方式来实现。在实现的过程中,你会有种似曾相识的感觉。慢慢的就会消除这种,由于“语言不通”而带来的陌生感,对代码产生恐惧。从而使你的心情放轻松,以便于更好地工作。