还是不行,数据窗口的模糊查询!!急死了!!?

zjtv991 2003-01-16 02:28:51
我试了很多的兄弟们给的方法,但是还是不能解决这个问题.
很多人给我了不同的方法,但是都没有能实现,我想可能是每个人的设置方法不一样,所以代码也就不一样了!
我说一下我的步骤,你们看对不对?我用的是pb8.0
1.我的表共有四列:学号,姓名,地址,基本情况
2.建立数据窗口,选择free格式,用sql select,然后把这四个列选择上,点击菜单栏上的
一个什么选项(忘记了),就会出现一个窗口:自定义一个变量(假设为ls_address),数据类型为string,values项不填写.点击ok
3.回到接着进行数据窗口的建立,在where页中:column中选"student.address",
operator中选择为"like",value中选择为arguments里的"ls_address",然后点击return
建立好数据窗口.命名为:dw_student此时会跳出一个窗口,让你填写ls_address的取值,点击"取消"
4.建立windows,设置一个单行编辑框"sle_1",一个按钮"cb_1",text上填写为"确定"
然后建立一个datawindows,它对应的数据窗口就是上面的dw_student
5.在窗口的open事件中写代码:dw_1.settransobject(sqlca)
在确定的clicked事件中写代码:dw_1.retrieve("%+sle_1.text+%")
6.在执行的时候,要么无反应,要么就跳出窗口,让我填写ls_address的取值,填写后仍不行
我是在机房上网,而我又是在自己的电脑上用pb8.0的,以上步骤是凭记忆写的,可能有差漏,不过大致步骤就是这样的.请指导一下我错误,如果可能请给我详细的步骤!非常感谢!!
...全文
46 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
styker 2003-01-18
  • 打赏
  • 举报
回复
你看看这段代码,不需要设定列,可以查询所有的类型匹配的列,进行模糊查找。可能会有一点启发。
if key=keyenter! then
int li_col,i,j,li_count
string ls_query,ls_col,ls_where,ls_query1

ls_query = trim(sle_1.text)+" "
li_count=len(ls_query)
if li_count<=1 then return
//取得由空格组成的字符串组
ls_query1=""
ls_where = ''

for j=1 to li_count
if mid(ls_query,j,1)<>" " then
ls_query1=ls_query1+mid(ls_query,j,1)
else
li_col = long(dw_2.describe('datawindow.column.count'))
if not(ls_query1 = '' or isnull(ls_query)) then
if li_col > 0 then
ls_where += ' and '
for i = 1 to li_col
ls_col = trim(dw_2.describe('#'+string(i)+'.name'))
ls_where+= 'isnull(ltrim(rtrim(convert(char(255),'+ls_col+'))),"")+space(1)'
if i < li_col then ls_where += '+'
next
ls_where += ' like "%'+ls_query1+'%"'
end if
end if
ls_query1=""
end if
next
//if j=li_count+1 and ls_query1<>"" then
// li_col = long(dw_2.describe('datawindow.column.count'))
// if not(ls_query1 = '' or isnull(ls_query)) then
// if li_col > 0 then
// ls_where += ' and '
// for i = 1 to li_col
// ls_col = trim(dw_2.describe('#'+string(i)+'.name'))
// ls_where+= 'isnull(ltrim(rtrim(convert(char(255),'+ls_col+'))),"")+space(1)'
// if i < li_col then ls_where += '+'
// next
// ls_where += ' like "%'+ls_query1+'%"'
// end if
// end if
//end if
if not(pos(lower(is_sqlselect),'where') > 0) then
int li_pos
ls_where = trim(ls_where)
li_pos = pos(ls_where,'and')
if li_pos > 0 and li_pos < 4 then
ls_where = mid(ls_where,li_pos + 4)
end if
ls_where = ' where ' + ls_where
end if
dw_2.setsqlselect(is_sqlselect + ls_where)
dw_2.retrieve()
if dw_2.rowcount()=0 then
messagebox("注意","无符合要求的员工")
else
dw_2.show()
flag_show=1
dw_2.setfocus()
end if
end if
flyerlxg 2003-01-18
  • 打赏
  • 举报
回复
string ls_1

ls_1=trim(sle_1.text)

if ls_1 = "" or isnull(ls_1) then
dw_1.retrieve('%')
else
dw_1.retrieve('%'+ls_1+'%')
end if
MeriMX 2003-01-17
  • 打赏
  • 举报
回复
把你的第三步:column 选择 student.address operator 选择 like
value中写入 :ls_address+'%'
第五步:dw_1.retireve(trim(sle_1.text))
应该可以ok
sdqd_zn 2003-01-17
  • 打赏
  • 举报
回复
用pfc
zhouweiwansui 2003-01-16
  • 打赏
  • 举报
回复
retrieve里面好象不能实现模糊查询的
只有过滤才可以
bomber2001 2003-01-16
  • 打赏
  • 举报
回复
if ls_1 = "" or isnull(ls_1) then
ll_row=dw_1.setfilter("")
dw_1.filter()
return
else

ll_row=dw_1.setfilter("字段名 like '%" + string(ls_1) + "%' ")
1dw_1.filter()
end if
如果是datetime,最好:string(字段名,'yyyymmdd' like '%" + string(ls_1) + "%'
zjtv991 2003-01-16
  • 打赏
  • 举报
回复
好的,谢谢大家!我去试一下,不行再请教!!
qinqindodo 2003-01-16
  • 打赏
  • 举报
回复
和建立数据库时的设置没关系,数据窗口就是执行一段sql语句,
dw_1.retrieve("'%" + sle.text + "%'")因为是string看看 % 前有没有单引号,你最后要的字符串应该是dw_1.retrieve('%s%')而不是dw_1.retrieve(%s%)
schen23 2003-01-16
  • 打赏
  • 举报
回复
我的办法是过滤数据。
好处就是不用设置死数据窗口!
zjtv991 2003-01-16
  • 打赏
  • 举报
回复
和建立数据窗口时的设置没关系吗?
怎么大家的意见都不一样啊
zjtv991 2003-01-16
  • 打赏
  • 举报
回复
和建立数据库时的设置没关系吗?
怎么大家的意见都不一样啊!
lsycat 2003-01-16
  • 打赏
  • 举报
回复
同意以上的意见。
wdcfmh 2003-01-16
  • 打赏
  • 举报
回复
你把dw_1.retrieve("%+sle_1.text+%")改成dw_1.retrieve("%" + sle.text + "%"),应该就可以了。
比较一下,我想你应该就明白怎么回事了。
xuebuctxy 2003-01-16
  • 打赏
  • 举报
回复
dw_1.retrieve('%'+sle_1.text+'%')
schen23 2003-01-16
  • 打赏
  • 举报
回复
string ls_1
long ll_row


ls_1=sle_1.text

if ls_1 = "" or isnull(ls_1) then
ll_row=dw_1.setfilter("")
dw_1.filter()
return
else

ll_row=dw_1.setfilter("字段名 like '%" + string(ls_1) + "%' ")
1dw_1.filter()
end if


数据窗口里不用做任何设定。
肯定不会有问题!

609

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