mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-08 21:38:22 +02:00
163 lines
4.1 KiB
ObjectPascal
163 lines
4.1 KiB
ObjectPascal
{
|
|
**********************************************************************
|
|
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.
|
|
|