万卷书>>电脑书籍>>程序设计>>pb程序设计>>PowerBuilder使用技巧集

WANJUANSHU.COM

Power Builder数据录入同步显示的实现

西安市兴隆园小区长庆设计院
郭少林



 

---- PowerBuilder是数据库管理系统的开发工具。具有灵活、友好、方便、快捷等特点,适用于各种不同的数据库管理系统,是开发数据库系统的好帮手。


 

---- 在我们的具体编程中经常遇到:要在同一个数据窗口中,当输入部分字段后,另一字段以此为检索字段并以不同的表为基础检索出满足条件的数据,是我们为用户编写出方便友好的界面所经常遇到的。如:录入人员时,根据单位、部门的给定值,在人员录入窗口自动以下拉列表框方式显示出对应单位和部门的所有的人员。然而数据窗口控件中的数据窗口只能对一个表操作,要在此时将要录入的字段定义为下拉列表框,则其数据项来源是从定义窗口时输入的几个固定的数据、不能在软件运行过程中随时对项目作出增加或删除,这在软件运行过程中无法根据人员的变动实现管理。且在同一个数据窗口中不能对不同的表实现操作。我在工作中用控件中的下拉列表框作中间过渡避免了上述的尴尬。


 

---- 1.实现的工作流程(略)


 

---- 2.在合适的位置建立下拉列表框


 

---- 如要在输入”设计人”时显示出具有专业和所别值的人员序列,则在”设计人”处贴上下拉列表框控件(ddlb_people):


 

---- controls?DropDownListBox


 

---- 调整其大小(高度由字号确定);


 

---- 3. 给该控件编码


 

---- 下拉数据窗口的激发事有13个,根据具体情况选定激发事件,在这里为getfocus事件的编码如下:


 

long row_no
string people,zhuanye,user_dept
zhuanye=dw_input.getitemstring(row_no,1)
//从dw_input提取zhuanye值
user_dept=dw_input.getitemstring(row_no,2)
//从dw_input提取user_dept值
if not(old_zhuanye1=zhuanye and
old_user_dept1=user_dept)then
	reset()
	declare c1 cursor for
	select people
	from csd_people
	where zhuanye=:zhuanye and user_dept=:user_dept;
	open c1;
	lab1:
		fetch c1 into :people;
		additem(people)
//取记录,指针下移一条
		if sqlca.sqlcode=0 then
//取记录成功
			goto lab1
		end if
	close c1;
	old_zhuanye1=zhuanye
	old_user_dept1=user_dept
end if


 

---- 4. 把下拉列表框ddlb_people值传给dw_input数据窗口


 

---- 此时下拉列表框ddlb_people的显示值与dw_input要求值还没有关联,为达到灵活的ddlb_people输入值赋给dw_input相应字段,只需在保存本记录的命令激发事件中合适的位置加入语句:


 

		//说明语句
		designer=ddlb_people.text
		//其它处理语句
		//保存记录处理语句


 

---- 下面是一段完整的保存一条记录的程序:


 

integer m,n
string zhuanye,user_dept,docu_no,
tu_name,proj_mu,proj_fm,proj_zfm,&
proj_zm,proj_no,designer,sh_name,
proj_leader,save_path,temp
newrow=dw_input.getrow()
dw_input.accepttext()


temp=dw_input.getitemstring(newrow,3) temp=replace(temp,pos(temp,"/",6),1,"-") //将档案号中的"/"换为"-" if rec_no=1 then if docu_no<>temp then //判断是否已有给定的档案号 docu_no=temp //保存本记录信息,供下一条用 zhuanye=dw_input.getitemstring(newrow,1) user_dept=dw_input.getitemstring(newrow,2) proj_zm=dw_input.getitemstring(newrow,5) proj_zfm=dw_input.getitemstring(newrow,6) proj_fm=dw_input.getitemstring(newrow,7) proj_mu=dw_input.getitemstring(newrow,8) tu_name=dw_input.getitemstring(newrow,9) designer=ddlb_designer.text //从ddlb_people获取的值 sh_name=ddlb_sh.text //从ddlb_people获取的值 proj_leader=ddlb_leader.text //从ddlb_people获取的值 save_path=dw_input.getitemstring(newrow,16)

temp=dw_input.getitemstring(newrow,10) proj_no="CSD"+temp+em_1.text dw_input.setitem(newrow,10,proj_no)

rc=update(dw_input) commit; dw_input.reset() rollback; else messagebox("错误信息","该档案号已存在!~n请更改") end if else messagebox("错误信息","电子图纸文件没有 保存!~n~n请先保存电子图纸文件") end if


 

---- 5. 结语


 

---- 本方法执行效果良好,使用人员没有数据被分离的感觉。

 
上一页 WanJuanShu.COM 下一页
WANJUANSHU.COM 万卷书