git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.SDAC@3 6f543ec7-021b-7e4c-98c9-62eafc7fb9a8
246 lines
6.3 KiB
ObjectPascal
246 lines
6.3 KiB
ObjectPascal
unit Loader;
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFNDEF VER130}
|
|
Variants,
|
|
{$ENDIF}
|
|
SysUtils,
|
|
{$IFDEF LINUX}
|
|
Types, Classes, QGraphics, QControls, QForms, QDialogs, QStdCtrls,
|
|
QDBCtrls, QComCtrls, QExtCtrls, QGrids, QDBGrids, QButtons, SdacClx,
|
|
{$ELSE}
|
|
Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs, Buttons,
|
|
Grids, DBGrids, StdCtrls, ExtCtrls, DBCtrls, SdacVcl,
|
|
{$ENDIF}
|
|
{$IFDEF CLR}
|
|
System.ComponentModel,
|
|
{$ENDIF}
|
|
Db, MemDS, DBAccess, Fetch,
|
|
DALoader, MSLoader, MSScript, MSAccess, DemoFrame, DAScript, SDacDemoForm
|
|
;
|
|
|
|
type
|
|
TLoaderFrame = class(TDemoFrame)
|
|
DataSource: TDataSource;
|
|
Query: TMSQuery;
|
|
MSLoader: TMSLoader;
|
|
TruncCommand: TMSSQL;
|
|
Panel2: TPanel;
|
|
ToolBar: TPanel;
|
|
btOpen: TSpeedButton;
|
|
btClose: TSpeedButton;
|
|
btLoad: TSpeedButton;
|
|
btDeleteAll: TSpeedButton;
|
|
DBNavigator: TDBNavigator;
|
|
Panel1: TPanel;
|
|
Label1: TLabel;
|
|
edRows: TEdit;
|
|
DBGrid: TDBGrid;
|
|
Panel3: TPanel;
|
|
rgEvent: TRadioGroup;
|
|
procedure btOpenClick(Sender: TObject);
|
|
procedure btCloseClick(Sender: TObject);
|
|
procedure btLoadClick(Sender: TObject);
|
|
procedure btDeleteAllClick(Sender: TObject);
|
|
procedure QueryAfterOpen(DataSet: TDataSet);
|
|
procedure QueryBeforeClose(DataSet: TDataSet);
|
|
procedure PutData(Sender: TMSLoader);
|
|
procedure rgEventClick(Sender: TObject);
|
|
procedure QueryBeforeFetch(DataSet: TCustomDADataSet;
|
|
var Cancel: Boolean);
|
|
procedure QueryAfterFetch(DataSet: TCustomDADataSet);
|
|
procedure MSLoaderGetColumnData(Sender: TObject; Column: TMSColumn;
|
|
Row: Integer; var Value: Variant; var IsEOF: Boolean);
|
|
private
|
|
{ Private declarations }
|
|
public
|
|
PMInterval: integer;
|
|
Count: integer;
|
|
destructor Destroy; override;
|
|
|
|
// Demo management
|
|
procedure Initialize; override;
|
|
procedure SetDebug(Value: boolean); override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{$IFDEF CLR}
|
|
{$R *.nfm}
|
|
{$ENDIF}
|
|
{$IFDEF WIN32}
|
|
{$R *.dfm}
|
|
{$ENDIF}
|
|
{$IFDEF LINUX}
|
|
{$R *.xfm}
|
|
{$ENDIF}
|
|
|
|
destructor TLoaderFrame.Destroy;
|
|
begin
|
|
FreeAndNil(FetchForm);
|
|
inherited;
|
|
end;
|
|
|
|
procedure TLoaderFrame.btOpenClick(Sender: TObject);
|
|
begin
|
|
Query.Open;
|
|
end;
|
|
|
|
procedure TLoaderFrame.btCloseClick(Sender: TObject);
|
|
begin
|
|
Query.Close;
|
|
end;
|
|
|
|
procedure TLoaderFrame.btLoadClick(Sender: TObject);
|
|
var
|
|
Start, Finish, Freq: Integer;
|
|
begin
|
|
Start := GetTickCount;
|
|
ShortDateFormat := 'yyyy-mm-dd';
|
|
MSLoader.Connection.Connect;
|
|
FetchForm.Show;
|
|
Count := StrToInt(edRows.Text);
|
|
FetchForm.ProgressBar.Max := Count;
|
|
FetchForm.CancelLoad := False;
|
|
try
|
|
MSLoader.Load; // loading rows
|
|
finally
|
|
FetchForm.Hide;
|
|
Finish := GetTickCount;
|
|
Freq := 1000;
|
|
SDacForm.StatusBar.Panels[2].Text := 'Time: ' + FloatToStr(Round((Finish - Start) / Freq * 100) / 100) + ' sec.';
|
|
if Query.Active then
|
|
Query.Refresh;
|
|
end;
|
|
end;
|
|
|
|
procedure TLoaderFrame.MSLoaderGetColumnData(Sender: TObject;
|
|
Column: TMSColumn; Row: Integer; var Value: Variant; var IsEOF: Boolean);
|
|
begin
|
|
IsEOF := Row > Count;
|
|
case Column.Index of
|
|
0: Value := Row;
|
|
1: Value := Random(100);
|
|
2: Value := Random*100;
|
|
3: Value := 'abc01234567890123456789';
|
|
4: Value := Date;
|
|
else
|
|
Value := Null;
|
|
end;
|
|
|
|
FetchForm.ProgressBar.Position := Row;
|
|
|
|
if PMInterval = 100 then begin // 100 fields per time
|
|
Application.ProcessMessages;
|
|
if FetchForm.CancelLoad then begin
|
|
MessageDlg('Loading was cancelled by user.' + #13#10
|
|
+ 'Sucessfully loaded '+ IntToStr(Row - 1) + ' rows.', mtInformation, [mbOK], 0);
|
|
IsEof := True;
|
|
end;
|
|
end
|
|
else
|
|
inc(PMInterval);
|
|
end;
|
|
|
|
procedure TLoaderFrame.PutData(Sender: TMSLoader);
|
|
var
|
|
i: integer;
|
|
begin
|
|
PMInterval := 0;
|
|
|
|
for i := 1 to Count do begin
|
|
Sender.PutColumnData(0, i, i);
|
|
Sender.PutColumnData('NUM', i, Random(100));
|
|
Sender.PutColumnData(2, i, Random*100);
|
|
Sender.PutColumnData(3, i, 'abc01234567890123456789');
|
|
Sender.PutColumnData(4, i, Date);
|
|
FetchForm.ProgressBar.Position := i;
|
|
if PMInterval = 100 then begin // 100 records per time
|
|
PMInterval := 0;
|
|
Application.ProcessMessages;
|
|
if FetchForm.CancelLoad then begin
|
|
MessageDlg('Loading was cancelled by user.' + #13#10
|
|
+ 'Sucessfully loaded '+ IntToStr(i) + ' rows.', mtInformation, [mbOK], 0);
|
|
Abort;
|
|
end;
|
|
end
|
|
else
|
|
inc(PMInterval);
|
|
end;
|
|
end;
|
|
|
|
procedure TLoaderFrame.btDeleteAllClick(Sender: TObject);
|
|
begin
|
|
TruncCommand.Execute;
|
|
if Query.Active then
|
|
Query.Refresh;
|
|
end;
|
|
|
|
procedure TLoaderFrame.QueryAfterOpen(DataSet: TDataSet);
|
|
begin
|
|
SDACForm.StatusBar.Panels[1].Text := 'Count: ' + IntToStr(DataSet.RecordCount);
|
|
end;
|
|
|
|
procedure TLoaderFrame.QueryBeforeClose(DataSet: TDataSet);
|
|
begin
|
|
SDACForm.StatusBar.Panels[1].Text := '';
|
|
end;
|
|
|
|
procedure TLoaderFrame.rgEventClick(Sender: TObject);
|
|
begin
|
|
if rgEvent.ItemIndex = 0 then begin
|
|
MSLoader.OnGetColumnData := MSLoaderGetColumnData;
|
|
MSLoader.OnPutData := nil;
|
|
end
|
|
else begin
|
|
MSLoader.OnGetColumnData := nil;
|
|
MSLoader.OnPutData := PutData;
|
|
end
|
|
end;
|
|
|
|
procedure TLoaderFrame.QueryBeforeFetch(DataSet: TCustomDADataSet;
|
|
var Cancel: Boolean);
|
|
begin
|
|
if DataSet.FetchingAll then begin
|
|
FetchForm.Show;
|
|
Application.ProcessMessages;
|
|
Cancel := not FetchForm.Visible;
|
|
|
|
if Cancel then
|
|
SdacForm.StatusBar.Panels[1].Text := 'RecordCount: ' + IntToStr(DataSet.RecordCount);
|
|
end;
|
|
end;
|
|
|
|
procedure TLoaderFrame.QueryAfterFetch(DataSet: TCustomDADataSet);
|
|
begin
|
|
if not DataSet.FetchingAll then begin
|
|
FetchForm.Close;
|
|
Application.ProcessMessages;
|
|
|
|
SdacForm.StatusBar.Panels[1].Text := 'RecordCount: ' + IntToStr(DataSet.RecordCount);
|
|
end;
|
|
end;
|
|
|
|
// Demo management
|
|
procedure TLoaderFrame.Initialize;
|
|
begin
|
|
inherited;
|
|
Query.Connection := Connection as TMSConnection;
|
|
MSLoader.Connection := Connection as TMSConnection;
|
|
TruncCommand.Connection := Connection as TMSConnection;
|
|
|
|
if FetchForm = nil then
|
|
FetchForm := TFetchForm.Create(SDACForm);
|
|
rgEvent.ItemIndex := 1;
|
|
end;
|
|
|
|
procedure TLoaderFrame.SetDebug(Value: boolean);
|
|
begin
|
|
Query.Debug := Value;
|
|
TruncCommand.Debug := Value;
|
|
end;
|
|
|
|
end.
|