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

📄 trace.pas

📁 ODAC 6 最新版的﹐網上找了好久才找到﹐不太好找啊﹐大家一起共享
💻 PAS
字号:
unit Trace;

interface

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

type
  TTraceFrame = class(TOdacDemoFrame)
    OraQuery: TOraQuery;
    DBGrid: TDBGrid;
    DataSource: TDataSource;
    meSQL: TMemo;
    Panel4: TPanel;
    ToolBar: TPanel;
    btClose: TSpeedButton;
    btOpen: TSpeedButton;
    Panel2: TPanel;
    Panel1: TPanel;
    DBNavigator1: TDBNavigator;
    Splitter1: TSplitter;
    OraTrace: TOraTrace;
    Panel3: TPanel;
    cbSQLTrace: TCheckBox;
    cbBindVariables: TCheckBox;
    cbWaitEvents: TCheckBox;
    Panel5: TPanel;
    cbTraceEnabled: TCheckBox;
    btTraceFileName: TSpeedButton;
    btPlSqlTracePause: TSpeedButton;
    Panel6: TPanel;
    cbPlSqlTrace: TCheckBox;
    btPlSqlTraceResume: TSpeedButton;
    btShowTraceEvents: TSpeedButton;
    btExecute: TSpeedButton;
    procedure btOpenClick(Sender: TObject);
    procedure btCloseClick(Sender: TObject);
    procedure meSQLExit(Sender: TObject);
    procedure cbBindVariablesClick(Sender: TObject);
    procedure cbWaitEventsClick(Sender: TObject);
    procedure cbSQLTraceClick(Sender: TObject);
    procedure cbPlSqlTraceClick(Sender: TObject);
    procedure cbTraceEnabledClick(Sender: TObject);
    procedure btTraceFileNameClick(Sender: TObject);
    procedure btPlSqlTracePauseClick(Sender: TObject);
    procedure btPlSqlTraceResumeClick(Sender: TObject);
    procedure btShowTraceEventsClick(Sender: TObject);
    procedure btExecuteClick(Sender: TObject);
  private
    { Private declarations }
  public
    procedure Initialize; override;
    procedure SetDebug(Value: boolean); override;
  end;

var
  TraceFrame: TTraceFrame;

implementation

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

procedure TTraceFrame.Initialize;
begin
  inherited;

  OraQuery.Connection := Connection;
  OraTrace.Session := Connection as TOraSession;

  meSQL.Lines.Assign(OraQuery.SQL);
  if OraTrace.SqlTraceMode <> [] then begin
    cbSQLTrace.Checked := True;
    cbBindVariables.Checked := smBindVariables in OraTrace.SqlTraceMode;
    cbWaitEvents.Checked := smWaitEvents in OraTrace.SqlTraceMode;
  end
  else begin
    cbSQLTrace.Checked := False;
    cbBindVariables.Enabled := False;
    cbWaitEvents.Enabled := False;
  end;
  if OraTrace.PlSqlTraceMode <> [] then
    cbPlSqlTrace.Checked := True
  else
    cbPlSqlTrace.Checked := False;

{$IFNDEF LINUX}
  if Application.MessageBox('ALTER SESSION privilege must be granted for using SQL TRACE.'#13'Enable trace?',
    PChar(Application.Title), MB_ICONQUESTION or MB_YESNO) = IDYES
{$ELSE}
  if Application.MessageBox('ALTER SESSION privilege must be granted for using SQL TRACE.'#13'Enable trace?',
    Application.Title, [smbYes, smbNo]) = smbYes
{$ENDIF}
  then
    OraTrace.Enabled := True;
  cbTraceEnabled.Checked := OraTrace.Enabled;
end;

procedure TTraceFrame.SetDebug(Value: boolean);
begin
  OraQuery.Debug := Value;
end;

