Erro o criar trigger no Ib
Fiz um Generator de nome Cod_Pac, então incremento um com esta trigger:
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?
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
Curtidas 0
Respostas
Edison_br
17/12/2003
Primeiro: Esse não eh o forum de ib e sim de DELPHI
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.
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.
GOSTEI 0
Paulo
17/12/2003
1º - Apesar de não ser o forum de IB, eu uso IB com Delphi, logo não há como desmembrar, senão se eu levar uma dúvida para lá de IB com Delphi, vc vai me dizer, que este não é um forum de Delphi.
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?!
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?!
GOSTEI 0
Goncalves
17/12/2003
Set Term^;
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!
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!
GOSTEI 0
Goncalves
17/12/2003
Retificando:
Cherado não, gerado!
select gen_id([b:fecd2a2863]nomedogenerator[/b:fecd2a2863],0) ....
Valeu!
Cherado não, gerado!
select gen_id([b:fecd2a2863]nomedogenerator[/b:fecd2a2863],0) ....
Valeu!
GOSTEI 0