pb dw 复杂查询

巴唧 2011-12-10 02:39:55
想实现一个IN查询的功能:select * from table where name in ('','','','');

上面的name 是用户输入的 。比如用户输入三个名字,分别为 张三,李四,王五
然后点“查询”,同时显示这三个人在table表中的信息。应该怎么实现。
本人菜鸟。越详细越好!!
谢谢!
...全文
425 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuxiaoyang13 2012-03-13
  • 打赏
  • 举报
回复
还是15楼的方法好!
sjlion 2012-03-12
  • 打赏
  • 举报
回复
仅仅是为了多参数(个数不固定)查询的话,最简单就定义 retrieve argument为数组,retrieve时直接传参数就完了,没必要搞动态的。

string ls_arg[]

ls_arg[1] = 'a'
ls_arg[2] = 'b'
......

dw_test.retrieve(ls_arg[])
hugegooder 2012-03-12
  • 打赏
  • 举报
回复
//build 3 parameters


string name1,name2,name3
name1 = sle_1.text
name2 = sle_2.text
name3 = sle_3.text //build three text


dw_1.retrieve(name1,name2,name3)


haizixin1981 2012-02-13
  • 打赏
  • 举报
回复
可以用动态SQL来实现了,做一个输入查询条件的datawindow,user输入条件后,再程序取出做成动态SQL语句就可以了呀
mmbest 2012-02-06
  • 打赏
  • 举报
回复
LZ的功能可以用动态SQL语法实现
kekeservices 2012-02-02
  • 打赏
  • 举报
回复
利用循环把录入的内容循环生成in语句内部样式,然后修改数据窗口定义即可
例子:

string ls_inputname[],ls_name ,ls_sql
long ll_i,ll_count,ll_find
//
ll_count = upbound(ls_inputname)
//循环生成待查in字符串
for ll_i = 1 to ll_count
if ll_i < ll_count then
ls_name += "'" + ls_inputname[ll_i] + "',"
else
ls_name += "'" + ls_inputname[ll_i] + "'"
end if
end for
//动态修改数据窗口
ls_sql = dw_1.describe("datawindow.table.select")
//此区间代码只适用简单查询语句,字段内嵌子查询的请自行解决
ll_find = pos(ls_sql,"where",1)

if ll_find > 0 then
ls_sql += " and name in ('"+ls_name+"')
else
ls_sql += " where name in ('"+ls_name+"')
end if
//此区间代码只适用简单查询语句,字段内嵌子查询的请自行解决

dw_1.modify("datawindow.table.select = ls_sql
dw_1.settransobject(sqlca)
dw_1.retrieve()
noobw 2012-02-02
  • 打赏
  • 举报
回复
你可以用getsqlselect()方法把DW里面的SQL语句取出来赋给字符串,然后自己随便拼接就好了。完了用setsqlselect()把SQL语句放回去就可以了。方法的具体使用细节可以参考PB的帮助手册。
zjl8008 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wangyouren 的回复:]
在数据窗口中,传的参数设置为字符串数组,传参数时也传为字符串数组就可以了
[/Quote]
在dw 的数据源中这样写条件
where 列名 in(:数组参数名)
NorthStar21 2011-12-14
  • 打赏
  • 举报
回复
主体思想:
既然SQL语句是根据用户的输入变动的,那么我们就动态修改dw_1,dataobject 中的SQL语句。


dw_1 的dataobject 里的 SQL 语句

select * from table

查询按钮的 clicked() 事件:
string ls_sql1, ls_sql2
ls_sql1 = dw_1.describe("datawindow.table.select")
ls_sql2 = ls_sql1
//这时候 , 加入 where 条件
ls_sql2 = ls_sql2 + " where name in ('" + "张三" +"','" + "李四" + …… + ")"
dw_1.modify("datawindow.table.select = ~"" + ls_sql2 + "~"")
dw_1.retrieve()
dw_1.modify("datawindow.table.select = ~"" + ls_sql1 + "~"")

注:
以上代码,“张三”,“李四”那部分,可以根据用户的输入来改变
PB菜鸟 2011-12-12
  • 打赏
  • 举报
回复
用datawindow 实现查询,查询条件用数组。
巴唧 2011-12-12
  • 打赏
  • 举报
回复
用户输入的查询条件是不定的,有可能几十个条件。应该用什么控件来接受用户输入的条件,然后怎么实现查询。。。。
yyoinge 2011-12-12
  • 打赏
  • 举报
回复
--MSSQL的写法,(:name为dw中定义的string类型retrieve参数)
select * from table where charindex(',' + name + ',' , ',' + :name + ',') > 0
--charindex类似于pb的pos函数, pos(',' + :name + ',', ',' + name + ',') > 0
xixi_Lee 2011-12-12
  • 打赏
  • 举报
回复
直接使用存储过程不就完了呗~~~条件多和条件复杂的话 使用存储过程很方便
夕木双 2011-12-11
  • 打赏
  • 举报
回复
在数据窗口中,传的参数设置为字符串数组,传参数时也传为字符串数组就可以了
pysndzc 2011-12-10
  • 打赏
  • 举报
回复
如果是一次性输入3个参数的话,就要先定义三个参数,ls_mane1,ls_mane2,ls_mane3,然后
select * from table where name = ls_mane1 or name = ls_mane2 or name = ls_mane3

611

社区成员

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

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