unit GetBillNoObj;
interface
uses
System.Classes, System.SysUtils, Data.FMTBcd, Data.DB, Winapi.Windows, Data.SqlExpr;Type
TGetBillNoObj = class(TThread) private Fext_id: string; Fsc_id: string; FBillNo: string; FEvent: THandle; protected procedure Execute; override; procedure GetBillNo; inline; public constructor Create; overload; destructor Destroy; override; procedure Run; inline; procedure Clear; property ext_id: string read Fext_id write Fext_id; property sc_id: string read Fsc_id write Fsc_id; property BillNo: string read FBillNo write FBillNo; end;implementation
uses SqlconnectPool, SqlStoredProcPool, CommonFunction;
procedure TGetBillNoObj.Clear;
begin Fext_id := ''; Fsc_id := ''; FBillNo := '';end;constructor TGetBillNoObj.Create;
begin FEvent := CreateEvent(nil, True, False, nil); inherited Create(False); FreeOnTerminate := True;end;destructor TGetBillNoObj.Destroy;
begin CloseHandle(FEvent); inherited;end;procedure TGetBillNoObj.Execute;
begin try while not Terminated do if WaitForSingleObject(FEvent, INFINITE) = WAIT_OBJECT_0 then GetBillNo; except on E: Exception do begin LogInfo('TGetBillNoObj.Execute---' + E.Message); Exit; end; end;end;procedure TGetBillNoObj.GetBillNo;
var c: TSQLConnection; p: TSQLStoredProc;begin try c := G_SqlConnectionPool.Lock; p := G_SqlStoredProcPool.Lock; try if Assigned(c) and Assigned(p) then begin p.Close; p.Params.Clear; p.SQLConnection := c; ssSetProcParam(p, 'sspGetSysCode'); p.Params.ParamByName('@ext_id').Value:=ext_id; p.Params.ParamByName('@sc_id').Value:=sc_id; p.ExecProc; FBillNo := p.ParamByName('@sc_code').AsString; end; finally G_SqlConnectionPool.Unlock(c); G_SqlStoredProcPool.UnLock(p); end; except on E: Exception do begin LogInfo('TGetBillNoObj.GetBillNo---' + E.Message); exit; end; end;end;procedure TGetBillNoObj.Run;
begin PulseEvent(FEvent);end;