Componentes.Terceros.SDAC/internal/4.10.0.10/1/Demos/dotNet/SdacDemo/Loader/Loader.pas
2007-10-05 14:48:18 +00:00

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.