Fórum Inserir chave primaria como chave secundaria em outra tabela. #584574
08/08/2017
0
Ola!
Eu tenho 2 tabelas em um BD firebird. Quando eu clico no botao salvar eu quero salver um registro em uma tabela e salvar outros dados em outra tabela com o campo chave da primeira tabela na segunda. Quando clico uma vez no botao pra salvar funciona blz so que se eu inserir outro registro ele salva na segunda tabela o valor da chave anterior de novo(da primeira vez que cliquei no botao salvar.).
aqui esta o codigo do botao salvar:
o que estou fazendo errado?
obrigado
Eu tenho 2 tabelas em um BD firebird. Quando eu clico no botao salvar eu quero salver um registro em uma tabela e salvar outros dados em outra tabela com o campo chave da primeira tabela na segunda. Quando clico uma vez no botao pra salvar funciona blz so que se eu inserir outro registro ele salva na segunda tabela o valor da chave anterior de novo(da primeira vez que cliquei no botao salvar.).
aqui esta o codigo do botao salvar:
if (edtDetalheEntrada.Text <> '') and (edtNomeCliente.Text <> '') and (edtNumFicha.Text <> '') then
Begin
With DM.cdsEntradas do
Begin
Append;
FieldbyName('TIPO_ENTRADA').AsString := cmbEntradas.Text;
FieldbyName('DETALHE_ENTRADA').AsString := edtDetalheEntrada.Text;
FieldbyName('DATA').AsString := DatetoStr(cmbData.Date);
FieldbyName('NUM_FICHA').AsString := edtNumFicha.Text;
FieldbyName('NOME_CLIENTE').AsString := edtNomeCliente.Text;
FieldbyName('VALOR').AsCurrency := edtValor.Value;
FieldbyName('OBSERVACAO').AsString := edtObs.Text;
FieldbyName('FORMA_PGTO').AsString := RadioGroup1.Items[RadioGroup1.ItemIndex];
Post;
ApplyUPdates(0);
Close;
OPen;
if RadioGroup1.ItemIndex = 1 then
Begin
With DM.cdsCheques do
Begin
Append;
FieldbyName('BANCO').AsString := edtBanco.Text;
FieldbyName('DATA').AsString := DatetoStr(cmbData.Date);
FieldbyName('DATA_CHEQUE').AsString := DateToStr(cmbDataVencimento.Date);
FieldbyName('ENTRADAID').AsInteger := DM.cdsEntradas.FieldByName('ENTRADA_ID').AsInteger;;
FieldbyName('NUM_CHEQUE').AsString := edtNumCheque.Text;
FieldbyName('PARCELAS').AsString := edtNumParcelas.Text;
FieldbyName('VALOR').AsCurrency := edtValorCheque.Value;
Post;
ApplyUpdates(0);
Close;
Open;
End;
End;
if RadioGroup1.ItemIndex = 3 then
Begin
With DM.cdsNotas do
Begin
Append;
FieldbyName('ENTRADAID').AsInteger := DM.cdsEntradas.FieldByName('ENTRADA_ID').AsInteger;
FieldbyName('VENCIMENTO').AsString := DateToStr(cmbVencNota.Date);
FieldbyName('NUM_NOTA').AsString := edtNumeroNota.Text;
FieldbyName('CPF').AsString := edtCPF.Text;
FieldByName('EMITENTE').AsString := edtEmitente.Text;
FieldByName('VALOR').AsCurrency := edtValor.Value;
FieldByName('ENDERECO').AsString := edtEnderecoNota.Text;
Post;
ApplyUpdates(0);
Close;
Open;
End;
End;
End;
frmEntradas.btAbreEntrada.Enabled := not DM.cdsEntradas.IsEmpty;
frmEntradas.btRemoverEntrada.Enabled := not DM.cdsEntradas.IsEmpty;
frmEntradas.btEditaEntrada.Enabled := not DM.cdsEntradas.IsEmpty;
End;
o que estou fazendo errado?
obrigado
Eduardo Jr
Curtir tópico
+ 0
Responder
Post mais votado
15/08/2017
Fala Eduardo Jr, tudo bom?
Não sei se você já resolveu o problema. Mas aqui vai a minha sugestão ;)
Após o comando "open" de seu "DM.cdsEntradas" coloque o seguinte comando abaixo:
O comando acima, garante que toda vez que for inserido um novo registro no cdsEntradas, o mesmo estará setado na última linha do seu clientDataSet. Consequentemente você conseguirá pegar o próximo ID. :D
Um forte abraço.
Att, Douglas Claudio.
Não sei se você já resolveu o problema. Mas aqui vai a minha sugestão ;)
Após o comando "open" de seu "DM.cdsEntradas" coloque o seguinte comando abaixo:
DM.cdsEntradas.last
O comando acima, garante que toda vez que for inserido um novo registro no cdsEntradas, o mesmo estará setado na última linha do seu clientDataSet. Consequentemente você conseguirá pegar o próximo ID. :D
Um forte abraço.
Att, Douglas Claudio.
Douglas Souza
Responder
Gostei + 1
Mais Posts
23/08/2017
Eduardo Jr
Muito obrigado Douglas
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)