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

📄 multiqueries.pas

📁 Oracle Data Access Components Source Code ODAC v.6.70.0.45
💻 PAS
字号:
unit MultiQueries;

interface

uses
{$IFDEF LINUX}
  SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs, QStdCtrls,
  QDBCtrls, QComCtrls, QExtCtrls, QGrids, QDBGrids, QButtons, OdacClx,
{$ELSE}
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  DBCtrls, ExtCtrls, Grids, DBGrids, StdCtrls, ToolWin, ComCtrls, Buttons,
  OdacVcl,
{$ENDIF}
  Db, DBAccess, Ora, MemDS, OdacDemoFrame, OdacDemoForm;

type
  TMultiQueriesFrame = class(TOdacDemoFrame)
    ConnectDialog: TConnectDialog;
    OraSession2: TOraSession;
    OraSession3: TOraSession;
    OraSession4: TOraSession;
    OraQuery1: TOraQuery;
    OraQuery2: TOraQuery;
    OraQuery3: TOraQuery;
    OraQuery4: TOraQuery;
    DataSource1: TDataSource;
    DataSource2: TDataSource;
    DataSource3: TDataSource;
    DataSource4: TDataSource;
    ToolBar: TPanel;
    Panel: TPanel;
    Label2: TLabel;
    Panel4: TPanel;
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    DBGrid3: TDBGrid;
    DBGrid4: TDBGrid;
    Splitter1: TSplitter;
    Splitter2: TSplitter;
    Splitter3: TSplitter;
    Splitter4: TSplitter;
    meSQL: TMemo;
    Panel1: TPanel;
    btClose: TSpeedButton;
    btOpen: TSpeedButton;
    btGetRP: TSpeedButton;
    cbNonBlocking: TCheckBox;
    cbFetchAll: TCheckBox;
    cbPR: TCheckBox;
    edFetchRows: TEdit;
    Panel2: TPanel;
    lbRP1: TLabel;
    lbRP2: TLabel;
    lbRP3: TLabel;
    lbRP4: TLabel;
    cbMultiSession: TCheckBox;
    rbOne: TRadioButton;
    rbTwo: TRadioButton;
    rbFour: TRadioButton;
    Panel5: TPanel;
    Panel6: TPanel;
    Panel7: TPanel;
    Panel8: TPanel;
    lbStatus3: TLabel;
    lbStatus1: TLabel;
    lbStatus2: TLabel;
    lbStatus4: TLabel;
    procedure btOpenClick(Sender: TObject);
    procedure btCloseClick(Sender: TObject);
    procedure cbFetchAllClick(Sender: TObject);
    procedure cbNonBlockingClick(Sender: TObject);
    procedure edFetchRowsExit(Sender: TObject);
    procedure btGetRPClick(Sender: TObject);
    procedure meSQLExit(Sender: TObject);
    procedure cbMultiSessionClick(Sender: TObject);
    procedure OraQueryAfterExecute(Sender: TObject; Result: Boolean);
    procedure OraQueryAfterFetch(DataSet: TCustomDADataSet);
    procedure OraQueryAfterClose(DataSet: TDataSet);
    procedure SplitterMoved(Sender: TObject);
  private
    FStatusLabels: array of TLabel;
    procedure GetRP;
    procedure SetLabelCaption(DataSet: TObject; Value: string);
  public
    procedure Initialize; override;
    procedure SetDirect(Value: boolean); override;
    procedure SetDebug(Value: boolean); override;
  end;

implementation

{$IFDEF CLR}
{$R *.nfm}
{$ENDIF}
{$IFDEF WIN32}
{$R *.dfm}
{$ENDIF}
{$IFDEF LINUX}
{$R *.xfm}
{$ENDIF}

procedure TMultiQueriesFrame.GetRP;
begin
  lbRP1.Caption:= IntToStr(OraQuery1.RowsProcessed);
  lbRP1.Update;
  lbRP2.Caption:= IntToStr(OraQuery2.RowsProcessed);
  lbRP2.Update;
  lbRP3.Caption:= IntToStr(OraQuery3.RowsProcessed);
  lbRP3.Update;
  lbRP4.Caption:= IntToStr(OraQuery4.RowsProcessed);
  lbRP4.Update;
end;

procedure TMultiQueriesFrame.btOpenClick(Sender: TObject);
const
  Delay = 30;
  MaxCnt = 70;
begin
  OraQuery1.Open;
  Update;
  if rbTwo.Checked or rbFour.Checked then begin
    if cbMultiSession.Checked and not OraSession2.Connected then begin
      AssignConnectionTo(OraSession2);
      OraSession2.Connect;
    end;
    OraQuery2.Open;
    Update;
    if rbFour.Checked then begin
      if cbMultiSession.Checked and not OraSession3.Connected then begin
        AssignConnectionTo(OraSession3);
        OraSession3.Connect;
      end;
      OraQuery3.Open;
      Update;
      if cbMultiSession.Checked and not OraSession4.Connected then begin
        AssignConnectionTo(OraSession4);
        OraSession4.Connect;
      end;
      OraQuery4.Open;
      Update;
    end;
  end;

  if cbNonBlocking.Checked and cbPR.Checked then begin
  // works for four datasets only
    while not (OraQuery1.Fetched and OraQuery2.Fetched and OraQuery3.Fetched and OraQuery4.Fetched) and
      OraQuery1.Active and OraQuery2.Active and OraQuery3.Active and OraQuery4.Active
    do begin
      GetRP;
      Application.ProcessMessages;
    end;
  end;
