请教三层数据库多表join的更新方法? (50分)

  • 主题发起人 主题发起人 china359
  • 开始时间 开始时间
C

china359

Unregistered / Unconfirmed
GUEST, unregistred user!
请教三层数据库多表join的更新方法?
有什么组件能够分析join的sql叙述,然后当数据需要更新时再由这个组件自动的产生程序代码,把数据一一更新回每一个数据表?
如没有组件,具体应当如何操作?
 
ADO不是就支持多表Join的更新吗?
 
可以看看李维的《delphi 5.x分布多层应用系统篇》,给个提示:
在服务器端响应TDataSetProvider的BeforeUpdateRecord事件,在事件处理函数中判断每一个字段隶属的数据表是哪一个,然后使用一个独立的query手工把数据更新到每个表中
 
to gubone:
ado多表join 运行不了,晕。。
 
能更新的话,可以保证数据是正确的吗?
为什么不用另一个query手工更新?
 
你们作三层是用ado还是bde?
 
和ADO还是BDE没有关系
如下响应TDataSetProvider的BeforeUpdateRecord事件
procedure TMultiTableUpdateServer.dspMultiJoinsBeforeUpdateRecord(
Sender: TObject;
SourceDS: TDataSet;
DeltaDS: TCustomClientDataSet;
UpdateKind: TUpdateKind;
var Applied: Boolean);
begin
if UpdateKind = ukModify then
begin
query2.Close;
query2.SQL.Clear;
query2.SQL.Add('update table1 set field1=:field1 where field2=:field2');
query2.Params.ParamByName('field1').Value := DeltaDS.fieldbyName('field1').Value;
query2.Params.ParamByName('field2').Value := DeltaDS.fieldbyName('field2').Value;
query2.ExecSQL;
//同理更新table2
query2.SQL.Clear;
query2.SQL.Add('update table2 set field3=:field3 where field4=:field4');
query2.ParamByName('field3').Value := DeltaDS.fieldbyName('field3').Value;
query2.ParamByName('field4').Value := DeltaDS.fieldbyName('field4').Value;
query2.ExecSQL;
end;
//删除和插入....
Applied := True;
end;
 
to mickeyboy,
请问在客户端如何调用?
if UpdateKind = ukModify then
?
 
看來你還是沒有明白,三層數據更新的原理.
建議詳細看看李維的那本書,
 
客户端只要调用clientdataset1.applyupdate(-1)就行,
if updatekind = ukmodify then
这是在数据有修改时执行的代码
if updatekind = ukdelete then
这是删除记录时执行,执行多条SQL语句来删除不同表
if updatekind = udinsert then
这是插入记录,用insert into语句在表中插入记录
 
后退
顶部