-
Notifications
You must be signed in to change notification settings - Fork 2
/
Mu.SaveTask.pas
110 lines (93 loc) · 2.62 KB
/
Mu.SaveTask.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
unit Mu.SaveTask;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, System.SyncObjs,
PerlRegEx, // curl, curl_d, Curl_help,
qstring, qworker, qtimetypes, qdb, qlog, qjson, qsimplepool,
Mu.DbHelp, Mu.pool.qjson, Mu.pool.st, Mu.pool.Reg, Mu.LookPool, Mu.Task1,
Generics.Collections,
FireDAC.Stan.Intf, FireDAC.Stan.Option,
FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf,
FireDAC.DApt.Intf, Vcl.Grids, Vcl.DBGrids, Data.DB, Vcl.StdCtrls,
FireDAC.Comp.DataSet, FireDAC.Comp.Client;
type
TOnSaveEvent<T> = procedure(Sender: TObject; aData: T) of object;
TOnSaveNotify<T> = reference to procedure(Sender: TObject; aData: T);
TOnSaveByFDacNotify<T> = reference to procedure(Sender: TObject;
aFDataset: TFDStoredProc; aData: T);
TSaveTask<TTaskRecord> = class(TMuTask1<TTaskRecord>)
protected
public
// property OnSave: TOnDoJobNotify1<TTaskRecord> read FOnDoJob write FOnDoJob;
end;
TSaveTaskByFDac<TRecord> = class(TMuTask1<TRecord>)
private
// FProcs: array of TFDStoredProc;
FProc: TFDStoredProc;
protected
FOnSave: TOnSaveByFDacNotify<TRecord>;
// procedure doJob(AJob: PQJob); override;
destructor Destroy; override;
function doJob(at: TRecord): string; override;
procedure Stop(); override;
procedure Start(); override;
public
property OnSaveByFDac: TOnSaveByFDacNotify<TRecord> read FOnSave
write FOnSave;
end;
implementation
uses Mu.Logs;
procedure TSaveTaskByFDac<TRecord>.Start;
var
i: Integer;
begin
// setlength(FProcs, FThreadCount);
// for i := Low(FProcs) to High(FProcs) do
// FProcs[i] := nil;
FProc := nil;
inherited;
end;
procedure TSaveTaskByFDac<TRecord>.Stop;
var
i: Integer;
begin
inherited;
{ for i := Low(FProcs) to High(FProcs) do
SQLDBHelp.returnProc(FProcs[i]);
setlength(FProcs, 0);
SQLDBHelp.returnProc(FProc); }
end;
destructor TSaveTaskByFDac<TRecord>.Destroy;
begin
Stop;
inherited;
end;
function TSaveTaskByFDac<TRecord>.doJob(at: TRecord): string;
begin
inherited;
if assigned(FOnSave) then
begin
{ if not assigned(FProcs[idx]) then
begin
FProcs[idx] := SQLDBHelp.getProc;
FProcs[idx].Tag := idx;
Mu.Logs.public_addLogs('get proc');
end; }
// proc.ResourceOptions.CmdExecMode := amBlocking; // amAsync;
try
try
FProc := SQLDBHelp.getProc;
FOnSave(self, FProc, at);
finally
SQLDBHelp.returnProc(FProc);
end;
except
on e: exception do
begin
Mu.Logs.public_addLogs(e.Message);
end;
end;
end;
end;
end.