多源数据窗口的数据修改
来源:岁月联盟
时间:2010-08-30
KEY ("studentid")) ; 并在两张表中录入几条验证测试数据如图1、图2。
图1 classtable表 图2 studenttable表建立数据窗口名为:d_grid_class_student,它的Select语句为SELECT "classtable"."classid", "classtable"."classname", "studenttable"."studentid", "studenttable"."sname", "studenttable"."sex", "studenttable"."address", "studenttable"."telephone" FROM "classtable", "studenttable" WHERE ( "classtable"."classid" = "studenttable"."classid" ) ; 根据数据窗口d_grid_class_student的属性,设置列的taborder值,这样数据窗口可以更新,因为powerbuilde默认该数据窗口是不能更新的,例如我们可以将列"classtable"."classname"、"studenttable"."studentid"、"studenttable"."sname"、"studenttable"."sex", "studenttable"."address"、 "studenttable"."telephone" 分别为10,20,30,40,50,60,由于"classtable"."classid"是两张表关联的列,所以我们不设置classid的taborder值,仍然是默认的0。如果想同时更新两张表的classid列, 我们可以用sql
语句在数据窗口控件的itemchanged事件中进行处理.3 设置数据窗口属性点击菜单Rows——>Update Properties,设置此数据窗口Allow Updates,Table to Update设为classtable,Updateable Columns为classtable.name。如图3同时也可以在数据窗口画板通过其他对对话框设置数据窗口的如排序等相关属性.
图3 设置数据窗口update属性 图4 程序运行测试4 编写脚本更新数据窗口: 在应用对象里编写数据库连接脚本.建立窗口如图,窗口命名为w_update_class_student,并且在窗口中添加数据窗口控件dw_1,添加更新修改按钮cb_1,和退出按钮cb_2在窗口的open事件中编写如下脚本:dw_1.SetTransObject(SQLCA)dw_1.retrieve()在窗口中的更新修改按钮的clicked事件中编写如下脚本://下面脚本更新修改classtable表,因为我们先前已在数据窗口画板中设置classtable为可更新。long ll_rtn ll_rtn = dw_1.update(true, false)if ll_rtn = 1 then//下面的脚本是关闭对classtablet表的修改dw_1.Modify("classtable_classname.Update = 'No'")dw_1.Modify("classtable_classnid.Key = 'No'")本例中可以修改classtable表的calssname列。 至此程序完成了对第一张表calsstabl的更新修改后又关闭对classtable的更新修改,因此接下来可以修改另外的表。//使用modify()函数设置studenttable表成为新的可修改表dw_1.Modify("DataWindow.Table.UpdateTable = 'studenttable'") dw_1.Modify("studenttable_studentid.Update = 'Yes'")dw_1.Modify("studenttable_sname.Update = 'Yes'")dw_1.Modify("studenttable_sex.Update = 'Yes'")dw_1.Modify("studenttable_address.Update = 'Yes'")dw_1.Modify("studenttable_telephone.Update = 'Yes'")dw_1.Modify("studenttable_studentid.Key = 'Yes'")//本例可以修改studenttable表中是所有列//下面的脚本完成更新修改studenttabled表ll_rtn = dw_1.Update()IF ll_rtn = 1 THENCOMMIT USING SQLCA;dw_1.retrieve()messagebox("系统提示信息","更新成功!")ELSEROLLBACK USING SQLCA;MessageBox("系统提示信息", "更新失败!")END IF//重新恢复两张张表的修改属性标志到初始状态dw_1.Modify("classtable.classname.Update = 'Yes'")dw_1.Modify("classtable_classid.Key = 'yes'")dw_1.Modify("DataWindow.Table.UpdateTable = 'classtable'") dw_1.Modify("studenttable_studentid.Update = 'No'")dw_1.Modify("studenttable_sname.Update = 'No'")dw_1.Modify("studenttable_sex.Update = 'No'")dw_1.Modify("studenttable_address.Update = 'no'")dw_1.Modify("studenttable_telephone.Update = 'no'")dw_1.Modify("studenttable_studentid.Key = 'No'")ELSEROLLBACK USING SQLCA;MessageBox("系统提示信息", "更新失败!")END IF 5结束语 经过测试运行顺利的完成了两张表的更新,如果更新多个表也是一样的方法.如图4,我们可以更新修改班级的名字或者改变学号、姓名、家庭住地址通讯电话等相关信息.如图.这样就完成了对两个表的更新,当然我们可以更新多个表道理和方法是一样的,甚至我们可以编写一个函数,在需要时候调用。:[1]催巍.数据窗口程序设计[M].北京:清华大学出版设,2000.
上一篇:一种文本分类数据挖掘的技术