end;

procedure TMultiQueriesFrame.btCloseClick(Sender: TObject);
begin
  OraQuery1.Close;
  OraQuery2.Close;
  OraQuery3.Close;
  OraQuery4.Close;
  GetRP;
end;

procedure TMultiQueriesFrame.cbFetchAllClick(Sender: TObject);
begin
  OraQuery1.FetchAll:= cbFetchAll.Checked;
  OraQuery2.FetchAll:= cbFetchAll.Checked;
  OraQuery3.FetchAll:= cbFetchAll.Checked;
  OraQuery4.FetchAll:= cbFetchAll.Checked;
end;

procedure TMultiQueriesFrame.cbNonBlockingClick(Sender: TObject);
begin
  OraQuery1.NonBlocking:= cbNonBlocking.Checked;
  OraQuery2.NonBlocking:= cbNonBlocking.Checked;
  OraQuery3.NonBlocking:= cbNonBlocking.Checked;
  OraQuery4.NonBlocking:= cbNonBlocking.Checked;
end;

procedure TMultiQueriesFrame.edFetchRowsExit(Sender: TObject);
begin
  OraQuery1.FetchRows:= StrToInt(edFetchRows.Text);
  OraQuery2.FetchRows:= StrToInt(edFetchRows.Text);
  OraQuery3.FetchRows:= StrToInt(edFetchRows.Text);
  OraQuery4.FetchRows:= StrToInt(edFetchRows.Text);
end;

procedure TMultiQueriesFrame.btGetRPClick(Sender: TObject);
begin
  GetRP;
end;

procedure TMultiQueriesFrame.meSQLExit(Sender: TObject);
begin
  OraQuery1.SQL.Assign(meSQL.Lines);
  OraQuery2.SQL.Assign(meSQL.Lines);
  OraQuery3.SQL.Assign(meSQL.Lines);
  OraQuery4.SQL.Assign(meSQL.Lines);
end;

procedure TMultiQueriesFrame.Initialize;
begin
  inherited;

  OraQuery1.Connection := Connection;

  meSQLExit(Self);
  SetLength(FStatusLabels, 4);
  FStatusLabels[0] := lbStatus1;
  FStatusLabels[1] := lbStatus2;
  FStatusLabels[2] := lbStatus3;
  FStatusLabels[3] := lbStatus4;
end;

procedure TMultiQueriesFrame.SetDirect(Value: boolean);
begin
  OraSession2.Options.Direct := Value;
  OraSession3.Options.Direct := Value;
  OraSession4.Options.Direct := Value;
end;

procedure TMultiQueriesFrame.cbMultiSessionClick(Sender: TObject);
begin
  if cbMultiSession.Checked then begin
    OraQuery2.Session:= OraSession2;
    OraQuery3.Session:= OraSession3;
    OraQuery4.Session:= OraSession4;
  end
  else begin
    OraQuery2.Session:= OdacForm.OraSession;
    OraQuery3.Session:= OdacForm.OraSession;
    OraQuery4.Session:= OdacForm.OraSession;
  end;
end;
{
SELECT * FROM All_Objects
  WHERE OWNER IN ('SYS','PUBLIC','SYSTEM','SCOTT')
}

procedure TMultiQueriesFrame.SetLabelCaption(DataSet: TObject; Value: string);
begin
  with FStatusLabels[Byte(TComponent(DataSet).Tag) - 1] do begin
    Caption := Value;
    Update;
  end;
end;

procedure TMultiQueriesFrame.OraQueryAfterExecute(Sender: TObject;
  Result: Boolean);
begin
  if Result then
    SetLabelCaption(Sender, 'Executed. Fetch...')
  else
    SetLabelCaption(Sender, 'Execution failed!');
end;

procedure TMultiQueriesFrame.OraQueryAfterFetch(DataSet: TCustomDADataSet);
begin
  SetLabelCaption(DataSet, 'Fetched');
end;

procedure TMultiQueriesFrame.OraQueryAfterClose(DataSet: TDataSet);
begin
  SetLabelCaption(DataSet, '');
end;

procedure TMultiQueriesFrame.SplitterMoved(Sender: TObject);
begin
  if Sender = Splitter2 then
    Panel7.Width := Panel5.Width
  else
    Panel5.Width := Panel7.Width
end;

procedure TMultiQueriesFrame.SetDebug(Value: boolean);
begin
  OraQuery1.Debug := Value;
  OraQuery2.Debug := Value;
  OraQuery3.Debug := Value;
  OraQuery4.Debug := Value;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -