📄 data.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 + -