关于多个表做主从,如何使用UPDATESQL控件!答对满意300分送上! (66分)

  • 主题发起人 主题发起人 zk75210
  • 开始时间 开始时间
Z

zk75210

Unregistered / Unconfirmed
GUEST, unregistred user!
我将一张100多字段的大表分成了4张少字段的表,后台用SQL SERVER 2000。
使用QUERY控件用SQL语句将4张表的数据读出,但是如何同时给4张表填写进相互关联的数据
成了问题。 别人说要用UpdateSql控件才能实现。想问问各位高手! 这个控件大致使用方法
和使用顺序!怎样使用!!!??? 谢谢!急!!!
 
哪个帮助我??
 
我不知道你说的4张表是有两层还是有多层,如果用updatesql控件是可以实现,而且有时候是
唯一的方法,但是我现在试验了很长时间,发现这个控件有一些小问题,比如更新表时,如果
光标不离开当前编辑行就用applyupdate提交的话,会出现两个一模一样的行,当然其中一个是
在缓存中的,有没有那位高手发现过这个问题?怎样解决?[:(!]
 
首先﹐请先把Query1的UpdateObject属性设成UpdateDepartment﹐接着连续点选UpdateDepartment二下开启UpdateSQL的编辑器﹐你可以把DEPARTMENT资料表指定给这个组件﹐然后选出你想要Update的数据域位﹐最后点选[Generate SQL]功能按钮﹐TUpdateSQL组件将会自动帮你产生Update的SQL命令﹐只要再点选[SQL]页次﹐你就可以看到那些SQL命令。
接下来﹐请你把Query1的UpdateObject属性改成UpdateEmployee﹐然后开启UpdateEmployee的UpdateSQL编辑器重复上述的步骤﹐让UpdateEmployee可以自动产生Update用的SQL命令。建立上述两个UpdateSQL组件的目的就是为了分别Update在Query1使用到的DEPARTMENT及EMPLOYEE资料表﹐而这些动作必须依赖QUERY1产生的DataSet 来进行﹐这也是为什幺我们要把DataSet设在BDE的Cached Buffer里面。因为如此一来﹐你才能各个击破地分别把每个资料表的异动资料写回到数据库中。
当你把Query1的属性CachedUpdates设成True之后﹐任何针对Query1产生的DataSet异动的结果都会被记录在前端BDE的Cached Buffer内﹐只有执行Query1.ApplyUpdates命令时﹐这些存放在BDE Cached Buffer内的所有异动资料才会被写入数据库中。当BDE把Buffer内的异动记录一笔一笔地写到数据库时﹐每写入一笔就会去呼叫Query1的OnUpdateRecord事件程序一次﹐这时候﹐你就可以把Update每个资料表的程序写在这个事件程序内﹐如下所示﹕
procedure TDM.Query1UpdateRecord(DataSet:TDataSet; UpdateKind:TUpdateKind; var UpdateAction:TUpdateAction);
begin
//先把Employee的异动记录写回数据库内
DM.Query1.UpdateObject:=UpdateEmployee;
UpdateEmployee.SetParams(UpdateKind);
UpdateEmployee.ExecSQL(UpdateKind);
//再把Department的异动记录写回数据库内
DM.Query1.UpdateObject:=UpdateDepartment;
UpdateEmployee.SetParams(UpdateKind);
UpdateEmployee.ExecSQL(UpdateKind);
UpdateAction:=uaApplied;
end;
 
后退
顶部