?? dataprocess.dpr
字號:
library Dataprocess;
{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
uses
Sharemem,
SysUtils,
Sconnect,
Variants,
DBclient,
DB,
Forms,
Classes;
{$R *.res}
type
TDataprocessc = Class
public
function applyupdata(Sct:Tsocketconnection;CDS:TClientdataset; const ptablename,
pkeyfield: WideString): WordBool; virtual;abstract;
function getmaxid(Sct:Tsocketconnection;const ptablename, pkeyfield: WideString): Integer;
Virtual;abstract;
function Getsqldata(SCT:tsocketconnection;CDS:Tclientdataset;Tablename,
keyfield:widestring;ssql:string;const MaxRec:integer=20):boolean;
virtual;abstract;
function Geteditdata(SCT:tsocketconnection;CDS:Tclientdataset;Tablename,
keyfield:widestring;Cid:integer;const MaxRec:integer=20):boolean;
virtual;abstract;
function Getadddata(SCT:tsocketconnection;CDS:Tclientdataset;Tablename,
keyfield:widestring;const MaxRec:integer=20):boolean;
virtual;abstract;
function GetAllData(SCT:Tsocketconnection;CDS:Tclientdataset;Tablename,
Keyfield:wideString;const MaxRec:integer=20):boolean;
virtual;abstract;
function GetDataFormServer(SCT:Tsocketconnection;ACDS:Tclientdataset;
sSql:String;const RecCount:integer=20):wordbool;
virtual;abstract;
function insertCDSdata(s,d:Tclientdataset):boolean;virtual;abstract;
function ClearCDSdata(s:Tclientdataset):boolean;virtual;abstract;
end;
type
TDataprocess = class(TDataprocessc)
public
function applyupdata(Sct:Tsocketconnection;CDS:TClientdataset; const ptablename,
pkeyfield: WideString): WordBool; override;
function getmaxid(Sct:Tsocketconnection;const ptablename, pkeyfield: WideString): Integer;
override;
function Getsqldata(SCT:tsocketconnection;CDS:Tclientdataset;Tablename,
keyfield:widestring;ssql:string;const MaxRec:integer=20):boolean;
override;
function Geteditdata(SCT:tsocketconnection;CDS:Tclientdataset;Tablename,
keyfield:widestring;Cid:integer;const MaxRec:integer=20):boolean;
override;
function Getadddata(SCT:tsocketconnection;CDS:Tclientdataset;Tablename,
keyfield:widestring;const MaxRec:integer=20):boolean;
override;
function GetAllData(SCT:Tsocketconnection;CDS:Tclientdataset;Tablename,
Keyfield:wideString;const MaxRec:integer=20):boolean;
override;
function GetDataFormServer(SCT:Tsocketconnection;ACDS:Tclientdataset;
sSql:String;const RecCount:integer=20):wordbool;
override;
function insertCDSdata(s,d:Tclientdataset):boolean;override;
function ClearCDSdata(s:Tclientdataset):boolean;override;
end;
{ TDataprocess }
function TDataprocess.applyupdata(Sct: Tsocketconnection;
CDS:TClientdataset; const ptablename, pkeyfield: WideString): WordBool;
begin
Result:=sct.AppServer.applyupdata(CDS.delta,ptablename,pkeyfield);
end;
function TDataprocess.ClearCDSdata(s: Tclientdataset): boolean;
begin
S.Close;
S.Data:=Null;
Result:=True;
end;
function TDataprocess.Getadddata(SCT: tsocketconnection;
CDS: Tclientdataset; Tablename, keyfield: widestring;
const MaxRec: integer): boolean;
var
TmpCDS:Tclientdataset;
FkeyValue:string;
Fsql:string;
function setsqladd():String;
const
sqlfmt='Select * from %s%s%s order by %s';
var
sid,eid:integer;
begin
eid:=Getmaxid(SCT,Tablename,keyField);
sid:=eid-20;
if FkeyValue='' then
begin
Result:=Format(sqlFmt,[Tablename,' Where ',keyfield+'>='+inttostr(sid)+
' and '+keyfield+'<='+inttostr(eid),keyfield])
end
else
begin
Result:=Format(sqlFmt,[Tablename,' where ',keyfield+'>'+inttostr(sid)+
' and '+keyfield+'<='+inttostr(eid)+' and '+keyfield+'>'
+#39+FkeyValue+#39,keyfield]);
end;
end;
begin
ClearCDSdata(CDS);
try
TmpCDS:=Tclientdataset.Create(nil);
TmpCDS.FetchOnDemand:=False;
TmpCDS.PacketRecords:=MaxRec;
Fkeyvalue:='';
while true do
begin
Fsql:=setsqladd();
if GetDataFormServer(SCT,TmpCDS,Fsql,MaxRec) then
InsertCDSdata(TmpCDS,CDS);
if tmpCDS.RecordCount<MaxRec then
Break;
TmpCDS.Last;
FkeyValue:=TmpCDS.fieldbyname(Keyfield).AsString;
ClearCDSData(TmpCDS);
Fsql:='';
Application.ProcessMessages;
end;
finally
TmpCDS.Close;
TmpCDS.Free;
end;
Result:=True;
end;
function TDataprocess.GetAllData(SCT: Tsocketconnection;
CDS: Tclientdataset; Tablename, Keyfield: wideString;
const MaxRec: integer): boolean;
var
TEMPCDS:Tclientdataset;
FkeyValue:String;
Fsql:String;
function setSqlall():string;
const
conFMT = ' select * from %s%s%s order by %s ';
begin
if FkeyValue='' then
Result:=Format(conFMT, [Tablename,'','',KeyField])
else
Result:=Format(conFMT, [Tablename,' Where ',keyField+'>'+#39+
FkeyValue+#39,KeyField]);
end;
begin
Result:=True;
ClearCDSData(CDS);
try
TEMPCDS:=Tclientdataset.Create(nil);
TEMPCDS.FetchOnDemand:=False;
TEMPCDS.PacketRecords:=MaxRec;
FkeyValue:='';
while True do
begin
Fsql:=setSqlall;
GetDataFormServer(SCT,TempCDS,Fsql,MaxRec);
InsertCDSData(TempCDS,CDS);
if TEMPCDS.RecordCount<MaxRec then
Break;
TEMPCDS.Last;
FkeyValue:=TEMPCDS.fieldbyname(KeyField).AsString;
ClearCDSData(TempCDS);
Fsql:='';
Application.ProcessMessages;
end;
finally
TempCDS.Close;
TempCDS.Free;
end;
Result:=True;
end;
function TDataprocess.GetDataFormServer(SCT: Tsocketconnection;
ACDS: Tclientdataset; sSql: String; const RecCount: integer): wordbool;
begin
Try
ACDS.Data:=Sct.AppServer.GetlargeData(sSql,RecCount);
Result:=True;
Except
Result:=False;
end;
end;
function TDataprocess.Geteditdata(SCT: tsocketconnection;
CDS: Tclientdataset; Tablename, keyfield: widestring; Cid: integer;
const MaxRec: integer): boolean;
var
TempCDS:Tclientdataset;
FkeyValue:string;
Fsql:String;
Function setSqledit():string;
const
sqlFmt=' Select * from %s%s%s order by %s ';
var
sid,eid:integer;
begin
sid:=cid-10;
eid:=Cid+10;
if FkeyValue='' then
begin
Result:=Format(sqlFmt,[Tablename,' where ',keyfield+'>='+inttostr(sid)+
' and '+keyfield+'<='+inttostr(eid),keyfield]);
end
else
Result:=Format(sqlFmt,[Tablename,' where ',keyfield+'>'+inttostr(sid)+
' and '+keyfield+'<='+inttostr(eid)+' and '+
keyfield+'>'+#39+FkeyValue+#39,keyfield]);
end;
begin
ClearCDSData(Cds);
try
TempCDS:=Tclientdataset.Create(nil);
TempCDS.FetchOnDemand:=False;
TempCDS.PacketRecords:=MaxRec;
FkeyValue:='';
While True do
begin
Fsql:=setSqledit;
GetDataFormServer(SCT,TempCDS,Fsql,MaxRec);
InsertCDSdata(TempCDS,CDS);
if TempCDS.RecordCount<MaxRec then
Break;
TempCDS.Last;
FkeyValue:=TempCDS.fieldbyname(Keyfield).AsString;
ClearCDSData(TempCDS);
Fsql:='';
Application.ProcessMessages;
end;
finally
TempCDS.Close;
TempCds.Free();
end;
Result:=True;
end;
function TDataprocess.getmaxid(Sct: Tsocketconnection; const ptablename,
pkeyfield: WideString): Integer;
begin
try
Result:=Sct.AppServer.Getmaxid(ptablename,pkeyfield);
except
Result:=0;
end;
end;
function TDataprocess.Getsqldata(SCT: tsocketconnection;
CDS: Tclientdataset; Tablename, keyfield: widestring; ssql: string;
const MaxRec: integer): boolean;
var
TempCDS:Tclientdataset;
FkeyValue:string;
Fsql:String;
Function setSqlsql():string;
const
sqlFmt=' Select * from %s%s%s order by %s ';
begin
if FkeyValue='' then
begin
Result:=Format(sqlFmt,[Tablename,' where ',ssql,keyField]);
end
else
Result:=Format(sqlFmt,[Tablename,' where ',
keyField+'>'+#39+FkeyValue+#39+' and '+ssql,keyField]);
end;
begin
ClearCDSData(Cds);
try
TempCDS:=Tclientdataset.Create(nil);
TempCDS.FetchOnDemand:=False;
TempCDS.PacketRecords:=MaxRec;
FkeyValue:='';
While True do
begin
Fsql:=setSqlsql;
GetDataFormServer(SCT,TempCDS,Fsql,MaxRec);
InsertCDSdata(TempCDS,CDS);
if TempCDS.RecordCount<MaxRec then
Break;
TempCDS.Last;
FkeyValue:=TempCDS.fieldbyname(Keyfield).AsString;
ClearCDSData(TempCDS);
Fsql:='';
Application.ProcessMessages;
end;
finally
TempCDS.Close;
TempCds.Free();
end;
Result:=True;
end;
function TDataprocess.insertCDSdata(s, d: Tclientdataset): boolean;
var
V:Tbookmark;
begin
Result:=true;
try
V:=D.GetBookmark;
if D.Active then
d.AppendData(S.Data,False)
else
D.Data:=S.Data;
Finally
D.GotoBookmark(V);
D.FreeBookmark(V);
end;
end;
function CreateDataprocess:TDataprocess;stdcall;
begin
Result:=Tdataprocess.Create;
end;
Exports
CreateDataprocess;
begin
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -