⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mdmain.pas

📁 《Delphi开发人员指南》配书原码
💻 PAS
字号:
unit MDMain;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, DBGrids, DBTables, DBClient, Db, StdCtrls, Provider, CDSProv
  {$IFNDEF VER130}, BdeProv{$ENDIF};

type
  TForm1 = class(TForm)
    dsMaster: TDataSource;
    dsDetail: TDataSource;
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    btnApply: TButton;
    btnCancel: TButton;
    cdsMaster: TClientDataSet;
    cdsDetail: TClientDataSet;
    cdsMasterCUSTNO: TFloatField;
    cdsMasterCOMPANY: TStringField;
    cdsMasterADDR1: TStringField;
    cdsMasterADDR2: TStringField;
    cdsMasterCITY: TStringField;
    cdsMasterSTATE: TStringField;
    cdsMasterZIP: TStringField;
    cdsMasterCOUNTRY: TStringField;
    cdsMasterPHONE: TStringField;
    cdsMasterFAX: TStringField;
    cdsMasterTAXRATE: TFloatField;
    cdsMasterCONTACT: TStringField;
    cdsMasterLASTINVOICEDATE: TDateTimeField;
    cdsMasterUpdateStatus: TStringField;
    cdsDetailORDERNO: TFloatField;
    cdsDetailCUSTNO: TFloatField;
    cdsDetailSALEDATE: TDateTimeField;
    cdsDetailSHIPDATE: TDateTimeField;
    cdsDetailEMPNO: TIntegerField;
    cdsDetailSHIPTOCONTACT: TStringField;
    cdsDetailSHIPTOADDR1: TStringField;
    cdsDetailSHIPTOADDR2: TStringField;
    cdsDetailSHIPTOCITY: TStringField;
    cdsDetailSHIPTOSTATE: TStringField;
    cdsDetailSHIPTOZIP: TStringField;
    cdsDetailSHIPTOCOUNTRY: TStringField;
    cdsDetailSHIPTOPHONE: TStringField;
    cdsDetailSHIPVIA: TStringField;
    cdsDetailPO: TStringField;
    cdsDetailTERMS: TStringField;
    cdsDetailPAYMENTMETHOD: TStringField;
    cdsDetailITEMSTOTAL: TFloatField;
    cdsDetailTAXRATE: TFloatField;
    cdsDetailFREIGHT: TFloatField;
    cdsDetailAMOUNTPAID: TFloatField;
    cdsDetailUpdateStatus: TStringField;
    prvMaster: TProvider;
    qryMaster: TQuery;
    qryMasterCUSTNO: TFloatField;
    qryMasterCOMPANY: TStringField;
    qryMasterADDR1: TStringField;
    qryMasterADDR2: TStringField;
    qryMasterCITY: TStringField;
    qryMasterSTATE: TStringField;
    qryMasterZIP: TStringField;
    qryMasterCOUNTRY: TStringField;
    qryMasterPHONE: TStringField;
    qryMasterFAX: TStringField;
    qryMasterTAXRATE: TFloatField;
    qryMasterCONTACT: TStringField;
    qryMasterLASTINVOICEDATE: TDateTimeField;
    Database: TDatabase;
    prvDetail: TProvider;
    qryDetail: TQuery;
    qryDeleteItems: TQuery;
    procedure FormCreate(Sender: TObject);
    procedure btnApplyClick(Sender: TObject);
    procedure ReconcileError(DataSet: TClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure btnCancelClick(Sender: TObject);
    procedure UpdateCalcFields(DataSet: TDataSet);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses
  RecError, CDSUtil;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  cdsMaster.Open;
  cdsDetail.Open;
end;

procedure TForm1.btnApplyClick(Sender: TObject);
var
  vDeltaArray: OleVariant;
  vProviderArray: OleVariant;
  vCDSArray: array[0..1] of TClientDataset;
begin
// If using nested datasets, only cdsMaster.ApplyUpdates(0); would be required
  vCDSArray[0]:=cdsMaster;
  vCDSArray[1]:=cdsDetail;
  vDeltaArray:=RetrieveDeltas(vCDSArray);
  vProviderArray:=RetrieveProviders(vCDSArray);
  CDSApplyUpdates(Database, vDeltaArray, vProviderArray);
//  Use this for multi-tier: SocketConnection1.AppServer.ApplyUpdates(vDeltaArray, vProviderArray);
  ReconcileDeltas(vCDSArray, vDeltaArray);
end;

procedure TForm1.ReconcileError(DataSet: TClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
begin
  Action := HandleReconcileError(DataSet, UpdateKind, E);
end;

procedure TForm1.btnCancelClick(Sender: TObject);
begin
  cdsMaster.CancelUpdates;
  cdsDetail.CancelUpdates;
end;

procedure TForm1.UpdateCalcFields(DataSet: TDataSet);
const
  UpdateStatusStr: array[TUpdateStatus] of string = ('Unmodified', 'Modified',
   'Inserted', 'Deleted');
begin
  with Dataset as TClientDataset do
    FieldByName('UpdateStatus').Value := UpdateStatusStr[UpdateStatus];
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -