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;

-- 
Сергей Смирнов.

Ответить