Como disparar trigger no evento before insert de uma tabela
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á
Estou usando os componentes da palheta INTERBASE
Obrigado desde já
Dr. Interbase
Curtidas 0
Respostas
Maicongabriel
21/02/2005
[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 ?
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 ?
GOSTEI 0
Afarias
21/02/2005
|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+
|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+
GOSTEI 0
Fred
21/02/2005
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´);
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´);
GOSTEI 0
Fred
21/02/2005
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)
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)
GOSTEI 0