51CTO技术论坛_中国领先的IT技术社区's Archiver

ribut9225 发表于 2006-8-25 15:47

求助

好像都是资料
没人提问

那就偶先来提问

如何在数据窗口中实现多表更新???

请班主大人指点
小的谢谢先

[[i] 本帖最后由 老三 于 2006-9-16 09:36 编辑 [/i]]

cnchenjie 发表于 2006-8-26 10:37

个人能力所限所知:一个表一个表来更新,可以写个函数一次性更新!

ribut9225 发表于 2006-8-26 12:13

多谢指点

老三 发表于 2006-8-28 11:58

[url]http://bbs.51cto.com/thread-37522-1-1.html[/url]
看看适用不,有测试过

ribut9225 发表于 2006-8-28 14:03

多谢各位出手指点

潇洒老乌龟 发表于 2006-9-2 23:24

数据窗口修改多个表

  当数据窗口中的数据来自不同的数据表时,一般只让用户查看数据,或者只让用户修改其中一个数据表中的数据,这样可以不用编写任何脚本就能实现。但是,特殊情况下需要修改多个数据表中的数据,因为数据窗口对象不能同时修改两个数据表,只能编写脚本来实现该功能。
  用脚本实现一个数据窗口对象修改多个数据表的数据,编程思想是动态修改数据窗口的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

ribut9225 发表于 2006-9-4 09:23

多谢

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.