Kod: Tümünü seç
unit uRPSQLThread;
interface
uses
Classes, ActiveX, SysUtils, Dialogs, ADODB, Forms;
type
TRPSQLThread = class(TThread)
private
FDataSet: TADOQuery;
FSearchParam: string;
FRPFrom: TForm;
FCursor: integer;
protected
procedure Execute; override;
procedure LoadSQL;
public
property ThrDataSet: TADOQuery read FDataSet write FDataSet;
property SearchStr: string read FSearchParam write FSearchParam;
property RPForm: TForm read FRPFrom write FRPFrom;
property RPCursor: integer read FCursor write FCursor;
end;
implementation
{ TRPSQLThread }
procedure TRPSQLThread.Execute;
begin
Synchronize(LoadSQL);
end;
procedure TRPSQLThread.LoadSQL;
begin
with ThrDataSet do
begin // with AQ_GRID_RAB zapros
RPForm.Cursor := RPCursor;
SQL.Clear;
Active := False;
SQL.Append('SELECT DR.DRCODE, DR.DRNAME, DRS.DRSPECFULLNAME, DRL.DRLEVEL, HS.HOSPFULLNAME,PT.PAIDTYPE,');
SQL.Append(' RG.REGIONNAME, ROUND(SUM(ISNULL(TOTALPRESC.DRUGPRICESUM, 0)),2) AS TOTALPRESC,ROUND(DR.DEBT,2) AS DEBT'
);
SQL.Append(' FROM LAZS_HOSPITALS AS HS INNER JOIN');
SQL.Append(' LAZS_REGIONS AS RG ON HS.REGIONID = RG.REGIONID INNER JOIN');
SQL.Append(' LAZS_DOCTORS AS DR ON HS.HOSPID = DR.HOSPID INNER JOIN');
SQL.Append(' LAZS_PAIDTYPE AS PT ON PT.PAIDTYPEID=DR.PAIDTYPEID INNER JOIN');
SQL.Append(' LAZS_DRSPECS AS DRS ON DR.DRSPECID = DRS.DRSPECID INNER JOIN');
SQL.Append(' LAZS_DRLEVELS AS DRL ON DR.DRLEVELID = DRL.DRLEVELID LEFT OUTER JOIN');
SQL.Append(' (SELECT INVD.DRUGPRICESUM, INV.DRID');
SQL.Append(' FROM AZS_INVOICE AS INV INNER JOIN');
SQL.Append(' AZS_INVOICEDET AS INVD ON INV.INVID = INVD.INVID) AS TOTALPRESC ON DR.DRID = TOTALPRESC.DRID ');
if SearchStr <> '' then
SQL.Append('WHERE DR.DRSTAT=1 ' + SearchStr);
SQL.Append(
' GROUP BY DR.DRCODE, DR.DRNAME, DRS.DRSPECFULLNAME, DRL.DRLEVEL, HS.HOSPFULLNAME, RG.REGIONNAME ,DR.DEBT,PT.PAIDTYPE');
Active := True;
end;
end;
end.
Kod: Tümünü seç
var
i,aciq:integer;
SQLRpThrd: TRPSQLThread;
begin
............
...........//Bu kısımda arama kriterleri olan bir form ShowModal komutuyla açılıyor.Daha sonra eğer o formun Modal Result'ı 6 ise raporun görüntüleneceği
.......... diğer form açılıyor.
try
SQLRpThrd := TRPSQLThread.Create(True);
SQLRpThrd.FreeOnTerminate := True;
with SQLRpThrd do
begin
ThrDataSet:=QRp;
SearchStr:=fSearchParam.EditFilter.Text;
RPForm:=Report[aciq];
RPCursor:=crBlueBusy;
Resume;
end;
..........................
.........................
end;