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

📄 data.pas

📁 odac for oralce 8i,10g,11g easy to connect to oralce from delphi
💻 PAS
字号:
unit Data;

interface

uses
  Classes, SysUtils,
{$IFNDEF LINUX}
  Windows, Menus, ImgList, StdCtrls, ComCtrls, Buttons, ExtCtrls, Graphics,
  Controls, Forms,
{$ELSE}
  QMenus, QImgList, QStdCtrls, QComCtrls, QButtons, QExtCtrls, QGraphics,
  QControls, QForms,
{$ENDIF}
  DB, MemData, DBAccess,
  Ora, MemDS, OdacVcl, DAScript, OraScript;

type
  TDM = class(TDataModule)
    Connection: TOraSession;
    quDetail: TOraQuery;
    quMaster: TOraQuery;
    dsMaster: TDataSource;
    dsDetail: TDataSource;
    scCreate: TOraScript;
    scDrop: TOraScript;
  private
  public
    procedure KillSession;
    function InTransaction: boolean;
    procedure StartTransaction;
    procedure RollbackTransaction;
    procedure CommitTransaction;
  end;

const
  ProductColor: TColor = $00956500;

var
  DM: TDM;

implementation

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

uses
  Main;

{ TDM }

procedure TDM.KillSession;
var
  KillConnection: TOraSession;
  Query: TOraQuery;
  ClientId, Sid, Serial: string;
begin
  ClientId := IntToStr(GetTickCount);
  Connection.ExecSQL('BEGIN DBMS_SESSION.SET_IDENTIFIER(:a); END;', [ClientId]);
  Query := TOraQuery.Create(nil);
  try
    Query.Session := Connection;
    Query.SQL.Text := 'SELECT SID, Serial# FROM v$session ' +
      'WHERE Username = :UN AND Client_Identifier = :ID';
    Query.ParamByName('UN').AsString := Connection.Username;
    Query.ParamByName('ID').AsString := ClientId;
    Query.Open;
    if Query.RecordCount <> 1 then
      raise Exception.Create('Session can''t be killed');
    Sid := Query.FieldByName('SID').AsString;
    Serial := Query.FieldByName('Serial#').AsString;
  finally
    Query.Free;
  end;
  KillConnection := TOraSession.Create(nil);
  try
    KillConnection.Server := Connection.Server;
    KillConnection.Username := Connection.Username;
    KillConnection.Password := Connection.Password;
    KillConnection.LoginPrompt := False;
    KillConnection.ExecSQL('ALTER SYSTEM KILL SESSION ''' + Sid + ',' + Serial + '''', []);
  finally
    KillConnection.Free;
  end;
end;

function TDM.InTransaction: boolean;
begin
  Result := Connection.InTransaction;
end;

procedure TDM.StartTransaction;
begin
  Connection.StartTransaction;
end;

procedure TDM.CommitTransaction;
begin
  Connection.Commit;
end;

procedure TDM.RollbackTransaction;
begin
  Connection.Rollback;
end;

end.

⌨️ 快捷键说明

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