ClientDataSet não atualiza - DbExpress

Delphi

06/10/2009

Olá,
Galera to com uma problemao aqui. Meu ClientDataSet só atualiza, depois q fecho o sistema. No AfterPost, coloquei:
procedure TDataModule1.ClientDataSet1AfterPost(DataSet: TDataSet);
begin
    (DataSet as TClientDataSet).ApplyUpdates(0);
    (DataSet as TClientDataSet).refresh;
    (DataSet as TClientDataSet).Close;
    (DataSet as TClientDataSet).open;
    Application.MessageBox(´Registro gravado com sucesso!´,´Atenção´, MB_OK + MB_ICONINFORMATION);
end;

Uso DbExpress + MySQL 5 + Delphi 2009 + CDS + DataSetProvider + SimpleDataSet + SQLTable (ufa!!!). A ligação tá certa (acho...)
Se alguem puder ajudar. Agradeço.

Att
Dalton


Dbergkamps10

Dbergkamps10

Curtidas 0

Respostas

Dogu

Dogu

06/10/2009

Verdade! Como é que posso atualizar os dados corretamente quando tenho uns 10 computadores na rede local usando o mesmo banco de dados?

Se um deles altera os dados e estes dados não estão no banco ou somente na memoria ram local isso vira uma bagunça não acha?


GOSTEI 0
Dogu

Dogu

06/10/2009

A propertie keepConection do seu SQLConnection pode ser alterada para false. Isso fará com que toda vez que for necessário alterar o banco (Insert, Update, Delete) o banco será realmente alterado. Parece que é algo como o que você fez (Close-Open).

Porém, isso tbm aumenta o tráfego e consumo de banda da sua rede, principalmente se houver constantes alterações nos dados.


GOSTEI 0
Junior Miranda

Junior Miranda

06/10/2009

Olá,
Galera to com uma problemao aqui. Meu ClientDataSet só atualiza, depois q fecho o sistema. No AfterPost, coloquei:
Código:

procedure TDataModule1.ClientDataSet1AfterPost(DataSet: TDataSet);
begin
(DataSet as TClientDataSet).ApplyUpdates(0);
(DataSet as TClientDataSet).refresh;
(DataSet as TClientDataSet).Close;
(DataSet as TClientDataSet).open;
Application.MessageBox(´Registro gravado com sucesso!´,´Atenção´, MB_OK + MB_ICONINFORMATION);
end;

Uso DbExpress + MySQL 5 + Delphi 2009 + CDS + DataSetProvider + SimpleDataSet + SQLTable (ufa!!!). A ligação tá certa (acho...)
Se alguem puder ajudar. Agradeço.


Faça um teste...
Coloque os componentes de acesso a dados direto no formulário e chame o applyupdate/refresh direto pelo formulário. Funcionando, veja por exemplo como o datamodule está sendo instanciado(veja se não está no autocreate e vc tb o instancia manualmente). Pela descrição, me parece com problema de objeto em memória.


Verdade! Como é que posso atualizar os dados corretamente quando tenho uns 10 computadores na rede local usando o mesmo banco de dados?

Se um deles altera os dados e estes dados não estão no banco ou somente na memoria ram local isso vira uma bagunça não acha?


a reposta para isto é... Transação.

Aproveitando... Alguém saberia dizer o porque que as tags de formatação do forum não estão funcionando no IE8 e Chrome 4.0.220.1?? ou é só comigo?
[]´s


GOSTEI 0
Steve_narancic

Steve_narancic

06/10/2009

A propertie keepConection do seu SQLConnection pode ser alterada para false. Isso fará com que toda vez que for necessário alterar o banco (Insert, Update, Delete) o banco será realmente alterado. Parece que é algo como o que você fez (Close-Open). Porém, isso tbm aumenta o tráfego e consumo de banda da sua rede, principalmente se houver constantes alterações nos dados.


Na verdade a propriedade KeepConection (ManterConectado) do SQLConnection serve para manter o sqlconnection conectado com o banco de dados, ou seja se ela estiver como false o SQLConnection vai fechar a conexão com o banco de dados após cada requisição, e vai reabrir automaticamente antes de cada requisição;


tipo ao dar um insert no dataset o que o dbexpress vai fazer:
- Abrir conexão com o banco de dados
- Fazer o Insert
- Fechar novamente a conexão com o banco de dados


e se a propriedade keepconnection estiver como true, ele não fecha a conexão, fazendo o INSERT direto sem precisar conectar com o banco...

tem que se tomar cuidado com essa propriedade pois pode haver perda de performance em determinadas situações....


GOSTEI 0
Steve_narancic

Steve_narancic

06/10/2009

A propertie keepConection do seu SQLConnection pode ser alterada para false. Isso fará com que toda vez que for necessário alterar o banco (Insert, Update, Delete) o banco será realmente alterado. Parece que é algo como o que você fez (Close-Open). Porém, isso tbm aumenta o tráfego e consumo de banda da sua rede, principalmente se houver constantes alterações nos dados.


Na verdade a propriedade KeepConection (ManterConectado) do SQLConnection serve para manter o sqlconnection conectado com o banco de dados, ou seja se ela estiver como false o SQLConnection vai fechar a conexão com o banco de dados após cada requisição, e vai reabrir automaticamente antes de cada requisição;


tipo ao dar um insert no dataset o que o dbexpress vai fazer:
- Abrir conexão com o banco de dados
- Fazer o Insert
- Fechar novamente a conexão com o banco de dados


e se a propriedade keepconnection estiver como true, ele não fecha a conexão, fazendo o INSERT direto sem precisar conectar com o banco...

tem que se tomar cuidado com essa propriedade pois pode haver perda de performance em determinadas situações....


GOSTEI 0
POSTAR