📄 wz_ck_srdm.pas
字号:
unit WZ_CK_sRDM;
interface
uses
Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,
DBClient, PMultiTablesUpdateServer_TLB, StdVcl, Provider, DBTables, Db, Dialogs;
type
TMultiTablesUpdateServer = class(TRemoteDataModule, IMultiTablesUpdateServer)
Database1: TDatabase;
quryCK1: TQuery;
usCK1: TUpdateSQL;
dspCKMX: TDataSetProvider;
procedure dspCKMXBeforeUpdateRecord(Sender: TObject;
SourceDS: TDataSet; DeltaDS: TClientDataSet; UpdateKind: TUpdateKind;
var Applied: Boolean);
procedure dspCKMXUpdateData(Sender: TObject;
DataSet: TClientDataSet);
procedure dspCKMXUpdateError(Sender: TObject;
DataSet: TClientDataSet; E: EUpdateError; UpdateKind: TUpdateKind;
var Response: TResolverResponse);
private
curState:integer; //接收从客户机传来的参数值,1表示填单,2表示发货。
procedure SetParams(FUpdateSQL : TUpdateSQL; DeltaDS: TClientDataSet; UpdateKind: TUpdateKind);
protected
class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
procedure setState(state: integer); safecall;
public
{ Public declarations }
end;
implementation
uses WZ_CK_sFRM;
{$R *.DFM}
procedure TMultiTablesUpdateServer.SetParams(FUpdateSQL : TUpdateSQL; DeltaDS: TClientDataSet; UpdateKind: TUpdateKind);
var
I: Integer;
Old: Boolean;
Param: TParam;
PName: string;
Field: TField;
Value: Variant;
begin
if not Assigned(FUpdateSQL.DataSet) then
Exit;
with FUpdateSQL.Query[UpdateKind] do
begin
for I := 0 to Params.Count - 1 do
begin
Param := Params[I];
PName := Param.Name;
Old := CompareText(Copy(PName, 1, 4), 'OLD_') = 0;
if Old then
System.Delete(PName, 1, 4);
Field := DeltaDS.FindField(PName);
if not Assigned(Field) then
Continue;
if Old then
Param.AssignFieldValue(Field, Field.OldValue)
else
begin
Value := Field.NewValue;
Param.AssignFieldValue(Field, Value);
end;
end;
end;
end;
class procedure TMultiTablesUpdateServer.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string);
begin
if Register then
begin
inherited UpdateRegistry(Register, ClassID, ProgID);
EnableSocketTransport(ClassID);
EnableWebTransport(ClassID);
end else
begin
DisableSocketTransport(ClassID);
DisableWebTransport(ClassID);
inherited UpdateRegistry(Register, ClassID, ProgID);
end;
end;
procedure TMultiTablesUpdateServer.dspCKMXBeforeUpdateRecord(
Sender: TObject; SourceDS: TDataSet; DeltaDS: TClientDataSet;
UpdateKind: TUpdateKind; var Applied: Boolean);
begin
quryCK1.UpdateObject := usCK1;
SetParams(usCK1, DeltaDS, UpdateKind);
usCK1.ExecSQL(UpdateKind);
Applied := True;
end;
procedure TMultiTablesUpdateServer.dspCKMXUpdateData(Sender: TObject;
DataSet: TClientDataSet);
begin
Form1.ClientDataSet1.Data := DataSet.Data;
end;
procedure TMultiTablesUpdateServer.dspCKMXUpdateError(
Sender: TObject; DataSet: TClientDataSet; E: EUpdateError;
UpdateKind: TUpdateKind; var Response: TResolverResponse);
begin
ShowMessage(E.Context);
ShowMessage(E.Message);
end;
procedure TMultiTablesUpdateServer.setState(state: integer);
begin
curState:=state;//接收从客户机传来的参数,1表示填单,2表示发货。
quryCK1.SQL.Clear;
if state=1 then
quryCK1.SQL.Add('SELECT * from c_ckmx where 1=2');
if state=2 then
quryCK1.SQL.Add('SELECT * from c_ckmx where ltrim(c_flr)='''' or (c_flr is null)');
quryCK1.Open;
Form1.memo1.Lines.Add(quryCK1.SQL.Text);
end;
initialization
TComponentFactory.Create(ComServer, TMultiTablesUpdateServer,
Class_MultiTablesUpdateServer, ciMultiInstance, tmApartment);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -