zoukankan      html  css  js  c++  java
  • DataSnap主从表实现

    服务端:添加ADOConnection,ADOQuery1,ADOQuery2。设置ADOQuery1为主表,ADOQuery2为从表。(通过 ADOQuery2.SQL.Text:= 'select * from 从表 where FKID=:主表PKID'设置)。添加DataSetProvider1和DataSetProvider2分别连接到ADOQuery1和ADOQuery2。

    客户端:添加ClientDataSet1,ClientDataSet2。ClientDataSet1连接到DataSetProvider1。双击ClientDataSet1,右键Add All Field。可以看到一个TDataSetField字段。设置ClientDataSet2的DataSetField属性为ClientDataSet1中的TDataSetField列。添加DataCourse1、DataSource2分别连接到ClientDataSet1和ClientDataSet2控件。添加DBGrid1和DBGrid2分别连接到DataCourse1、DataSource2。设置ClientDataSet1.Active:= True;这时发现ClientDataSet2也自动打开。

    自增列处理:假如主从表的主外键都是自增列,这时可以在服务端处理主从表关联。在DataSetProvider1中的BeforeUpdateRecord事件中添加如下代码:

    procedure TForm1.DataSetProvider1BeforeUpdateRecord(Sender: TObject;
    SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
    UpdateKind: TUpdateKind; var Applied: Boolean);
    begin
    if ((UpdateKind = ukInsert) and
    (SourceDS = ADOQuery2)
       {and (DeltaDS.FieldByName('PKID').Value = Unassigned)}) then
    begin
        if DeltaDS.BOF then
        begin
          qryIdentity.Close; //qryIdentity.Sql.Text:= 'select @@identity';获取主表自增列的最新值
          qryIdentity.Open;
        end;
        DeltaDS.FieldByName('PKID').NewValue := qryIdentity.Fields[0].Value;//赋给子表的当前行
    end;
    end;

  • 相关阅读:
    ios7 苹果原生二维码扫描(和微信类似)
    ios7之后 根据UILabel的文字计算frame的方法
    [Luogu1944] 最长括号匹配
    [bzoj3916] friends
    [NOIp2006] 能量项链
    [NOIp2003] 加分二叉树
    [Luogu1353] 跑步Running
    [Luogu2214] Mooo Moo S
    [POJ2452] Sticks Problem
    [POJ2406] Power Strings
  • 原文地址:https://www.cnblogs.com/carcode/p/1805818.html
Copyright © 2011-2022 走看看