On Tue, 04 Dec 2007 15:55:58 +0300, Nikolay <t_nick-JGs/[EMAIL PROTECTED]>
wrote:
> именно. Нужен конкретный список
Недавно Хвастунов поделился своими наработками:
TIBETriggerPrefix = (tpBefore, tpAfter);
TIBETriggerSuffix = (tsInsert, tsUpdate, tsDelete);
function IBTriggerPrefix(TrgType : integer) : TIBETriggerPrefix;
begin
if ((TrgType + 1) and 1) > 0 then
Result := tpAfter
else
Result := tpBefore;
end;
function IBTriggerSuffixes(TrgType : integer) : TIBETriggerSuffixes;
var
iTT : integer;
TempRes : TIBETriggerSuffixes;
procedure CheckSlot;
begin
case (iTT and 3) of
1 : TempRes := TempRes + [tsInsert];
2 : TempRes := TempRes + [tsUpdate];
3 : TempRes := TempRes + [tsDelete];
end;
end;
begin
Result := [];
TempRes := Result;
iTT := (TrgType + 1) shr 1;
CheckSlot;
iTT := iTT shr 2;
CheckSlot;
iTT := iTT shr 2;
CheckSlot;
Result := TempRes;
end;
function IBTriggerTypeAsString(TrgType : integer) : string;
var
Pref : TIBETriggerPrefix;
Suff : TIBETriggerSuffixes;
s : string;
i : integer;
procedure AddAction(const AAction : string);
begin
if s = '' then
s := s + AAction
else
s := s + ' OR ' + AAction;
end;
begin
Result := '';
s := '';
// FB 2.1 database event triggers
if (TrgType >= 8192) and (TrgType <= 8196) then
begin
i := TrgType - 8190;
case i of
2 : Result := 'ON CONNECT';
3 : Result := 'ON DISCONNECT';
4 : Result := 'ON TRANSACTION START';
5 : Result := 'ON TRANSACTION COMMIT';
6 : Result := 'ON TRANSACTION ROLLBACK';
end;
Exit;
end;
Pref := IBTriggerPrefix(TrgType);
Suff := IBTriggerSuffixes(TrgType);
if tsInsert in Suff then
AddAction('INSERT');
if tsUpdate in Suff then
AddAction('UPDATE');
if tsDelete in Suff then
AddAction('DELETE');
if Pref = tpBefore then
s := 'BEFORE ' + s
else
s := 'AFTER ' + s;
Result := s;
end;
--
Сергей Смирнов.