求助
好像都是资料没人提问
那就偶先来提问
如何在数据窗口中实现多表更新???
请班主大人指点
小的谢谢先
[[i] 本帖最后由 老三 于 2006-9-16 09:36 编辑 [/i]] 个人能力所限所知:一个表一个表来更新,可以写个函数一次性更新! 多谢指点 [url]http://bbs.51cto.com/thread-37522-1-1.html[/url]
看看适用不,有测试过 多谢各位出手指点 数据窗口修改多个表
当数据窗口中的数据来自不同的数据表时,一般只让用户查看数据,或者只让用户修改其中一个数据表中的数据,这样可以不用编写任何脚本就能实现。但是,特殊情况下需要修改多个数据表中的数据,因为数据窗口对象不能同时修改两个数据表,只能编写脚本来实现该功能。
用脚本实现一个数据窗口对象修改多个数据表的数据,编程思想是动态修改数据窗口的Update相关属性。实际上,数据窗口修改数据表是根据在DataWindow画板中指定的属性进行修改的,这些属性在运行时可以由脚本修改,从而让数据窗口修改完一个数据表后再修改另一个数据表,直到修改完所有需要修改的数据表。需要注意的一点是,数据窗口中每一行都有一个修改标志(可以使用函数GetItemStatus 来读取该标志),当数据提交后数据窗口自动清除该标志,所以当需要修改多个数据表时,在没有修改完所有的数据表之前不能清除每一行的标志。函数dwcontrol.Update ( { accept {, resetflag } } )中的参数resetflag为boolean类型,取值为False表示不修改数据行的行标志。下面的脚本示例了在一个DataWindow中修改它所对应的多个表,该数据窗口的字段来自两个表,语句如下:
SELECT department.dept_id, department.dept_name,employee.emp_id, employee.emp_fname,employee.emp_lname FROM department, employee
在创建数据窗口时设置为Department表可修改。所以,程序运行时可以首先修改Department表,如果修改数据表成功,则进行第二个数据表的修改。首先设置要修改第二个数据表的哪些字段、哪些字段作为主键、要修改的数据表表名,然后使用Update语句开始修改数据表。如果第二个数据表修改成功,则再修改第三个数据表,直到修改完所有的数据表。在本例中只有两个数据表要修改,脚本如下:
Int li_ResultUpdate
li_ResultUpdate = dw_1.Update(True,False)//接受最后一个字段内容,并且不清除行修改标志
//如果对Department表的修改成功,下一步就要修改另一个表Employee
If li_ResultUpdate = 1 Then
//首先,关掉对Department表的修改
dw_1.ModIfy('department_dept_name.Update = "No"')
dw_1.ModIfy('department_dept_id.Update = "No"')
dw_1.ModIfy('department_dept_id.Key = "No"')
//使Employee表成为新的可修改表
dw_1.dwModIfy('DataWindow.Table.UpdateTable = ~'employee~' ')
dw_1.ModIfy('employee_emp_id.Update = "Yes"')
dw_1.ModIfy('employee_emp_fname.Update = "Yes"')
dw_1.ModIfy('employee_emp_lname.Update = "Yes"')
dw_1.ModIfy('employee_emp_id.Key = 'Yes' ' )
//然后修改Employee表
li_ResultUpdate = dw_1.Update()
If li_ResultUpdate = 1 Then
Commit Using SQLCA;
Else
MessageBox("修改错误!", "数据修改错误,错误代码" + String(SQLCA.SqlDBCode) + "~r~n错误原因:" + SQLCA.SqlErrText)
Rollback Using SQLCA;
End If
//恢复数据窗口开始时的属性,以便下一次用户点击“保存”按钮时
//程序能够正确执行
dw_1.ModIfy('department_dept_name.Update = "Yes"')
dw_1.ModIfy('department_dept_id.Update = "Yes"')
dw_1.ModIfy('department_dept_id.Key = "Yes"')
dw_1.ModIfy('DataWindow.Table.UpdateTable = ~'department~' ')
dw_1.ModIfy('employee_emp_id.Update = "No" ')
dw_1.ModIfy('employee_emp_fname.Update = "No" ')
dw_1.ModIfy('employee_emp_lname.Update = "No'' ')
dw_1.ModIfy('employee_emp_id.Key = "No" ')
Else
MessageBox('Update of department table failed', 'Rolling back changes To department')
Rollback Using SQLCA;
End If 多谢
页:
[1]