GARANTIR DESCONTO

Fórum Como disparar trigger no evento before insert de uma tabela #49474

21/02/2005

0

Galera, criei um generator e depois uma trigger no evento before insert para incrementar um generator, acontece que quando dou o comando insert na query ou seja ibquery.insert ele não dispara a trigger. Como faço isso ?
Estou usando os componentes da palheta INTERBASE

Obrigado desde já


Dr. Interbase

Dr. Interbase

Responder

Posts

22/02/2005

Maicongabriel

[quote:64af27e94b=´Dr. Interbase´]Galera, criei um generator e depois uma trigger no evento before insert para incrementar um generator, acontece que quando dou o comando insert na query ou seja ibquery.insert ele não dispara a trigger. Como faço isso ?
Estou usando os componentes da palheta INTERBASE

Obrigado desde já[/quote:64af27e94b]

As Triggers são disparadas automaticamente pelo banco! Se ela não esta funcionando, pode ser:
- Código mal implementado na trigger.
- Ideia errada do funcionamento das triggers/generators.

Algum erro lhe é apresentado? Ou simplesmente nenhum código é gerado pelo generator? Qual é o código da sua Trigger ?


Responder

Gostei + 0

22/02/2005

Afarias

|acontece que quando dou o comando insert na query ou seja
|ibquery.insert ele não dispara a trigger. Como faço isso ?

quando vc dá o comando INSERT vc não fez NADA AINDA no banco -- a trigger só será disparada com a execução do comando SQL INSERT, isso só vai ocorrer após o post.

para vc q usa IBX, umas dicas:

não use o método Insert, use Append.
não utilize generators com triggers, use a propriedade GeneratorField do componente e configure para OnNewRecord ou BeforePost

Leia outros posts neste fórum sobre generators e auto-incremento


T+


Responder

Gostei + 0

22/02/2005

Fred

vc pode joga 0 no codigo e quando o banco gravar ele coloca o valor do generator no campo, mas se vc precisar usar esse campo no programa logo apos gravar vc tera problemas!!! o que eu fiz foi o seguinte!! apague todas as triggers dos generator deixe apenas os generators, no promgra crie a seginte function::
OBS: (Isso com DBExpress);

function TfrmPadrao.AutoInc(gen : string): integer;
var
ResultSet : TCustomSQLDataSet;
SQLstmt : string;
begin
result := 0;
SQLstmt := ´select gen_id(´+gen+´,1) ´ +
´as VALOR from RDB$DATABASE;´;
ResultSet := nil;
try
dm.SQLConnection1.Execute(SQLstmt, nil, @ResultSet);
if Assigned(ResultSet) then
Result := ResultSet.FieldByName(´VALOR´).AsInteger;
finally
ResultSet.Free;
end;
end;

ai no evento OnNewRecord ou outro semelhante vc coloca seudataSetCODIGO.AsInteger := AutoInc(´NOMEDOGENERATOR´);


Responder

Gostei + 0

22/02/2005

Fred

se vc nao tiver usando DBExpress, faca isso com uma query!!

coloque o seguinte codigo na query

SELECT GEN_ID(GEN_PAGAMENTO_ID,1) AS VALOR FROM RDB$DATABASE


O PROBLEMA EH QUE VC TERIA QUE TER UMA QUERY PRA CADA GENERATOR!!

OBS: TESTEI NO IBCONSOLE E FUNCIONOU 8)


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar