Data Source na Atualiza na Execução do Programa
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.
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
Curtidas 0
Respostas
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
Na propriedade options do provider tem uma opção de auto-refresh. Vc já tentou a habilitar ?
Abraços, Rafael
GOSTEI 0
Wilson Junior
24/09/2010
Tente colocar DataSource1.DataSet.Refresh
Espero ter colaborado.
Espero ter colaborado.
GOSTEI 0
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:
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
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:
..
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 ???
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;
GOSTEI 0
Rafael Ribeiro
24/09/2010
No evento afterpost e afterupdate dos seus clientdataset que não sejam detalhes coloque:
e deixe o auto refresh do provider.
Rafael
TclientDataSet(Dataset).applyupdates(0);
e deixe o auto refresh do provider.
Rafael
GOSTEI 0
Rafael Ribeiro
24/09/2010
Desculpe... é no afterpost e no afterdelete.
Abraços
Abraços
GOSTEI 0
Marco Salles
24/09/2010
No evento afterpost e afterupdate dos seus clientdataset que não sejam detalhes coloque:
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 thenTclientDataSet(Dataset).applyupdates(0);
e deixe o auto refresh do provider.
Rafael
raise Exception.Create('Erro ao gravar no banco de dados')
else
TClientDataSet(DataSet).Refresh;
GOSTEI 0
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.
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