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:
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):
O meu código do botão salvar todo:
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!
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
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)