Inserir chave primaria como chave secundaria em outra tabela.

Delphi

08/08/2017

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:

 
 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

Eduardo Jr

Curtidas 0

Melhor post

Douglas Souza

Douglas Souza

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:

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.
GOSTEI 1

Mais Respostas

Eduardo Jr

Eduardo Jr

08/08/2017

Muito obrigado Douglas
GOSTEI 0
POSTAR