procedure TTraceFrame.meSQLExit(Sender: TObject);
begin
  if Trim(OraQuery.SQL.Text) <> Trim(meSQL.Lines.Text) then
    OraQuery.SQL.Text := meSQL.Lines.Text;
end;

procedure TTraceFrame.btOpenClick(Sender: TObject);
begin
  OraQuery.SQL.Text := meSQL.Lines.Text;
  OraQuery.Open;
end;

procedure TTraceFrame.btCloseClick(Sender: TObject);
begin
  OraQuery.Close;
end;

procedure TTraceFrame.btExecuteClick(Sender: TObject);
begin
  OraQuery.SQL.Text := meSQL.Lines.Text;
  OraQuery.Execute;
end;

procedure TTraceFrame.cbSQLTraceClick(Sender: TObject);
var
  TraceMode: TSqlTraceMode;
begin
  if cbSQLTrace.Checked then begin
    TraceMode := [smTypicalStatistics, smTimedStatistics];
    if cbBindVariables.Checked then
      TraceMode := TraceMode + [smBindVariables];
    if cbWaitEvents.Checked then
      TraceMode := TraceMode + [smWaitEvents];
    OraTrace.SqlTraceMode := TraceMode;
    cbBindVariables.Enabled := True;
    cbWaitEvents.Enabled := True;
  end
  else begin
    OraTrace.SqlTraceMode := [];
    cbBindVariables.Enabled := False;
    cbWaitEvents.Enabled := False;
  end;
end;

procedure TTraceFrame.cbBindVariablesClick(Sender: TObject);
begin
  if cbBindVariables.Checked then
    OraTrace.SqlTraceMode := OraTrace.SqlTraceMode + [smBindVariables]
  else
    OraTrace.SqlTraceMode := OraTrace.SqlTraceMode - [smBindVariables];
end;

procedure TTraceFrame.cbWaitEventsClick(Sender: TObject);
begin
  if cbWaitEvents.Checked then
    OraTrace.SqlTraceMode := OraTrace.SqlTraceMode + [smWaitEvents]
  else
    OraTrace.SqlTraceMode := OraTrace.SqlTraceMode - [smWaitEvents];
end;

procedure TTraceFrame.cbPlSqlTraceClick(Sender: TObject);
begin
  if cbPlSqlTrace.Checked then
    OraTrace.PlSqlTraceMode := [pmEnabledCalls, pmEnabledExceptions,
      pmEnabledSql, pmEnabledLines]
  else
    OraTrace.PlSqlTraceMode := [];
  if OraTrace.Enabled then begin
    // restart pl/sql trace
    OraTrace.Enabled := False;
    OraTrace.Enabled := True;
  end;
end;

procedure TTraceFrame.cbTraceEnabledClick(Sender: TObject);
begin
  try
    OraTrace.Enabled := cbTraceEnabled.Checked;
  except
    cbTraceEnabled.Checked := OraTrace.Enabled;
    raise;
  end;
end;

procedure TTraceFrame.btTraceFileNameClick(Sender: TObject);
begin
  ShowMessage(OraTrace.GetTraceFileName);
end;

procedure TTraceFrame.btPlSqlTracePauseClick(Sender: TObject);
begin
  OraTrace.PlSqlTracePause;
end;

procedure TTraceFrame.btPlSqlTraceResumeClick(Sender: TObject);
begin
  OraTrace.PlSqlTraceResume;
end;

procedure TTraceFrame.btShowTraceEventsClick(Sender: TObject);
begin
  meSQL.Lines.Text :=
    'SELECT event_seq, event_line, event_kind, event_unit, event_proc_name, event_comment'#13#10 +
    'FROM sys.plsql_trace_events'#13#10 +
    'WHERE runid = ' + IntToStr(OraTrace.PlSqlTraceRunNumber) + #13#10 +
    'ORDER BY event_seq';
  OraQuery.Close;
  OraQuery.SQL.Assign(meSQL.Lines);
  OraQuery.Open;
end;

end.

⌨️ 快捷键说明

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