📄 dmbaseservice.pas
字号:
Flag: Boolean;
begin
if VarIsNull(Delta) then exit;
with (FParent as TDataServer2) do
begin
cdsDelta.Close;
cdsDelta.Data := Delta;
Flag := cdsDelta.FindField('SYS_STATUS') <> nil;
end; // with
if Flag then
InnerApplyUpdates2(TableName, KeyField)
else
InnerApplyUpdates(TableName, KeyField);
end;
function TBaseService.GetDataSet(Index: integer): IHMOleClientDataSet;
begin
with (FParent as TDataServer2) do
case Index of //
0: Result := Pub1.IDataSet;
1: Result := Pub2.IDataSet;
2: Result := Pub3.IDataSet;
else
raise Exception.Create('(GetDataSet)Pub DataSet Out Bound');
end; // case
end;
function TBaseService.GetParams: IHMOleVariant;
begin
Result := (FParent as TDataServer2).OleParams;
end;
procedure TBaseService.InnerApplyUpdates(TableName, KeyField: WideString);
var
i: integer;
s1, s2: string;
CmdStr: string;
FieldList: TStringList;
begin
with (FParent as TDataServer2) do
begin
FieldList := TStringList.Create;
Connection.GetFieldNames(TableName, FieldList);
if not cdsDelta.Active then cdsDelta.Open;
for i := 1 to FieldList.Count do
if cdsDelta.FindField(FieldList[i - 1]) <> nil then
cdsDelta.FindField(FieldList[i - 1]).Tag := 1;
FieldList.Free;
if cdsDelta.RecordCount > 0 then
begin
cdsDelta.First;
s1 := '';
s2 := '';
while not cdsDelta.Eof do
begin
CmdStr := '';
case cdsDelta.UpdateStatus of
usUnmodified:
begin
s2 := VarToSql(cdsDelta[KeyField]);
end;
usModified:
begin
s1 := '';
for i := 1 to cdsDelta.FieldCount do
if (not cdsDelta.Fields[i - 1].IsNull) and (cdsDelta.Fields[i - 1].Tag = 1) then
begin
if s1 = '' then
s1 := Trim(cdsDelta.Fields[i - 1].FieldName) + ' = ' + VarToSql(cdsDelta.Fields[i - 1].Value)
else
s1 := s1 + ',' + Trim(cdsDelta.Fields[i - 1].FieldName) + ' = ' + VarToSql(cdsDelta.Fields[i - 1].Value);
end;
if s1 <> '' then
begin
CmdStr := 'Update ' + TableName + ' Set ' + s1 + ' Where ' + KeyField + ' = ' + s2;
end;
end;
usInserted:
begin
s1 := '';
s2 := '';
for i := 1 to cdsDelta.FieldCount do
if (not cdsDelta.Fields[i - 1].IsNull) and (cdsDelta.Fields[i - 1].Tag = 1) then
begin
if s1 = '' then
begin
s1 := Trim(cdsDelta.Fields[i - 1].FieldName);
s2 := VarToSql(cdsDelta.Fields[i - 1].Value);
end
else
begin
s1 := s1 + ',' + Trim(cdsDelta.Fields[i - 1].FieldName);
s2 := s2 + ',' + VarToSql(cdsDelta.Fields[i - 1].Value);
end;
end;
if s1 <> '' then
begin
CmdStr := 'Insert into ' + TableName + '(' + s1 + ') Values (' + s2 + ')';
end;
end;
usDeleted:
begin
s2 := VarToSql(cdsDelta[KeyField]);
CmdStr := 'Delete ' + TableName + ' Where ' + KeyField + ' = ' + s2;
end;
end;
if CmdStr <> '' then Cmd.Execute(CmdStr);
cdsDelta.Next;
end;
cdsDelta.First;
cdsDelta.EmptyDataSet;
cdsDelta.Close;
end;
end;
end;
procedure TBaseService.ApplyUpdatesWithDataSet(const DataSet: integer; TableName, KeyField: WideString);
var
Flag: boolean;
begin
with (FParent as TDataServer2) do
begin
cdsDelta.Close;
case DataSet of //
0: cdsDelta.Data := Pub1.Data;
1: cdsDelta.Data := Pub2.Data;
2: cdsDelta.Data := Pub3.Data;
else
raise Exception.Create('(ApplyUpdatesWithDataSet) Out of DataSet Index')
end; // case
Flag := cdsDelta.FindField('SYS_STATUS') <> nil;
end; // with
if Flag then
InnerApplyUpdates2(TableName, KeyField)
else
InnerApplyUpdates(TableName, KeyField);
end;
procedure TBaseService.ApplyUpdatesRecordInfo(const DeltaName, TableName, KeyField: WideString);
var
s1, s2: string;
CmdStr: string;
Flag: Boolean;
UpdateStatus: TUpdateStatus;
begin
with (FParent as TDataServer2) do
begin
if VarIsNull(OleParams[DeltaName]) then exit;
cdsDelta.Close;
cdsDelta.Data := OleParams[DeltaName];
cdsDelta.Open;
if cdsDelta.RecordCount > 0 then
begin
cdsDelta.First;
s1 := '';
s2 := '';
Flag := cdsDelta.FindField('SYS_STATUS') <> nil;
while not cdsDelta.Eof do
begin
CmdStr := '';
if Flag then
UpdateStatus := cdsDelta.UpdateStatus
else
UpdateStatus := TUpdateStatus(cdsDelta.IV['SYS_STATUS']);
case UpdateStatus of
usUnmodified:
begin
s2 := VarToSql(cdsDelta[KeyField]);
end;
usModified:
begin
if Flag then s2 := VarToSql(cdsDelta[KeyField]);
s1 := 'ri_ModifyPsn = ' + VarToSql(OleParams['UserID']);
s1 := s1 + ', ri_ModifyDate = ' + ToSqlStr(DateToStr(Today));
CmdStr := 'Update dlgRecordInfo Set ' + s1 + ' Where ri_UniKey = ' + s2;
end;
usInserted:
begin
s1 := 'ri_UniKey';
s1 := s1 + ', ri_TableName';
s1 := s1 + ', ri_CreatePsn ';
s1 := s1 + ', ri_CreateDate ';
s1 := s1 + ', ri_ModifyPsn ';
s1 := s1 + ', ri_ModifyDate ';
s2 := VarToSql(cdsDelta[KeyField]);
s2 := s2 + ',' + VarToSql(Uppercase(TableName));
s2 := s2 + ',' + VarToSql(OleParams['UserID']);
s2 := s2 + ',' + ToSqlStr(DateToStr(Today));
s2 := s2 + ',' + VarToSql(OleParams['UserID']);
s2 := s2 + ',' + ToSqlStr(DateToStr(Today));
CmdStr := 'Insert into dlgRecordInfo (' + s1 + ') Values (' + s2 + ')';
end;
usDeleted:
begin
s1 := 'ri_DeletePsn = ' + VarToSql(OleParams['UserID']);
s1 := s1 + ', ri_DeleteDate = ' + ToSqlStr(DateToStr(Today));
s1 := s1 + ', ri_Deleted = 1';
s2 := VarToSql(cdsDelta[KeyField]);
CmdStr := 'Update dlgRecordInfo Set ' + s1 + ' Where ri_UniKey = ' + s2;
end;
end;
if CmdStr <> '' then Cmd.Execute(CmdStr);
cdsDelta.Next;
end;
cdsDelta.First;
cdsDelta.EmptyDataSet;
cdsDelta.Close;
end;
end;
end;
procedure TBaseService.InnerApplyUpdates2(TableName, KeyField: WideString);
var
i: integer;
s1, s2: string;
CmdStr: string;
FieldList: TStringList;
UpdateStatus: integer;
begin
with (FParent as TDataServer2) do
begin
FieldList := TStringList.Create;
Connection.GetFieldNames(TableName, FieldList);
if not cdsDelta.Active then cdsDelta.Open;
for i := 1 to FieldList.Count do
if cdsDelta.FindField(FieldList[i - 1]) <> nil then
cdsDelta.FindField(FieldList[i - 1]).Tag := 1;
FieldList.Free;
if cdsDelta.RecordCount > 0 then
begin
cdsDelta.First;
s1 := '';
s2 := '';
while not cdsDelta.Eof do
begin
CmdStr := '';
UpdateStatus := cdsDelta.IV['SYS_STATUS'];
case TUpdateStatus(UpdateStatus) of
usUnmodified, usModified:
begin
s1 := '';
s2 := VarToSql(cdsDelta[KeyField]);
for i := 1 to cdsDelta.FieldCount do
if cdsDelta.Fields[i - 1].CanModify and (cdsDelta.Fields[i - 1].Tag = 1) and (UpperCase(cdsDelta.Fields[i - 1].FieldName) <> Uppercase(KeyField)) then
begin
if s1 = '' then
s1 := Trim(cdsDelta.Fields[i - 1].FieldName) + ' = ' + VarToSql(cdsDelta.Fields[i - 1].Value)
else
s1 := s1 + ',' + Trim(cdsDelta.Fields[i - 1].FieldName) + ' = ' + VarToSql(cdsDelta.Fields[i - 1].Value);
end;
if s1 <> '' then
begin
CmdStr := 'Update ' + TableName + ' Set ' + s1 + ' Where ' + KeyField + ' = ' + s2;
end;
end;
usInserted:
begin
s1 := '';
s2 := '';
for i := 1 to cdsDelta.FieldCount do
if (not cdsDelta.Fields[i - 1].IsNull) and (cdsDelta.Fields[i - 1].Tag = 1) then
begin
if s1 = '' then
begin
s1 := Trim(cdsDelta.Fields[i - 1].FieldName);
s2 := VarToSql(cdsDelta.Fields[i - 1].Value);
end
else
begin
s1 := s1 + ',' + Trim(cdsDelta.Fields[i - 1].FieldName);
s2 := s2 + ',' + VarToSql(cdsDelta.Fields[i - 1].Value);
end;
end;
if s1 <> '' then
begin
CmdStr := 'Insert into ' + TableName + '(' + s1 + ') Values (' + s2 + ')';
end;
end;
usDeleted:
begin
s2 := VarToSql(cdsDelta[KeyField]);
CmdStr := 'Delete ' + TableName + ' Where ' + KeyField + ' = ' + s2;
end;
end;
if CmdStr <> '' then Cmd.Execute(CmdStr);
cdsDelta.Next;
end;
cdsDelta.First;
cdsDelta.EmptyDataSet;
cdsDelta.Close;
end;
end;
end;
{ TBaseOle }
constructor TBaseOle.Create(AOwner: TComponent);
begin
inherited Create;
FParent := AOwner;
end;
procedure TBaseOle.AddDspAsName(Name: WideString);
begin
(FParent as TDataServer2).Ole[Name] := (FParent as TDataServer2).dspTest.Data;
end;
procedure TBaseOle.Clear;
begin
(FParent as TDataServer2).Ole.Clear;
end;
function TBaseOle.GetValue(Name: WideString): OleVariant;
begin
Result := (FParent as TDataServer2).Ole[Name];
end;
procedure TBaseOle.SetValue(Name: WideString; Value: OleVariant);
begin
(FParent as TDataServer2).Ole[Name] := Value;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -