
| 出版日期:1999-09-06 总期号:855 本年期号:65 |
|
巧设pb多源数据窗口
李卫东、孙西龙 在powerbuilder中,数据窗口是靠retrieve()函数来获取数据的,要么所有的列都获取,要么都不获取,数据查询时窗口中可以得到所需的结果,但在录入时就不行了。比如:在一个广告管理系统中,我们设计两个表,一个存广告登记,一个存客户信息。在录入广告登记时输入一个客户号,应当立即出现这个客户的名称、联系人、电话等辅助提示信息。但按一般的方法,只有先保存录入的数据后再重新retrieve()才能看到这些辅助信息,这既麻烦,又不符合我们的日常习惯,怎样解决这个问题呢?我们可以用pb多源数据窗口加以解决。 下面是这个窗口的设计过程:
1)创建一个多源数据窗口(一个数据窗口中的字段来自不同的表) 本窗口采用的是一个自由格式,然后手工进行位置的调整,上一个框中是广告表中的字段,都以 ad—开头,下一框中是客户表中的字段,作为辅助信息,都以client—开头。客户号是连接两个表的键值。客户号字段的编辑属性可以设成edit加下拉数据窗口,方便使用者录入。 2)设定此数据窗口的更新属性 这个窗口从多个表选择数据,pb把这样的窗口缺省设置成不可更新,如果想让它可以正常工作,还要设置它的更新属性。 从主窗口的rows选单中单击update properties,出现下面的对话框,进行一定的设置工作,各个选项的含义相信大家一看就会明白,这里限于篇幅就不再罗嗦了。
这样就指定了ad(广告登记表)是可以更新的,凡不能更新的列,pb把它们的tab值都设为0。 3)编写数据窗口代码 建立一个窗体,然后在上面建立一个datawindow控件,并让datawindow控件的dataobject属性关联此数据窗口。然后为datawindow的itemchanged事件编写下面的程序: //定义几个变量来存放数据 string c—id,name,address,linkman, area—code,tel long c—row,c—col //记录当前的行列值 //取出当前的行与列 c—col=dw—1.getcolumn() c—row=dw—1.getrow() //第二列是客户号 if c—col=2 then //*在数据窗口上进行输入数据时,pb会自动在输入的项目上放置一个编辑框,当输入完成后,再把输入的值变换成输入项数据的类型,如果成功了,就成功了就接收数据,否则报错,原数据项的值不变。从而起到了数据保护作用。*// //下面一行是从编辑框中取出数值。 c—id=gettext() //从客户库中选出一些条件,用于提示信息 select ″client″.″name″, ″client″.″address″, ″client″.″linkman″, ″client″.″area—code″, ″client″.″tel″ into :name, :address, :linkman, :area—code, :tel from ″client″ where ″client″.″c—id″ = :c—id ; //*如果在客户库中找不到输入的编码,则返回一个错误号且禁止光标移开,这样可以保证数据的完整性*// if name=″ ″ then return 1 end if //*对数据窗口中字段赋值,使在输入客户号后马上可以看到辅助信息*// dw—1.setitem(c—row,″client—name″,name) dw—1.setitem(c—row,″client—address″,address) dw—1.setitem(c—row,″client—linkman″,linkman) dw—1.setitem(c—row,″client—area—code″,area—code) dw—1.setitem(c—row,″client—tel″,tel) end if 这是一个通用的思路,用在您的程序中时只要略加改动就可以了。 |
|||||||||||||||||