注册 登录
编程论坛 PowerBuilder

如何在相同的数据窗口对象中进行不同条件检索

piaoling121 发布于 2006-04-04 16:12, 1772 次点击
请教各位,如何在同一个数据窗口对象内对不同条件进行检索获取不同信息。比如根据几个单选按钮的不同条件,进行检索获取不同的信息,在相同的数据窗口对象中显示
19 回复
#2
wsl0002006-04-05 10:52
用setfilter()和filter()函数
#3
ヤ順祺冄繎ヤ2006-04-05 11:02
你挺强的呀!你现在在用PB吗?
#4
songdeguang2006-04-05 11:33

不可能同时显示吧?
不是的话 在每个按钮代码的最后写上  dw_1.settransobject(sqlca);
dw_1.retrieve();

#5
ヤ順祺冄繎ヤ2006-04-05 11:42
去看一下filter()与retrieve()的区别吧!
怎么还会在每个按钮下写retrieve()呢!~
#6
songdeguang2006-04-05 13:21
哦 同意楼上的  哈哈 
#7
songdeguang2006-04-05 13:25
斑竹 说说他们的区别 我查查都没英文  不太清楚
#8
songdeguang2006-04-05 13:25
都是英文  不太清楚
#9
ヤ順祺冄繎ヤ2006-04-05 14:03

汗。。。
我到現在還沒遇到過一個比我英文還差的呢。
我從學英語以來從來就沒及過格。我說的是真的!
高考就是因爲英語太差才去垃圾學校呢!
filter()與retrieve()
當數據窗口執行retrieve()後就把數據提取到數據窗口了。
速度很慢,但數據准確,filter()是在本地在執行的,速度很快,不過也有一個缺點,不能及時更新數據庫,但是在此題看來不用攷慮這些!
只要在窗口打開後執行一個retrieve()後,就可以直接用filter()
這樣就可以提高效率。
我也說不明白,不過就是這個意思,不知道你懂了沒?

#10
piaoling1212006-04-06 14:44
还要请教,或许是我没有清楚的表达我的意思,setfilter()和filter是过滤数据窗口内的数据而且过滤条件也应该与数据窗口内的列有关系,但是我要依靠表中的其它列来作为条件,进行过滤,我想这种方法不可行,还请版主帮忙。多谢
#11
ヤ順祺冄繎ヤ2006-04-06 14:56
以下是引用piaoling121在2006-4-6 14:44:00的发言:
还要请教,或许是我没有清楚的表达我的意思,setfilter()和filter是过滤数据窗口内的数据而且过滤条件也应该与数据窗口内的列有关系,但是我要依靠表中的其它列来作为条件,进行过滤,我想这种方法不可行,还请版主帮忙。多谢

不知道我看懂你的意思了沒?
你的意思就是在說你的過濾條件是沒有在數據窗口中的列是吧! ̄
但是都是一張表是吧 ̄
你可以在SQL裏進行選擇後。。在數據窗口中將其列給刪除,不讓其顯示出來。
這樣也可以達到用數據窗口過濾的問題。不知道你問的是不是這個意思。

#12
piaoling1212006-04-06 16:09
真的不好意思,还要麻烦版主,请教一下怎么设置setfilter()
的参数,因为我所要过滤的条件是个变量,其值在ddlb_1.text中如果我设置一个变量string h
h=ddlb_1.text
那我怎么过滤,刚才弄了半天还是没做出来,请帮帮忙多谢了
#13
ヤ順祺冄繎ヤ2006-04-06 16:13
[CODE]
str_filter = '列名 ='+ hh //列名为与其ddlb关系的数据列,并不显示,hh为你所接受的ddlb_1.text值
strfilter(str_filter)
filter()
[/CODE]
#14
piaoling1212006-04-06 16:34

char hh,ye
w_zhudang_shang_shangpin.dw_1.settransobject(sqlca)
int bbb
if rb_1.checked=true and ddlb_1.text <> "" then
hh=ddlb_1.text
ye='tc_code='+hh
w_zhudang_shang_shangpin.dw_1.retrieve()
w_zhudang_shang_shangpin.dw_1.SetFilter("")w_zhudang_shang_shangpin.dw_1.SetFilter(ye)

w_zhudang_shang_shangpin.dw_1.Filter( )

//bbb=w_zhudang_shang_shangpin.dw_1.rowcount()

close(parent)
w_zhudang_shang_shangpin.cb_1.enabled=true
w_zhudang_shang_shangpin.cb_3.enabled=true
w_zhudang_shang_shangpin.cb_5.enabled=true
elseif rb_2.checked=true then
w_zhudang_shang_shangpin.dw_1.retrieve()
close(parent)
w_zhudang_shang_shangpin.cb_1.enabled=true
w_zhudang_shang_shangpin.cb_3.enabled=true
w_zhudang_shang_shangpin.cb_5.enabled=true
else
messagebox("系统提示","请选择细分类")
end if

还要麻烦版主,你帮我看看这段程序,还是不好用啊,多谢了

#15
ヤ順祺冄繎ヤ2006-04-06 16:45
以下是引用piaoling121在2006-4-6 16:34:00的发言:

string hh,ye
w_zhudang_shang_shangpin.dw_1.settransobject(sqlca)
int bbb
if rb_1.checked=true and ddlb_1.text <> "" then
hh=ddlb_1.text
ye='tc_code='+hh
w_zhudang_shang_shangpin.dw_1.retrieve()
w_zhudang_shang_shangpin.dw_1.SetFilter("") //什麽意思?
w_zhudang_shang_shangpin.dw_1.SetFilter(ye)
w_zhudang_shang_shangpin.dw_1.Filter( )
//bbb=w_zhudang_shang_shangpin.dw_1.rowcount()
close(parent)
w_zhudang_shang_shangpin.cb_1.enabled=true
w_zhudang_shang_shangpin.cb_3.enabled=true
w_zhudang_shang_shangpin.cb_5.enabled=true
elseif rb_2.checked=true then
w_zhudang_shang_shangpin.dw_1.retrieve()
close(parent)
w_zhudang_shang_shangpin.cb_1.enabled=true
w_zhudang_shang_shangpin.cb_3.enabled=true
w_zhudang_shang_shangpin.cb_5.enabled=true
else
messagebox("系统提示","请选择细分类")
end if

还要麻烦版主,你帮我看看这段程序,还是不好用啊,多谢了

麻烦你编程有点規範好不?好難看。
再加上要寫注釋,以後大程序你就會明白的,沒注釋即使是你前兩天才寫的代碼就不一定能看懂。
你的代碼沒大問題呀,不能運行嗎?
還是DW裏你沒選擇tc_code這個列?

#16
piaoling1212006-04-06 17:05
呵呵,是啊,版主说的对,本人就是比较不羁那种人。所以写的程序比较乱,以后会改的,不过tc_code列我在dw里已经选了,还是不好用
w_zhudang_shang_shangpin.dw_1.SetFilter("") //什麽意思
这列的意思是如果要删除DATAWEINDOW对象的过滤准则,应先将setfilter函数的format参数设置为空串(""),
运行报错
Types of expressions must match.
并不是按要求提取所需要的数据,而是显示所有数据
#17
ヤ順祺冄繎ヤ2006-04-06 17:27
Types of expressions must match.

类型不匹配,你将数据类型变一下就可以了.
你哪个tc_code是什么类型
转换一下就可以了.
#18
piaoling1212006-04-06 18:18
版主,可以交个朋友吗,有很多问题需要请教

[ 本帖最后由 piaoling121 于 2012-4-15 13:28 编辑 ]
#19
piaoling1212006-04-06 19:11
[QUOTE][CODE][CODE][CODE]

string hh,ye

if rb_1.checked=true and ddlb_1.text <> "" then
hh=ddlb_1.text
ye="tc_code="+ hh
w_zhudang_shang_shangpin.dw_1.settransobject(sqlca)
w_zhudang_shang_shangpin.dw_1.retrieve()
w_zhudang_shang_shangpin.dw_1.SetFilter("")


w_zhudang_shang_shangpin.dw_1.SetFilter(ye)

w_zhudang_shang_shangpin.dw_1.Filter( )



close(parent)

w_zhudang_shang_shangpin.cb_1.enabled=true
w_zhudang_shang_shangpin.cb_3.enabled=true
w_zhudang_shang_shangpin.cb_5.enabled=true

elseif rb_2.checked=true then
w_zhudang_shang_shangpin.dw_1.settransobject(sqlca)
w_zhudang_shang_shangpin.dw_1.retrieve()
close(parent)

w_zhudang_shang_shangpin.cb_1.enabled=true
w_zhudang_shang_shangpin.cb_3.enabled=true
w_zhudang_shang_shangpin.cb_5.enabled=true
else
messagebox("系统提示","请选择细分类")
end if

红色的这段代码,报错expression is not valid(这是在下拉列表框内为字母的时候)Types of expressions must match.(这是在下拉列表框为数字的时候)不知道该怎么办了,还是请版主拉兄弟一把,这个程序比较着急用,可是就做不对了,多谢了

#20
ヤ順祺冄繎ヤ2006-04-07 08:47
你慢慢試著改一下,
前面哪個錯誤是提示,表達式無效,後面一個是提示類型爲數據型
你數據tc_code是什麽類型?
你把hh=string(ddlb_1.text)轉換。
1