Hello, Nikolay!
You wrote  on Tue, 4 Dec 2007 14:55:58 +0200:

 N>>> В таблице rdb$triggers есть поле тип триггера. Значения от 0 до 6 я
 N>>> знаю, а что означают значения после 6 ? У кого перечень есть?

 >> Подозреваю, что это те, которые на несколько действий. Проверять
 >> лень.

 N> именно. Нужен конкретный список

вот конкретный код генерации текста.... на паскаль переводить лень :-)

    local Type := DataSet(DataSet, doGetFieldAs,'Type_', AsInteger)+1, i := 0
    local cType := if(Type and 1, 'A', 'B'), cTypes := {'I','U','D'}
    local lType := if(Type and 1, 'after', 'before'), lTypes :=
{'insert','update','delete'}
    Type := Type div 2
    while Type <> 0
      cType += cTypes[Type and 3]
      lType += if(i++ = 1,' ',' or ') + lTypes[Type and 3]
      Type := Type div 4
    end
    DataSet(DataSet, doSetField, 'Type_', cType)

    Text := Format('create or alter trigger %s for %s%s %s %s',\
      {DataSet(DataSet, doGetField, 'rdb$trigger_name')\
      ,DataSet(DataSet, doGetField, 'rdb$relation_name')\
      ,if(DataSet(DataSet, doGetField, 'rdb$trigger_inactive', 0)=1,'
inactive','')\
      ,lType\
      ,if((Pos:=DataSet(DataSet, doGetField,
'rdb$trigger_sequence'))<>0,Format('position %d', {Pos}),'')})
    Text += crlf + DataSet(DataSet, doGetField, 'Text', '')
    DataSet(DataSet, doSetField, 'Text', Text)
    DataSet(DataSet,doNext)

Фёдоров Евгений.
ЗАО "Трест-М". Екатеринбург.


Ответить