📄 loader.pas
字号:
unit Loader;
interface
uses
{$IFDEF LINUX}
SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs, QStdCtrls,
QDBCtrls, QComCtrls, QExtCtrls, QGrids, QDBGrids, QButtons, OdacClx, CRAccess,
{$ELSE}
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DBCtrls, ExtCtrls, Grids, DBGrids, StdCtrls, ToolWin, ComCtrls, Buttons,
OdacVcl,
{$ENDIF}
{$IFNDEF VER130}
Variants,
{$ENDIF}
{$IFDEF FPC}
LResources,
{$ENDIF}
DB, {$IFNDEF FPC}MemDS{$ELSE}MemDataSet{$ENDIF},
OraLoader, OraScript, DBAccess, Ora, OraSmart, Fetch, DALoader,
OdacDemoFrame, OdacDemoForm, DAScript;
type
TLoaderFrame = class(TOdacDemoFrame)
DBGrid: TDBGrid;
DataSource: TDataSource;
ToolBar: TPanel;
btOpen: TSpeedButton;
DBNavigator: TDBNavigator;
btClose: TSpeedButton;
Query: TSmartQuery;
btLoad: TSpeedButton;
OraLoader: TOraLoader;
btDeleteAll: TSpeedButton;
Panel1: TPanel;
rgEvent: TRadioGroup;
rgMode: TRadioGroup;
edRows: TEdit;
Label1: TLabel;
Panel2: TPanel;
procedure btOpenClick(Sender: TObject);
procedure btCloseClick(Sender: TObject);
procedure btLoadClick(Sender: TObject);
procedure GetColumnData(Sender: TObject; Column: TDPColumn;
Row: Integer; var Value: Variant; var EOF: Boolean);
procedure btDeleteAllClick(Sender: TObject);
procedure QueryAfterOpen(DataSet: TDataSet);
procedure QueryBeforeClose(DataSet: TDataSet);
procedure PutData(Sender: TOraLoader);
procedure rgEventClick(Sender: TObject);
procedure rgModeClick(Sender: TObject);
procedure QueryBeforeFetch(DataSet: TCustomDADataSet;
var Cancel: Boolean);
procedure QueryAfterFetch(DataSet: TCustomDADataSet);
private
{ Private declarations }
public
procedure Initialize; override;
procedure SetDebug(Value: boolean); override;
destructor Destroy; override;
end;
implementation
{$IFNDEF FPC}
{$IFDEF CLR}
{$R *.nfm}
{$ENDIF}
{$IFDEF WIN32}
{$R *.dfm}
{$ENDIF}
{$IFDEF LINUX}
{$R *.xfm}
{$ENDIF}
{$ENDIF}
destructor TLoaderFrame.Destroy;
begin
inherited;
FreeAndNil(FetchForm);
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: Int64;
begin
Start := GetTickCount;
OraLoader.Load; // loading rows
Finish := GetTickCount;
OdacForm.StatusBar.Panels[2].Text := 'Time: ' + FloatToStr((Finish - Start) / 1000) + ' sec.';
if Query.Active then
Query.Refresh;
end;
procedure TLoaderFrame.GetColumnData(Sender: TObject;
Column: TDPColumn; Row: Integer; var Value: Variant; var EOF: Boolean);
begin
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;
EOF := Row > StrToInt(edRows.Text);
end;
procedure TLoaderFrame.PutData(Sender: TOraLoader);
var
Count: integer;
i: integer;
begin
Count := StrToInt(edRows.Text);
for i := 1 to Count do begin
Sender.PutColumnData(0, i, i);
Sender.PutColumnData('NUM', i, Random(100));
//Sender.PutColumnData(1, i, Random(100));
Sender.PutColumnData(2, i, Random*100);
Sender.PutColumnData(3, i, 'abc01234567890123456789');
Sender.PutColumnData(4, i, Date);
end;
end;
procedure TLoaderFrame.btDeleteAllClick(Sender: TObject);
begin
Query.Session.ExecSQL('TRUNCATE TABLE ODAC_Loaded', [Null]);
Query.Session.Commit;
if Query.Active then
Query.Refresh;
end;
procedure TLoaderFrame.QueryAfterOpen(DataSet: TDataSet);
begin
OdacForm.StatusBar.Panels[1].Text := 'RecordCount: ' + IntToStr(DataSet.RecordCount);
end;
procedure TLoaderFrame.QueryBeforeClose(DataSet: TDataSet);
begin
OdacForm.StatusBar.Panels[1].Text := '';
end;
procedure TLoaderFrame.Initialize;
begin
inherited;
Query.Connection := Connection;
rgMode.ItemIndex := Integer(OraLoader.LoadMode);
rgEvent.ItemIndex := 1;
if FetchForm = nil then
FetchForm := TFetchForm.Create(ODACForm);
end;
procedure TLoaderFrame.rgEventClick(Sender: TObject);
begin
if rgEvent.ItemIndex = 0 then begin
OraLoader.OnGetColumnData := GetColumnData;
OraLoader.OnPutData := nil;
end
else begin
OraLoader.OnGetColumnData := nil;
OraLoader.OnPutData := PutData;
end
end;
procedure TLoaderFrame.rgModeClick(Sender: TObject);
begin
OraLoader.LoadMode := TLoadMode(rgMode.ItemIndex);
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
OdacForm.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;
OdacForm.StatusBar.Panels[1].Text := 'RecordCount: ' + IntToStr(DataSet.RecordCount);
end;
end;
procedure TLoaderFrame.SetDebug(Value: boolean);
begin
Query.Debug := Value;
end;
initialization
{$IFDEF FPC}
{$I Loader.lrs}
{$ENDIF}
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -