[分享]pb中在dw内实现下拉式模糊查询

岁月明灯 2016-12-15 08:47:17
1、dw中的要做模糊查询的字段(下例为splcode)的EDIT设成Dropdownlistbox格式;
选中:
(1)allow editing
(2)Auto Horz Scroll
(3)Sorted
(4)Always Show List
(5)Always Show Arrow
(6)V Scrollbar
2、Instance Variables中声明:
string is_itemvalue_reverse
3、editchanged事件:
DataStore ds_spl
long ll_i
long ll_rowcount
long ll_splid
string ls_splinfo
DataWindowChild dwc_splcode
string ls_value
string ls_itemvalue,ls_itemvalue_reverse

string ls_datavalue
if isvalid(ds_spl) then
destroy(ds_spl)
end if
setnull(is_itemvalue_reverse)
choose case dwo.name

case 'splcode'
setnull(ls_value)
dw_list.Object.splcode.Values = ls_value
ds_spl = create DataStore
ds_spl.DataObject = "d_supplier_query_like"

ds_spl.SetTransObject(sqlca)
ll_RowCount = ds_spl.Retrieve(data)

for ll_i = 1 to ll_RowCount
setnull(ls_splinfo)
setnull(ls_itemvalue_reverse)
ls_splinfo = ds_spl.GetItemString(ll_i,"splcode")
ls_itemvalue_reverse = ls_itemvalue_reverse+ ls_splinfo + " " + ls_splinfo + '/'//display

ls_splinfo = ds_spl.GetItemString(ll_i,"splcode") +'-' + ds_spl.GetItemString(ll_i,"splname") + " " + ls_splinfo + '/'//display
ls_itemvalue = ls_itemvalue+ ls_splinfo
next
is_itemvalue_reverse = ls_itemvalue_reverse
dw_list.Object.splcode.Values = ls_itemvalue

case else
end choose
if isvalid(ds_spl) then
destroy(ds_spl)
end if

4、Itemchanged事件:
string ls_splname
string ls_splcode
string ls_py
string ls_shortname
string ls_splno

choose case dwo.name
case "splcode"
ls_splno = left(data,7)
this.setitem(row, "splcode",ls_splno)
select splname,shortname,prchead into:ls_splname,:ls_shortname,:ls_py
from pub_supplier
where splcode = :ls_splno;
this.object.splcode.Values = is_itemvalue_reverse
this.setitem(row, "splname",ls_splname)
this.setitem(row, "shortname",ls_shortname)
this.setitem(row, "prchead",ls_py)

end choose

5、d_supplier_query_like的SQL
select COMPID,
SPLID,
SPLCODE,
SPLNAME,
SHORTNAME,
PRCHEAD
from pub_supplier
where stopflag = '00' and
( splcode LIKE '%'||:as_condition||'%' OR
splname LIKE '%'||:as_condition||'%' OR
prchead LIKE '%'||:as_condition||'%' OR
SHORTNAME LIKE '%'||:as_condition||'%')
...全文
1854 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35595780 2017-04-15
  • 打赏
  • 举报
回复
引用 6 楼 guangguang210 的回复:
[quote=引用 5 楼 qq_35595780 的回复:] LZ 用了你的方法。ds_spl.Retrieve 的返回值是-1. 查询不到数据 是哪里出了问题呢。 数据窗口我也绑定了 格式都按照你的列子模仿的 我没有往数据窗口中添加检索参数。 但是这样都返回不了数据 代码{ choose case dwo.name case 'splcode' setnull(ls_value) dw_1.Object.splcode.Values = ls_value ds_spl = create DataStore ds_spl.DataObject = "dw_1" ds_spl.SetTransObject(sqlca) ll_RowCount = ds_spl.Retrieve() }
ds_spl.DataObject怎么是等于dw_1呢[/quote] 谢谢楼主,已经写出来了。非常感谢 对我们这样的小菜鸟帮助巨大
tomok 2017-03-29
  • 打赏
  • 举报
回复
谢谢楼主 受教了
Hello_JGM 2017-03-29
  • 打赏
  • 举报
回复
引用 5 楼 qq_35595780 的回复:
LZ 用了你的方法。ds_spl.Retrieve 的返回值是-1. 查询不到数据 是哪里出了问题呢。 数据窗口我也绑定了 格式都按照你的列子模仿的 我没有往数据窗口中添加检索参数。 但是这样都返回不了数据 代码{ choose case dwo.name case 'splcode' setnull(ls_value) dw_1.Object.splcode.Values = ls_value ds_spl = create DataStore ds_spl.DataObject = "dw_1" ds_spl.SetTransObject(sqlca) ll_RowCount = ds_spl.Retrieve() }
ds_spl.DataObject怎么是等于dw_1呢
qq_35595780 2017-02-28
  • 打赏
  • 举报
回复
LZ 用了你的方法。ds_spl.Retrieve 的返回值是-1. 查询不到数据 是哪里出了问题呢。 数据窗口我也绑定了 格式都按照你的列子模仿的 我没有往数据窗口中添加检索参数。 但是这样都返回不了数据 代码{ choose case dwo.name case 'splcode' setnull(ls_value) dw_1.Object.splcode.Values = ls_value ds_spl = create DataStore ds_spl.DataObject = "dw_1" ds_spl.SetTransObject(sqlca) ll_RowCount = ds_spl.Retrieve() }
fang5447 2017-02-08
  • 打赏
  • 举报
回复
感謝LZ 無私分享
lianxiweixiao 2017-02-08
  • 打赏
  • 举报
回复
版主方法更优 很不错
WorldMobile 2016-12-15
  • 打赏
  • 举报
回复
谢谢分享,建议不要用retrieve,你可以窗口打开时retrieve出全部数据,然后setfilter来实现筛选,这样效率比较高,对数据库的压力也比较小
岁月明灯 2016-12-15
  • 打赏
  • 举报
回复
good idea!

609

社区成员

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

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