Fórum inserir no detail #373040
03/08/2009
0
Esou usando clientdataset e firebird delphi7
Marcio_souzapinto
Curtir tópico
+ 0Posts
03/08/2009
Vmlima
Por favor explique direito o que vc quer fazer...
Você quer inserir na tabela detalhe ou na mestre?
Ja possui a informação da Mestre?
Está querendo rodar isso onde?
Usando quais componentes?
Att.
Gostei + 0
03/08/2009
Marcio_souzapinto
to usando os componentes sqldataset com clientdataset e fazer a transacao gerando id autoincremento, inserindo na master e depois pegando o valor do id e inserir na tabela detail
Gostei + 0
03/08/2009
Marcio_souzapinto
to usando os componentes sqldataset com clientdataset e fazer a transacao gerando id autoincremento, inserindo na master e depois pegando o valor do id e inserir na tabela detail
Gostei + 0
03/08/2009
Marcio_souzapinto
to usando os componentes sqldataset com clientdataset e fazer a transacao gerando id autoincremento, inserindo na master e depois pegando o valor do id e inserir na tabela detail
Gostei + 0
03/08/2009
Vmlima
Realmente isso é complicado (não tanto assim tbm) quando se usa autoincremento...
Se o valor so autoinc aparece no seu Mestre quando vc posta a inserção fica fácil, agora se não aparece vc terá que mudar de estratégia e usar um gerador ou sequencia para pegar esse ID...
Você pode usar uma função do tipo
function TDM_Main.GetCodigo(Generator : string): integer; begin Qry.Close; Qry.SQL.Text:=(´SELECT GEN_ID(´+Generator+´,1) as codigo FROM RDB$DATABASE;´); Qry.Open; result := QryCODIGO.AsInteger; end;
Utilize esse valor que retorna da função, para o ID do seu mestre e pra FK do seu detalhe...
*Isso é apenas uma ideia, e eu utilizo assim sem problemas...
Att.
Gostei + 0
03/08/2009
Marcio_souzapinto
se eu fizer assim e a passoa desistir da inclusao fica este numero de id gerado por issso queria fazer isert into na tabela master e depois na detalhe (banco de dados firebird) pode ser tbem por stored procedure
Gostei + 0
03/08/2009
Vmlima
Pra não ´pular´ códigos, coloque essa função antes do post (beforepost), ou no botão que está confirmando a inserção...
Mas não vejo problemas em pular os códigos... se for a PK ficará em sequencia no banco e não perderá desempenho com isso...
Mesmo por procedure ou trigger vc não conseguirá pegar essa ID logo após a inserção do mesmo...
Se vc precisa desse id no momento da inserção, acho eu que é a melhor maneira de fazer esse autoincremento... e já vi várias pessoas tbm falando que é a melhor maneira...
Att.
Gostei + 0
03/08/2009
Marcio_souzapinto
Gostei + 0
03/08/2009
Vmlima
insert into tabela (IDTABELA, CAMPO2) values (Null, VALOR2)...
tente fazer isso sem o ID... e tente tbm com o ID recebendo Null...
´insert into tabela (CAMPO2) values (VALOR2)´
E como funciona esse returning???
Gostei + 0
03/08/2009
Marcio_souzapinto
create procedure upd_ins_clientes
( id integer,
nome varchar(50),
nascimento date,
sexo char(1))
as
begin
insert into clientes (
nome,
nascimento,
sexo)
values (
:nome,
:nascimento,
:sexo)
returning into :idgerado;
end
retorna o id ja incrementado dai pra frente que eu gostaria de fazer inserir o detail o idgerado + os dados colocados no clientdataset
Gostei + 0
04/08/2009
Vmlima
Ele retorna o ID gerado?
Se sim é só fazer um insert na tabela detalhe colocando o ID que retornou como ID_CLIENTE no detalhe...
Att.
Gostei + 0
04/08/2009
Vmlima
Com o ClientDataSet, voce da um CDS.Insert, insere os valores nos campos (não esqueça do ID_CLIENTE) e da um CDS.post, e CDS.ApplyUpdates... e estará no seu detalhe
Você ja fez todas as conexões no CDS? Já ve os campos da tabela no FieldsEditor?
Att.
Gostei + 0
04/08/2009
Marcio_souzapinto
Será que tem outra forma de fazer isto por procedure no banco
Gostei + 0
05/08/2009
Marcio_souzapinto
Gostei + 0
05/08/2009
Vmlima
abraço
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)