Bom dia!

  Estou desenvolvimento uma aplicação utilizando Delphi 2007 e o banco de
dados é Firebird. Tenho uma tabela aonde a chave primária é o ID (chave
simples) e criei um generator para não ter o perigo de adicionar o mesmo
código para os demais registros. Criei também um trigger que verifica, se o
campo ID for nulo, ele gera o código e atribui ao campo, conforme exemplo
abaixo:

CREATE GENERATOR GEN_LAB_TABELA_ID; *// cria o generator*

SET TERM ^ ;



CREATE OR ALTER TRIGGER LAB_TABELA_BI FOR LAB_TABELA *//cria o trigger que
se o campo código (ID) for nulo, a trigger atribui um código de acordo com o
generator*
ACTIVE BEFORE INSERT POSITION 1
as
begin
  if (new.codigo is null) then
    new.codigo = gen_id(gen_lab_tabela_id,1);
end
^


SET TERM ; ^

  Adicionei os campos da minha tabela no sqlquery e clientdataset e atribui
a chave ao campo código e fiz as configurações necessárias no provider.
Testei a aplicação e funciona normalmente, porém, na minha tela de cadastro,
eu tenho um grid aonde adiciono os ítens relacionados a tabela principal. No
meu caso a tabela A é a tabela principal e a tabela B a secundária. O
relacionamento que criei entre as tabelas é 1:N. O meu problema, é que após
salvar os dados na tabela A, o banco cria e atribui corretamente o ID,
porém, não retorna valor no meu clientdataset da tabela A, para que eu possa
pegar o código gerado e relacionar com a tabela B.
  Como eu faço isso? Preciso de uma solução urgente! Já fiz algumas
pesquisas na net, mas o que eu encontro é gambiarra, ou o pessoal chamar o
generator direto na aplicação e isso não queria, pois estou preparando a
aplicação para possíveis conexão com banco de dados diferentes, como
Firebird e Oracle, mas isso é outra questão.




Obrigado,


Fabiano


[As partes desta mensagem que não continham texto foram removidas]

Responder a