⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loader.pas

📁 Oracle Data Access Components Source Code ODAC v.6.70.0.45
💻 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 + -