如何对以下情况进行查询整理

wswxy 2008-10-06 12:17:42
比如有ABCDEF.....Z 26个学生姓名
分别在不同的: 一年级,二年级....六年级. 共六个年级
所在楼层: 一层,二层,三层,四层 共四层
分为: 男生,女生 二个大类

设置了四个下拉选选择框.ddlb_性别,ddlb_班级,ddlb_楼层,ddlb_姓名
现在我选择ddlb_姓名下拉时它里边显示为26个学生中的符合条件的姓名.
我怎么使用语言来选择或排除符合条件的姓名呢?
比如条件:男生,一年级,二层楼 的人名是?
用if .... then
if ..then
else
if ..then
end if
之类的语句我不会做了.求帮助
...全文
106 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wswxy 2008-10-14
  • 打赏
  • 举报
回复
非常感谢各位前辈.但我没有运用数据库.因为一开始是为了对我所学PB的总结和练习.再者是为了把所编的文件组成一个EXE文件,本以为编译了就是一个文件可以非常简单的用.但没想到PB最后还是搞了一堆文件来配合我编译的EXE文件来执行.
所以没有动用表.
最后我用了50个IF..... THEN /END IF来完成了我的设计.在本次设计中我学到了不少东西.
我先把 条件列清:
int a=0,b=0,c=0
if rb_男.checked=true then
a=1
elseif rb_女.checked=true then
a=2
end if
if rb_一年级.checked=true then
b=1
elseif rb_二年级.checked=true then
b=2
elseif rb_三看级.checked=true then
b=3
elseif rb_四看级.checked=true then
b=4
end if
if ddlb_k.text="班级" then
c=0
elseif ddlb_k.text="一班"then
c=1
elseif ddlb_k.text="二班"then
c=2
elseif ddlb_k.text="三班"then
c=3
elseif ddlb_k.text="四班"then
c=4
elseif ddlb_k.text="五班"then
c=5
end if
//列出各种情况
if a=1 and b=1 and c=2 then //男生中一年级二班的
ddlb_姓名.reset()//清除原内容
ddlb_姓名.additem("刘明")
ddlb_姓名.additem("张玉")
...............
...........
..........
end if
if a=2 and b=1 and c=3 then //女生中一年级一班的
ddlb_1.reset()//清除原内容
ddlb_姓名.additem("小玉")
.........
end if
好在人不多.写了50个句子.

这法子笨.但可以用了.
不知道大家对我的方法有什么意见.
我没用表.
就是练习.将来要是人员一变动.我的程序就费了.呵呵
softvery 2008-10-11
  • 打赏
  • 举报
回复
你这个后台应该对应的是一张表吧?性别,班级,楼层,姓名
建立一个数据窗RETRIEVE这张表,在窗口里尽力一个DW或者DS.
建立一个FUNCTION过滤DW,在DDLB的SELECTIONCHANGED中调用该FUNCTION
这样避免了重复读取数据库

FUNCTION内容

dw.setfilter("性别='"+ddlb_性别.text+" and 班级='"+……)
dw.filter()
for ll_row to dw.rowcount()
ddlb_姓名.AddItem(dw.getitemstring(ll_row,"姓名")
next
huayang023 2008-10-11
  • 打赏
  • 举报
回复
建一张表:students_dict
字段:sex,grade,floor,name
将基本数据存入这张表中。
string ls_sex
string ls_grade
string ls_floor
string ls_name
integer n,i
ls_sex = trim(ddlb_性别.text)
ls_grade = trim(ddlb_班级.text)
ls_floor = trim(ddlb_楼层.text)

//创建游标
select count(name) into :n
from students_dict
where sex = :ls_sex
and ls_grade = :ls_grade
and ls_floor = :ls_floor;

declare student_name_select cursor for
select name
from students_dict
where sex = :ls_sex
and ls_grade = :ls_grade
and ls_floor = :ls_floor;

open student_name_select;

for i = 1 to n
FETCH student_name_select INTO :ls_name;
ddlb_姓名.AddItem(ls_name)
next
Methodor 2008-10-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wswxy 的回复:]
我不读取数据库,我想达到的目地是:
如果条件:
ddlb_性别.text=男,
ddlb_班级.text=一班
ddlb_楼层.text=二楼
结果是下拉框中显示为:
ddlb_姓名.additem(a)
ddlb_姓名.additem(c)
ddlb_姓名.additem(e)
ddlb_姓名.additem(f)
ddlb_姓名.additem(d)
ddlb_姓名.additem(w)
ddlb_姓名.additem(o)
再如果条件是:
ddlb_性别.text=女,
ddlb_班级.text=三班
ddlb_楼层.text=一楼
结果是下拉框中显示为…
[/Quote]

