今天PB考完试了,说真的学过VB再学PB真的没什么意思,真搞不懂学校为什么要开这门课。
可能就是别人说的用PB的DataWindow作数据库开发比较快,我没感觉,只对DataWindow作为注册商标有较深印象。
还好在今天考试时学到一点东西,应该适用于所有SQL编程,算是另类的技巧吧,随便记上一笔。
在考试之前我还不知道setsqlselect(sqlstr)中的sqlstr中如何放置sql语句中的变量。
考试题目是两个ddlb控件(下拉列表框ddlb_1,ddlb_2)和一个sle控件(单行输入框sle_1)中任选输入(可以不选,选一个输入,两个,或三个都输入)来查询。
我一看到这种查询就开始后悔,昨天为什么没有把setsqlselect搞清楚,只能硬着头皮用带参数的datawindow来实现这个功能。
一开始没什么思路,只是实现一个查询,话说"人不会倒霉一辈子",记得我昨天还被桔梗塞住牙缝难受了半天,今天运气来了,突然想到sql中like的"伟大"功能(现在只能说它伟大了,帮了我大忙),它可以实现参数的无效传递,可能无效传递说的不太恰当,反正就是这样的功能:
选了ddlb_1其他不做操作,则把其他两个参数变为'%'传给datawindow的形参,用like查询的话相当于只从数据库中检索了ddlb_1的数据
PB中向dw传参的代码为:
string str1,str2,str3
str1=ddlb_1.text
str2=ddlb_2.text
str3=sle_1.text
if str1="" then str1="%"
if str2="" then str2="%"
if str3="" then str3="%"
dw_1.retrieve(str1,str2,str3)
当然有做无用功,也是没办法中的办法了,谁叫我那个时候不知道setsqlselect怎么用,但考试要求都能实现了,应该过关了。
今天,考完试回来发现CSDN有人回答了我提出的关于setsqlselect(sqlstr)的问题,原来sqlstr中含变量的sql语句要这么写:
sqlstr="select * from user where name='"+ls_str+"'"
=后面的变量ls_str放置是我提的问题。
现在想想会用setsqlselect了,感觉SQL语句中还是应该使用like比较简单,不然还要判断哪个为空,挺麻烦的(8种组合呢),还是用like:
string str1,str2,str3
str1=ddlb_1.text
str2=ddlb_2.text
str3=sle_1.text
if str1="" then str1="%"
if str2="" then str2="%"
if str3="" then str3="%"
sqlstr="select * from table1 where id1 like '"+str1+"' and id2 like '"+"str2"+"' and id3 like '"+"str3"+"'"
dw_1.setsqlselect(sqlstr)
dw_1.retrieve()//现在不用传参了
最终的解决方案,多字段查询:在SQL语句中使用like。