如何向数据窗口提交参数以使数据窗口检索出多条记录?(在线等待)

yingmu 2002-10-23 10:24:16
假设在窗口w_a中用按钮cb_1打开新窗口w_b,w_b中有数据窗口dw_b,此数据窗口的数据窗口对象为d_b。我想在用按钮cb_1打开窗口w_b时向d_b提交一参数组,以使d_b检索出多条记录以显示在dw_b中。
d_b的查询语句是这样写的:
SELECT theme.I_D,
theme.QUESTION,
record.REC_NO,
record.REC_DT,
record.REC_ID,
record.REC_MOD,
record.TES_ID,
record.VALUE,
record.QUS_ID,
record.PLACE,
record.REMARK
FROM record,
theme
WHERE ( theme.i_d = record.qus_id ) AND
record.REC_NO in ( :rec_no )
其中rec_no是定义的number array
在按钮cb_1中相关的代码部分是这样的:
long ld_rec_no[]
假设有:ld_rec_no[1] = 1
ld_rec_no[2] = 2
ld_rec_no[3] = 3
datastore lds_1
lds_1 = create datastore
lds_1.dataobject = "d_b"
lds_1.settransobject(sqlca)
if lds_1.retrieve(ld_rec_no) < 1 then
return
end if
然后就是打开窗口之类的了。
这样得出的结果是只能检索出一条记录,如果messagebox('',lds_1.rowcount())
那么对话框显示为:1
请教各位大侠,我的代码有什么问题?
...全文
43 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yingmu 2002-10-23
  • 打赏
  • 举报
回复
这个例子是help里边的?我看过了,没什么用。
balloonman2002 2002-10-23
  • 打赏
  • 举报
回复
PB例子:

This example also illustrates retrieval arguments. Assume dw_EmpHist contains this SQL SELECT statement and emps is defined as a number array:

SELECT EmpNbr, Sal, Rgn From Employee

WHERE EmpNbr IN (:emps)

These statements cause dw_EmpHist to retrieve Employees from the database whose employee numbers are values in the array emps:

Double emps[3]

emps[1] = 100

emps[2] = 200

emps[3] = 300

dw_EmpHist.Retrieve(emps)
yingmu 2002-10-23
  • 打赏
  • 举报
回复
这样不行,因为其实我的ld_rec_no[]本身是通过另一个数据窗口来赋值的。在我看来,应该是我的retrieve函数用的有问题。请各位大侠帮帮忙。
balloonman2002 2002-10-23
  • 打赏
  • 举报
回复
把脚本中的:long ld_rec_no[]改成string ld_rec_no
然后赋值:ld_rec_no="1,2,3"
最后照旧lds_1.retrieve(ld_rec_no)即可
yingmu 2002-10-23
  • 打赏
  • 举报
回复
甚至连ld_rec_no[]的个数都是未知的。
yingmu 2002-10-23
  • 打赏
  • 举报
回复
可我要的是参数,你这样肯定不行,这样就已经把参数当成了常数,那么SQL语句的结果就已经固定了下来。我那个给ld_rec_no[]赋值只是个假设,其实是动态的赋值,并不一定是1、2、3
muxuan 2002-10-23
  • 打赏
  • 举报
回复
in 子句里面的格式是 in (1,2,3)
yingmu 2002-10-23
  • 打赏
  • 举报
回复
for i = 1 to dw_1.rowcount()
if dw_1.isselected(i) then
temp = dw_1.object.rec_no[i]
k++
ld_rec_no[k] = temp
end if
next
if lds_1.retrieve(ld_rec_no[]) < 1 then
return
end if
messagebox('',lds_1.rowcount()) //这个消息框得出的结果是:1,所以,我认为是在retrieve函数上出了问题,你能告诉我你是怎么用这个函数的吗?
其中dw_1可以看作是w_a里边的一个数据窗口。以上所有的代码都是cb_1的代码,包括这些:
string window_title,promp_string,data_object,temp_string

temp_string="测试记录"
data_object =lds_1.dataobject
window_title = "打印" + temp_string
promp_string = temp_string
w_b.init(window_title,promp_string,data_object)
w_b.dw_b.settransobject(sqlca)
lds_1.rowscopy(1,lds_1.rowcount(),primary!,w_b.dw_b,1,primary! )
是放在最后的。
balloonman2002 2002-10-23
  • 打赏
  • 举报
回复
我试了一下,lds_1.retrieve(ld_rec_no)这种用法确实能够正确取出数据;
因此建议:
1、检查record.REC_NO是不是LONG型;
2、检查你的WHERE ( theme.i_d = record.qus_id ) AND
record.REC_NO in ( :rec_no )对应的是不是确实只能选出1条记录;

611

社区成员

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

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