发布网友 发布时间:2023-06-05 02:05
共1个回答
热心网友 时间:2023-10-05 07:13
在从事使用powerbuilder进行数据库开发的过程中 常常碰到要使用列表框来选择数据 但是普通的下拉列表框并没有提供和数据相连接的方法 而使用数据窗口的子下拉列表框来代替又显得有些别扭 下面介绍一种好看又好用的方法
如果使用指针把要连接的数据一条一条地从select 语句的查询结果中fetch 出来 然后再把数据additem到下拉列表框中去 虽然这也是一种可行的方法 但是他的速度不能令人满意 太受数据量的影响 我们可以利用powerbuilder 最推崇的数据窗*术作为数据库和下拉列表框连接的桥梁 这种方法即方便快速又安全可靠
下面制作的下拉列表框
一 打开powerbuilder的 select user object 画笔 选择 在 new user object 中选择 Visual 类的 Standard 项并按下 在弹出来的 Select Standard Visual Type 对话框中选择列表中的 dropdownlistbox 项并按下 接着加入一些实例变量 选择 Declare 菜单项的 Instance Variables 加入变量的声明 datastore ids_user int il_row 并按下
我们要对新的对象进行一些* 在对象的 constructor 事件中加入程序
sorted = false //这句非常必要
reset()
二 把数据检索出来放到ids_user变量里
选择菜单 Declare 项的 User Object Function 在弹出来的对话框中按下新建一个对象函数命名为 init
参数有一个
sqlstr string
返回值为整型 integer
现在我们需要动态地创建datastore
在init函数中写下
//integer init(sqlstr string) 开始
long ll_rowcount
long ll_row
string ls_sql
string errors
string ls_return
ids_user = create datastore
//根据sql语句产生数据窗口
ls_return = sqlca SyntaxFromSQL(sqlstr style(type=grid) errors)
//sql语句有错误
if len(errors) > then
messagebox( 错误 errors)
return
end if
//根据语法动态创建数据窗口
ids_user create(ls_return)
ids_user settransobject(sqlca)
ll_rowcount = ids_user retrieve()
//无数据返回
if ll_rowcount= then
return
end if
//把数据插入控件
for ll_row = to ll_rowcount
this additem(string(ids_user Object Data[ll_row ]))
next
//成功返回
return
//integer init(sqlstr string) 结束
现在下拉列表框已经能显示数据了 但是我们在选择数据的同时往往需要的不是它显示出来的值 比如显示的是人员姓名 而我们需要的是工号 难道再使用select语句把需要的数据检索出来吗?有了下面的程序 我们就不必头痛了
重复上面建立函数的步骤 新建一个名为getdata的user object函数 返回值为 any 并在函数中写下程序
//any getdata() 开始
any la_return
long ll_row
if text = then
return
end if
//没有选择或没有检索到数据
if ids_user rowcount() = or il_row = then
return
end if
//在缺省情况下返回第二列的数据
la_return = ids_user Object data[il_row ]
return la_return
//andy getdata() 结束
现在还不能返回正确的数据 还需要一个函数setidx(idx int) 程序如下
//setidx(idx int) 开始
il_row = idx
//setidx(idx int) 结束
现在这个user object已经完成了 我们来做一下试验试一试 新建一个应用app_test 一个窗口w_main 按照刚才的方法创建一个user object:uo_dbdropdownlistbox 放入w_main中
在app_test的open事件中写下连接数据库的语句并加上open(w_main)
在w_main的open事件中写下
int li_result
li_result = uo_ init( select name id from sysobjects )
在uo_ 的selectionchanged事件中写下 setidx(index)
messagebox( 提示 看 + string(this getdata()))
这时我们的用户对象已经能根据选择的name返回相应的id了
编辑推荐
数据仓库与数据挖掘培训视频教程
lishixin/Article/program/PB/201311/24638