Erro o criar trigger no Ib
17/12/2003
0
Set Term!!;
Create trigger ´Tr_Pac´ for ´TbPac´ before insert position 0
as begin
new.id = gen.id(cod_pac,1);
end;
set term;!!
Já tirei as aspas, já retirei os pontos-e-vírgulas, porem ainda não consegui fazer funcionar a trigger. Em cada situação, um erro diferente.
Oura coisa, qdo crio uma tabela, ela está vazia, certo?Só q qdo eu habilito o generator field, na propriedade da query no form do delphi, ela não incrementa 1. Às vezes tenho que colocar um manualmente e depois ela incremanta. Algumas tabelas minhas dão erro de violação de integridade(chave primária sendo duplicada). Como ter um banco IB sem problemas como esse? O que devo fazer?
Paulo
Posts
17/12/2003
Edison_br
Segundo:De uma olhada na documentação do ib pb não eh
gen.id(cod_pac,1); o correto seria gen_id(cod_pac,1);
>> Em cada situação, um erro diferente.
Se vc dizer qual erro tem um monte de gente que podera lhe ajudar.
>>ela não incrementa 1.
Se vc precisa mostrar o código qdo vc está cadastrando vc deve utilizar uma Stored Procedure nâo Trigger.
17/12/2003
Paulo
2º - O generatorfield das querys deveriam fazer isso(incrementar), sem a necessidade de SP ou Trigger´s, certo?mas não fazem. Não que eu precise mostrar o código, é que ele é uma chave primária e tem que ter valores distinto, senão dá erro de integridade, valeu?!
17/12/2003
Goncalves
Create trigger Tr_Pac for TbPac before insert position 0
as begin
new.id = gen_id(cod_pac,1);
end;
^
set term;^
onde:
=> Tr_Pac : Nome que vc escolhe para a trigger;
=> TbPac: Nome tabela ao qual o campo será incrementado;
=> new.id : Esta descrição ´id´, é o seu nome de coluna na tabela TbPac? Se não, o correto seria new.nomedocampodatabela.
Não é necessário habilitar o generator field na propriedade da query no form. Para que o código a ser gerado já seja mostrado antes de vc salver o registro, faça o seguinte:
Cria uma query com o seguinte comando no SQL:
select gen_id(teste,0) from RDB$Database
// Isso trará o último número cherado.
No evento AfterInsert vc coloca o seguinte:
Query.open;
CampodoForm.Text := IntToStr(QueryGen_id.Value);
// Gen_id será o field da Query
No evento AfterPost vc coloca o seguinte:
Query.Close
Cara, qualquer dúvida me contate!
Abraços!
17/12/2003
Goncalves
Cherado não, gerado!
select gen_id([b:fecd2a2863]nomedogenerator[/b:fecd2a2863],0) ....
Valeu!
Clique aqui para fazer login e interagir na Comunidade :)