用数据库的话通过ds处理起来应该很方便的,如果不使用,这里if使用起来太烦琐,可用choose case代替,逻辑也相对简单清晰一些
金大哈 2008-10-11
  • 打赏
  • 举报
回复
wswxy

5楼的做法是不是有点不太好

数据如果在数据库里没有,写死也不符合编程的道理啊[主要是蛮多的]

既然数据库里有了 你应该是读取数据库的 也许4楼说的做法不符合你的要求


那7,8楼的做法你可以参考一下
richardcyq 2008-10-11
  • 打赏
  • 举报
回复
每选一个ddlb,过滤一次隐藏的dw
liubocy 2008-10-09
  • 打赏
  • 举报
回复
原来ddlb_姓名是来显示你的结果集啊,不就多了到弯了。
用那啥‘枪’的方法就可以了撒,不过就是把dw里的数据添加到ddlb_姓名里去。

动态设置dw的where后的条件就可以了撒。用getsqlselect,setsqlselect函数

要在你窗口放个隐藏的dw,或者用datastore也行
wswxy 2008-10-09
  • 打赏
  • 举报
回复
有人会吗?
-狙击手- 2008-10-06
  • 打赏
  • 举报
回复
1、你可以自己判断ddlb的内容,然后通过函数修改DW的SQL语句,然后retrieve()
2、提取三个ddlb的内容在前台使用动态SQL
3、在后台写一个过程,前台提取三个参数传给过程
sinlan 2008-10-06
  • 打赏
  • 举报
回复
object dropdownlistbox
event selectchange

取各个ddlb的text就行了撒
wswxy 2008-10-06
  • 打赏
  • 举报
回复
我不读取数据库,我想达到的目地是:
如果条件:
ddlb_性别.text=男,
ddlb_班级.text=一班
ddlb_楼层.text=二楼
结果是下拉框中显示为:
ddlb_姓名.additem(a)
ddlb_姓名.additem(c)
ddlb_姓名.additem(e)
ddlb_姓名.additem(f)
ddlb_姓名.additem(d)
ddlb_姓名.additem(w)
ddlb_姓名.additem(o)
再如果条件是:
ddlb_性别.text=女,
ddlb_班级.text=三班
ddlb_楼层.text=一楼
结果是下拉框中显示为:
ddlb_姓名.additem(v)
ddlb_姓名.additem(x)
ddlb_姓名.additem(w)
ddlb_姓名.additem(z)
.....
我不知道怎么写了.
这个好像是用IF 嵌套本人不会.
金大哈 2008-10-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wswxy 的回复:]
二楼没听明白.一楼的有点麻烦.要取20多次呢相当于组合数.有没有简单的?
[/Quote]

1楼的一点都不麻烦你不是有几个条件来选择符合你条件的数据吗


在event selectchange
里写个游标 获取游标数据的条件有3个 【总共是4个条件】
去另外3个ddlb作为条件用like 其它3个如果有数据则是选择的数据 如果没有选择则是 %

select col_1,col_2
from table_1
where cl_1 like :x1 and cl_2 like :x2 and cl_3 like x3 ;

这个应该不复杂的
wswxy 2008-10-06
  • 打赏
  • 举报
回复
二楼没听明白.一楼的有点麻烦.要取20多次呢相当于组合数.有没有简单的?

1,108

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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