Data Source na Atualiza na Execução do Programa

Delphi

24/09/2010

Pessoal estou com o seguinte
problema, em minha aplicação uso o ADOConnection, o ADODataSet, o Data Set
Provider, e o Client Data Set, e nas minhas tabelas nos códigos das Chaves
Primarias tenho auto incremento, o programa esta salvando normalmente no banco,
mas não consigo visualizar o que salvei, tenho que fechar a aplicação e
executar novamente para poder ver o registro adicionado. Tenho um formulário de
cliente e um de pesquisa de cliente que esta ligado com o de cliente, salvo um
novo cliente, clico em pesquisar no formulário de pesquisa esse registro não
esta la, reinicio a aplicação vou em pesquisar e ta la o registro, acredito que
o DataSource não esta atualizando em tempo de execução, já tentei de tudo
DataSource1.DataSet.Open e DataSource1.DataSet.Close em vários lugares no Form
de Cliente e Pesquisa mas não consigo resolver o problema se alguém poder
ajudar.Obrigado.
 
Bruno Vba

Bruno Vba

Curtidas 0

Respostas

Rafael Ribeiro

Rafael Ribeiro

24/09/2010

Amigo, bom dia!
      Na propriedade options do provider tem uma opção de auto-refresh. Vc já tentou a habilitar ?

Abraços, Rafael
GOSTEI 0
Wilson Junior

Wilson Junior

24/09/2010

Tente colocar DataSource1.DataSet.Refresh

Espero ter colaborado.
GOSTEI 0
Bruno Vba

Bruno Vba

24/09/2010

Rafael na opção do provider fiz conforme você disse não resolveu o problema, Wilson fiz o que disse mas não deu certo e da um erro utilizando o Refresh:
Erro: Must apply updates before refreshing data
Pessoal se isso ajudar aqui meu codigo do salvar:
procedure TFrmModelo.BtnSalvarClick(Sender: TObject);  var   Errors : integer;begin  if Verifica_Campos_Em_Branco then    begin      DataSource1.DataSet.Post;      Errors:=(DataSource1.DataSet as TClientDataset).ApplyUpdates(0);      if Errors > 0 then         DataSource1.DataSet.Edit;          DataSource1.DataSet.Close;    end
  else    abort; end;
GOSTEI 0
Marco Salles

Marco Salles

24/09/2010

Rafael na opção do provider fiz conforme você disse não resolveu o problema, Wilson fiz o que disse mas não deu certo e da um erro utilizando o Refresh:
Erro: Must apply updates before refreshing data
Pessoal se isso ajudar aqui meu codigo do salvar:
procedure TFrmModelo.BtnSalvarClick(Sender: TObject);
  var   Errors : integer;
begin
  if Verifica_Campos_Em_Branco then
    begin
      DataSource1.DataSet.Post;
      Errors:=(DataSource1.DataSet as TClientDataset).ApplyUpdates(0);
      if Errors > 0 then
         DataSource1.DataSet.Edit;
          DataSource1.DataSet.Close;
    end


  else
     DataSource1.DataSet.Refresh; // coloque aqui
   
  //  abort;  porque abortar ??? Abort gera uma exceção silenciosa 
// da mesma forma que o Raise exception.Create , porém silenciosa
//se quiser sair do fluxo use o exit
 
end;
..   e mais , porque o uso de RTTI ??? (DataSource1.DataSet as TClientDataset).ApplyUpdates(0);   TClientDataset(DataSouce1.DataSet).ApplyUpdates(0); é muito mais rápido   No fimk tenho duvidas se é   DataSource1.DataSet.Refresh ou   TClientDataset(DataSouce1.DataSet).Refresh , não sei como esta definido o Refresh na Classe DataSet ???          
GOSTEI 0
Rafael Ribeiro

Rafael Ribeiro

24/09/2010

No evento afterpost e afterupdate dos seus clientdataset que não sejam detalhes coloque:


TclientDataSet(Dataset).applyupdates(0);



e deixe o auto refresh do provider.

Rafael
GOSTEI 0
Rafael Ribeiro

Rafael Ribeiro

24/09/2010

Desculpe... é no afterpost e no afterdelete.

Abraços
GOSTEI 0
Marco Salles

Marco Salles

24/09/2010

No evento afterpost e afterupdate dos seus clientdataset que não sejam detalhes coloque:


TclientDataSet(Dataset).applyupdates(0);



e deixe o auto refresh do provider.

Rafael
se for colocar o ApplayUpdates neste evento tem que colocar o Refresh ai Tb   Tipo isto    if TClientDataSet(DataSet).ApplyUpdates(0) <> 0 then
    raise Exception.Create('Erro ao gravar no banco de dados')
  else
    TClientDataSet(DataSet).Refresh;    
GOSTEI 0
Bruno Vba

Bruno Vba

24/09/2010

Pessoal,
Muito Obrigado Pela ajuda, deu certo aqui, to programando em camadas resolvi o
problema, na camada do servidor meu ADODataSet de cliente estava ativo,
desativei ele, agora esta atualizando em tempo de execução, Valeu Pessoal.
GOSTEI 0
POSTAR