📄 mdmain.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 + -