PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum DBGrid que utiliza MASTER/DETAIL não Atualiza #471521

27/02/2014

0

Olá Pessoal,

Então eu tenho 2 GRID de 2 Tabelas que eu utilizo MASTER/DETAIL:
TABELA PAI - KIT
TABELA FILHO - DETALLE KIT (ESTÁ EM ESPANHOL)

Assim que eu clico no GRID de cima (TABELA KIT), automaticamente também mostrar os dados no GRID de baixo (TABELA DETALLE_KIT).

Bom agora ao meu problema:
Quando eu insiro um novo KIT e DETALLE_KIT ao OnClick no botão SALVAR é redirecionado novamente para os 2 GRIDS citado anteriormente, e o que eu queria era que eles atualizassem assim que fosse redirecionado já com os novos dados recém inseridos.

Eu sei que um modo de fazer isso seria fechando e abrindo o DataSet.
EX como eu fiz ao SALVAR:
 dtsConsultarKit.DataSet.Close;
  dtsConsultarKit.DataSet.Open;
  dtsConsultarDetalheKit.DataSet.Close;
  dtsConsultarDetalheKit.DataSet.Open; 


Com esse código ele não atualiza meus GRID e o engraçado é que se eu repetir mais uma vez esse mesmo código desta maneira ele atualiza! Mais só atualiza quando for inserir o SEGUNDO em diante porque o PRIMEIRO que eu insiro não importa o que eu faça ele nunca atualiza quando é o PRIMEIRO dado a ser inserido no GRID (ou seja quando o GRID ainda está em branco):
  dtsConsultarKit.DataSet.Close;
  dtsConsultarKit.DataSet.Open;
  dtsConsultarDetalheKit.DataSet.Close;
  dtsConsultarDetalheKit.DataSet.Open;

  dtsConsultarKit.DataSet.Close;
  dtsConsultarKit.DataSet.Open;
  dtsConsultarDetalheKit.DataSet.Close;
  dtsConsultarDetalheKit.DataSet.Open;


O meu código do botão salvar todo:
procedure TF_FormKit.btnSalvarClick(Sender: TObject);
begin
//INSERÇÃO-----------------
  TClientDataSet(dtsCadastrarKit.DataSet).Last; //PEGA O ULTIMO ID

  cds_Itens.First; //PRIMEIRO ITEM DO GRID

  while not cds_Itens.Eof do//ENQUANTO LÊ ATÉ O FINAL DO ARQUIVO VÁ INSERINDO O DETALHE KIT
  begin
    TClientDataSet(dtsCadastrarDetalheKit.DataSet).Append;//INSERIR NA ULTIMA POSIÇÃO

    with TClientDataSet(dtsConsultarALLProduto.DataSet) do//FAZ A BUSCA DO ID PARA NUNCA GRAVAR O MESMO ID
    begin
      Close;
      CommandText:= 'select * from producto where ID_PRODUCTO = ' + dtsItens.DataSet.FieldByName('id_producto').AsString;
      Open;
    end;

    //INSERINDO NO DETALHE KIT
    dtsCadastrarDetalheKit.DataSet.FieldByName('ID_PRODUCTO').AsInteger := dtsConsultarALLProduto.DataSet.FieldByName('ID_PRODUCTO').AsInteger;
    dtsCadastrarDetalheKit.DataSet.FieldByName('ID_KIT').AsInteger := dtsCadastrarKit.DataSet.FieldByName('ID_KIT').AsInteger;
    dtsCadastrarDetalheKit.DataSet.FieldByName('CANTIDAD').AsFloat := dtsItens.DataSet.FieldByName('QUANTIDADE').AsFloat;
    dtsCadastrarDetalheKit.DataSet.FieldByName('PRECIO_COSTO').AsFloat := dtsItens.DataSet.FieldByName('PRECO_COSTO').AsFloat;
    dtsCadastrarDetalheKit.DataSet.FieldByName('PRECIO_MEDIO').AsFloat := dtsItens.DataSet.FieldByName('PRECO_MEDIO').AsFloat;
    dtsCadastrarDetalheKit.DataSet.FieldByName('PRECIO_VENTA').AsFloat := dtsItens.DataSet.FieldByName('PRECO_VENTA').AsFloat;
    TClientDataSet(dtsCadastrarDetalheKit.DataSet).ApplyUpdates(0);

    cds_Itens.Next;//PROXIMO ITEM DO GRID
  end;

  //EDITA O CAMPO INSERIDO ANTERIORMENTE NA TABELA KIT PARA PREENCHER O RESTO DE SEUS CAMPOS
  TClientDataSet(dtsCadastrarKit.DataSet).Edit;
  dtsCadastrarKit.DataSet.FieldByName('NOMBRE').AsString := edtNomeKit.Text;
  edtTotalValorKit.Text := FormatFloat('#####.000', StrToFloat(edtTotalValorKit.Text)/100);
  dtsCadastrarKit.DataSet.FieldByName('VALOR_TOTAL').AsFloat := StrToFloat(edtTotalValorKit.Text);
  dtsCadastrarKit.DataSet.FieldByName('ID_FUNCIONARIO').AsInteger := dtsConsultarFuncionario.DataSet.FieldByName('ID_FUNCIONARIO').AsInteger;
  TClientDataSet(dtsCadastrarKit.DataSet).ApplyUpdates(0);

  dtsConsultarKit.DataSet.Close;
  dtsConsultarKit.DataSet.Open;
  dtsConsultarDetalheKit.DataSet.Close;
  dtsConsultarDetalheKit.DataSet.Open;

  //UTILITÁRIOS
  ShowMessage('Operação realizada com sucesso!');
  pcKit.ActivePage := tabConsulta;

  dtsConsultarDetalheKit.DataSet.Close;
  dtsConsultarDetalheKit.DataSet.Open;
  dtsConsultarKit.DataSet.Close;
  dtsConsultarKit.DataSet.Open;

  leitura('L');
  TabVisivel(true, false);;
  edtProcurar.SetFocus;

  limpar;
end; 


Eu já tentei de tudo mais não sei porque isso não funciona, pois com os outros formulários no qual existe somente um GRID e não é utilizado o MASTER/DETAIL funciona normalmente desse modo como eu mostrei. E o pior é que eu não sei porque SEMPRE não atualiza quando eu coloco o PRIMEIRO dado no banco de dados mesmo repetindo duas vezes a mesma coisa como eu mostrei anteriormente.

Alguem poderia me ajudar? Eu não sei se ficou um pouco confuso se precisar eu tento ver um modo melhor para explicar o que está acontecendo.

Desde já agradecido!
Edson Vilhalba

Edson Vilhalba

Responder

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

Aceitar