📄 datapersistentunit.pas
字号:
unit DataPersistentUnit;
interface
uses Windows, Messages, SysUtils, Classes, DBClient, MConnect, SConnect,
CardServer_TLB, IDataPersistentUnit;
function DataPersistentObj: IDLLDataPersistent; external 'DLLDataPersistent.dll';
type TRDMDataSet = class(TPersistent)
//封装之后的持久层方法调用:
private
IDLLDataPer: IDLLDataPersistent;
DCOMConn: TDCOMConnection;
SocketConn: TSocketConnection;
published
function BeginTrans(out pMsg: WideString): Boolean; safecall;
function CommitTrans(out pMsg: WideString): Boolean; safecall;
function RollBackTrans(out pMsg: WideString): Boolean; safecall;
function SelectRDMDS(const SqlStr: WideString; var DataSet: TClientDataSet): Boolean; safecall;
function InsertRDMDS(const SqlStr: WideString; out pMsg: WideString): Boolean; Stdcall;
function UpdateRDMDS(const SqlStr: WideString; out pMsg: WideString): Boolean; Stdcall;
function DeleteRDMDS(const SqlStr: WideString; out pMsg: WideString): Boolean; Stdcall;
procedure CloseClientDS(var DataSet: TClientDataSet); safecall;
Procedure CloseRDMDS(var DataSet: TClientDataSet); safecall;
public
constructor Create(pDCOMConn: TDCOMConnection); overload;
constructor Create(pSocketConn: TSocketConnection); overload;
end;
implementation
constructor TRDMDataSet.Create(pDCOMConn: TDCOMConnection);
begin
inherited Create;
DCOMConn := pDCOMConn;
if not pDCOMConn.Connected then
pDCOMConn.Connected := true;
IDLLDataPer := DataPersistentObj;
IDLLDataPer.SetIDataPerDisp(IRDMCardServerDisp(IDispatch(pDCOMConn.GetServer)));
end;
constructor TRDMDataSet.Create(pSocketConn: TSocketConnection);
begin
inherited Create;
SocketConn := pSocketConn;
if not pSocketConn.Connected then
pSocketConn.Connected := true;
IDLLDataPer := DataPersistentObj;
IDLLDataPer.SetIDataPerDisp(IRDMCardServerDisp(IDispatch(pSocketConn.GetServer)));
end;
function TRDMDataSet.BeginTrans(out pMsg: WideString): Boolean; safecall;
begin
Result := IDLLDataPer.BeginTrans(pMsg);
end;
function TRDMDataSet.CommitTrans(out pMsg: WideString): Boolean; safecall;
begin
Result := IDLLDataPer.CommitTrans(pMsg);
end;
function TRDMDataSet.RollBackTrans(out pMsg: WideString): Boolean; safecall;
begin
Result := IDLLDataPer.RollBackTrans(pMsg);
end;
function TRDMDataSet.SelectRDMDS(const SqlStr: WideString;
var DataSet: TClientDataSet): Boolean; safecall;
var
sPrvName: WideString;
begin
Result := False;
if IDLLDataPer.SelectData(@SqlStr, sPrvName) then
begin
DataSet.ProviderName := sPrvName;
try
DataSet.Close;
DataSet.Open;
Result := true;
except
Result := false;
end;
end
else
begin
if not DCOMConn.Connected then
DCOMConn.Open;
if IDLLDataPer.SelectData(@SqlStr, sPrvName) then
begin
DataSet.ProviderName := sPrvName;
try
DataSet.Close;
DataSet.Open;
Result := true;
except
Result := false;
end;
end;
end;
end;
function TRDMDataSet.InsertRDMDS(const SqlStr: WideString; out pMsg: WideString): Boolean; Stdcall;
begin
Result := IDLLDataPer.InsertDataSet(@SqlStr, pMsg);
end;
function TRDMDataSet.UpdateRDMDS(const SqlStr: WideString; out pMsg: WideString): Boolean; Stdcall;
begin
Result := IDLLDataPer.UpdateDataSet(@SqlStr, pMsg);
end;
function TRDMDataSet.DeleteRDMDS(const SqlStr: WideString; out pMsg: WideString): Boolean; Stdcall;
begin
Result := IDLLDataPer.DeleteDataSet(@SqlStr, pMsg);
end;
procedure TRDMDataSet.CloseClientDS(var DataSet: TClientDataSet); safecall;
begin
CloseRDMDS(DataSet);
DataSet.Close;
end;
Procedure TRDMDataSet.CloseRDMDS(var DataSet: TClientDataSet); safecall;
var
lsProviderName: WideString;
begin
lsProviderName := DataSet.ProviderName;
IDLLDataPer.CloseDataSet(@lsProviderName);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -