File: fpdataexporter.pp

package info (click to toggle)
lazarus 2.0.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 214,460 kB
  • sloc: pascal: 1,862,622; xml: 265,709; cpp: 56,595; sh: 3,008; java: 609; makefile: 535; perl: 297; sql: 222; ansic: 137
file content (162 lines) | stat: -rw-r--r-- 4,234 bytes parent folder | download | duplicates (6)
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
{
 **********************************************************************
  This file is part of the Free Pascal run time library.

  See the file COPYING.FPC, included in this distribution,
  for details about the license.
 **********************************************************************

 TFPDataExporter dialog component.

 Copyright (c) 2007 by Michael Van Canneyt, member of the Free Pascal development team

}
unit fpdataexporter;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, DB, fpdbexport,
  forms, controls, dialogs, frmexportprogress, sdb_consts;

Type

  { TFPDataExporter }

  TFPDataExporter = Class(TComponent)
  Private
    FDataset : TDataset;
    FExportCount : Integer;
    FShowProgress: Boolean;
    FShowResult: Boolean;
    FExporter : TCustomDatasetExporter;
    FProgress : TExportProgressForm;
    FTableNameHint: String;
    procedure SetDataset(const AValue: TDataset);
    procedure DoCancel(Sender : TObject);
    Procedure Doprogress(Sender : TObject; Const ItemNo : Integer);
  public
    Constructor Create(AOWner : TComponent); override;
    Function Execute : Boolean;
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
    Property ExportCount : Integer Read FExportCount;
    Property Exporter : TCustomDatasetExporter Read FExporter;
  Published
    Property Dataset : TDataset Read FDataset Write SetDataset;
    Property ShowProgress : Boolean Read FShowProgress Write FShowProgress default true;
    Property ShowResult : Boolean Read FShowResult Write FShowResult default true;
    Property TableNameHint : String Read FTableNameHint Write FTableNameHint;
  end;
  

implementation

uses typinfo, frmSelectExportFormat, frmBaseConfigExport;
  
procedure TFPDataExporter.SetDataset(const AValue: TDataset);
begin
  If (AValue<>FDataset) then
    begin
    If Assigned(FDataset) then
      FDataset.RemoveFreeNotification(Self);
    FDataset:=AValue;
    If Assigned(FDataset) then
      FDataset.FreeNotification(Self);
    end;
end;

procedure TFPDataExporter.DoCancel(Sender: TObject);
begin
  FExporter.Cancel;
end;

procedure TFPDataExporter.Doprogress(Sender: TObject; const ItemNo: Integer);
begin
  If Assigned(FProgress) then
    FProgress.StepIt;
end;

Constructor TFPDataExporter.Create(AOWner : TComponent);

begin
  Inherited;
  If (AOwner is TDataset) then
    Dataset:=AOwner as TDataset;
  FShowProgress:=True;
  FShowResult:=True;
end;

Function TFPDataExporter.Execute : Boolean;

Var
  FI : TExportFormatItem;

begin
  FI:=Nil;
  FProgress:=Nil;
  With TSelectExportFormatForm.Create(Application) do
    try
      Result:=(ShowModal=mrOK);
      If Result then
        begin
        FI:=SelectedFormat;
        Result:=FI<>Nil;
        end;
    finally
      Free;
    end;
  If Result then
    begin
    RegisterBaseExportConfigForm;
    FExporter:=FI.ExportClass.Create(Self);
    Try
      FExporter.Dataset:=Self.Dataset;
      If IsPublishedProp(FExporter.FormatSettings,'TableName') then
        SetStrProp(FExporter.FormatSettings,'TableName',TableNameHint);
      Result:=Exporter.ShowConfigDialog;
      if Result then
        begin
        Dataset.First;
        If ShowProgress then
          begin
          FProgress:=TExportProgressForm.Create(Application);
          FProgress.FreeNotification(Self);
          FProgress.OnCancel:=@self.DoCancel;
          FExporter.OnProgress:=@self.DoProgress;
          FProgress.Show;
          end;
        Try
          FExportCount:=FExporter.Execute;
        finally
          If Assigned(Fprogress) then
            FProgress.Free;
        end;
        If FShowResult then
          If FExporter.Canceled then
            ShowMessage(Format(SCancelRecordsExported,[FExportCount]))
          else
            ShowMessage(Format(SNRecordsExported,[FExportCount]));
        end;
    Finally
      FreeAndNil(FExporter);
    end;
    end;
end;

procedure TFPDataExporter.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  If (Operation=opRemove) then
    begin
    If (AComponent=FDataset) then
      FDataset:=Nil
    else if (AComponent=FProgress) then
      FProgress:=Nil;
    end;
end;

end.