Trigger dispara as vezes. Como pode?

Firebird

03/10/2005

Fala pessoal, estou com o seguinte problema:

As vezes, minha aplicação quando vou gravar um novo registro ela da o seguinte erro:

violation of PRIMARY or UNIQUE key

Estou usando componentes DBExpress e BD Firebird 1.5 e triggers before update para gerar os meus ids auto incremento junto com os generators.

O que eu estou precebendo é que a trigger não está disparando as vezes e com isso ocorre este erro, pois se eu passar o id como parametro não deixando a trigger gerar o auto incremento pra mim, funciona.

Alguém tem alguma idéia do que possa estas acontecendo na minha aplicação? Será problema de trigger mesmo? Será problema de config dos componentes?

Valew a todos



[color=blue:b66590210a][b:b66590210a]Movido de Delphi para Interbase/Firebird[/b:b66590210a][/color:b66590210a]


Seu_madruga

Seu_madruga

Curtidas 0

Respostas

Michael

Michael

03/10/2005

Olá!

O trigger não deveria ser no Before Insert? E qual o código do seu trigger? Pode postá-lo aqui?

[]´s


GOSTEI 0
Seu_madruga

Seu_madruga

03/10/2005

Olá! O trigger não deveria ser no Before Insert? E qual o código do seu trigger? Pode postá-lo aqui? []´s


É isso mesmo, eu coloquei errado. É before insert mesmo.
O código é padrão

new.valor = gen_id(generator,1);

Não tem segredo, a trigger funciona o problema é que as vezes por algum motivo ela não dispara. Eu deduzi isso fazendo meu programa passar como parametro o valor id em vez de esperar a trigger geral pra mim e ela funciona normal.
Mas do jeito que está funciona também mas misteriosamente quando vou inserir um registro em alguns dos cadastro do programa, ele simplesmente não funciona. diz que da violação de chave primario como se a trigger não estivesse sendo disparada e o valor id que está sendo inserido é o antigo.


GOSTEI 0
Beppe

Beppe

03/10/2005

Ela só dispara quando o registro for levado para o banco, não será de maneira síncrona se usar um componente que faça caching dos dados. Pode contornar recuperando o valor do generator e atribuí-lo no evento OnNewRecord do dataset.


GOSTEI 0
Seu_madruga

Seu_madruga

03/10/2005

Então será que o Post que eu dou no client antes do ApplyUpdates pode ser o problema?


GOSTEI 0
Beppe

Beppe

03/10/2005

A propriedade Required do campo chave está como True?


GOSTEI 0
Seu_madruga

Seu_madruga

03/10/2005

A propriedade Required do campo chave está como True?


Não, está com False. Coloquei justamente porque a Trigger se encarregará de gerar o ID pra mim.


GOSTEI 0
POSTAR