Fórum problema com autoincrement no bde #36368

08/04/2003

0

Olá amigos, estou migrando um sistema com base de dados paradox para interbase 6.0 porém estou tendo alguns problemas com campos autoincrement gerados por triggers. Estou usando TDatabase e TQuery, e delphi 3 mas quando vou adicionar um novo cliente, o interbase não gera o código do cliente, ao invés disso ele diz que o campo não pode ser nulo mas como pode isso se a trigger fica no evento beforepost da tabela? Como fazer pro bde reconhecer o autoincrement?

Já estou ficando meio estressado com esse probleminha, não sei se é pq meu delphi é velho mas no momento não posso fazer o upgrade e imagino que solução há, só não a conheço quem sabe alguém aqui pode me ajudar nisso...

Obrigado.


Anonymous

Anonymous

Responder

Posts

08/04/2003

Afarias

Como vc está gerando os códigos via TRIGGERS (no servidor) este código só será gerado quando o registro ´bater´ no servidor!

Desta forma, vc não poderá conhecer o valor gerado antes de fechar e executar novamente a Query. E, para q funcione, vc tem q configurar a propriedade Required to TField (q representa sua chave) para FALSE!

Caso vc precise saber o código gerado NA INCLUSÃO (antes ou durante) vc deve pedir este código ao IB e coloca-lo via código no programa.

Ex:

Crie uma query com o SQL:

SELECT GEN_ID(NOME_GENERATOR, 1) FROM RDB$DATABASE

sempre no evento OnNewRecord ou BeforePost execute esta query, pegue seu valor de retorno e jogue no campo chave!

Se vc usar IBX, basta usar a propriedade GENERATORFIELD e configurar para POST ou APPEND


Abraço.


Responder

Gostei + 0

08/04/2003

Anonymous

Oi afarias, obrigado pela ajuda eu testei no ibconsole e parece realmente funcionar.
Só uma dúvida, eu estou criando os generators pelo IBexpert, e esse comando GEN_ID ele no caso incrementa sozinho ou eu preciso ter uma trigger e uma storedprocedure pra cada autoincrement? Pois no caso se o comando for autosuficiente então significa que eu posso apagar a trigger e a storedproc?
Desculpa o mal jeito, comecei faz pouco tempo no interbase se puder me esclarecer um pouco mais... é que eu gostaria de entender e não só copiar e colar os códigos.


Responder

Gostei + 0

08/04/2003

Afarias

Bom, é isso o GEN_ID incrementa o generator e retorna esse valor incrementado!! -- as Triggers/StoredProcs não tem nada com isso.

Como vc vai ´pedir´ os IDs pelo cliente, realmente NÃO precisa das Triggers ou StoredProcs!


Algumas pessoas mantem as triggers más com o seguinte código:

if (campo_chave is null) then
campo_chave = gen_id(nome_generator, 1);


só em caso de em processos onde não for preenchido o campo_chave no lado cliente, o servidor faz o papel! -- más acho q em geral não é o caso!


Abraço


PS: Não se preocupe! querer entender é um DIFERENCIAL!


Responder

Gostei + 0

08/04/2003

Anonymous

Bem que eu desconfiei: quando uma coisa parece complicada demais quase sempre a gente está é atirando pro lado errado, no fim era uma coisa tão simples.
Acho que também um pouco da culpa é do paradox, o jeito é reaprender a programar usando arquitetura client/server e estudando seus macetes.

Mais uma vez obrigado.


Responder

Gostei + 0

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

Aceitar