-
Notifications
You must be signed in to change notification settings - Fork 36
/
Data.FireDAC.Helper.pas
91 lines (77 loc) · 2.34 KB
/
Data.FireDAC.Helper.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
unit Data.FireDAC.Helper;
interface
uses
System.Classes, System.SysUtils,
FireDAC.Stan.Intf,
FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS,
FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt,
FireDAC.UI.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Phys,
FireDAC.Phys.FB, FireDAC.Phys.FBDef, FireDAC.VCLUI.Wait, Data.DB,
Vcl.ExtCtrls, Vcl.DBCtrls, Vcl.Controls, Vcl.Grids, Vcl.DBGrids, Vcl.StdCtrls,
FireDAC.Comp.Client, FireDAC.Comp.DataSet;
type
TFDQueryHelper = class helper for TFDQuery
public
procedure AsyncOpen(AProc: TProc = nil);
function Clone(AOwner: TComponent): TFDQuery;
end;
TFDConnectionHelper = class helper for TFDCustomConnection
public
function Clone(AOwner: TComponent): TFDCustomConnection;
end;
implementation
{ TFDQueryHelper }
procedure TFDQueryHelper.AsyncOpen(AProc: TProc);
begin
TThread.CreateAnonymousThread(
procedure
begin
System.TMonitor.Enter(self);
try
DisableControls;
try
resourceOptions.CmdExecMode := amNonBlocking;
open;
while command.state = TFDPhysCommandState.csExecuting do;
TThread.Queue(nil,
procedure
begin
if assigned(AProc) then
AProc;
end);
finally
TThread.Queue(nil,
procedure
begin
EnableControls;
end);
end;
finally
System.TMonitor.Exit(self);
end;
end).start;
end;
function TFDQueryHelper.Clone(AOwner: TComponent): TFDQuery;
begin
result := TFDQuery.create(AOwner);
result.sql.Assign(self.sql);
result.resourceOptions.Assign(self.resourceOptions);
result.Aggregates.Assign(self.Aggregates);
result.UpdateOptions.Assign(self.UpdateOptions);
result.formatOptions.Assign(self.formatOptions);
result.fieldOptions.Assign(self.fieldOptions);
result.filter := self.filter;
result.filtered := self.filtered;
result.fetchOptions.assign(self.FetchOptions);
if assigned(Connection) then
result.Connection := Connection.Clone(result);
end;
{ TFDConnectionHelper }
function TFDConnectionHelper.Clone(AOwner: TComponent): TFDCustomConnection;
begin
result := TFDConnection.create(AOwner);
result.Assign(self);
if connected then
result.connected := true;
end;
end.