Duvida com ClientDataSet

23/04/2013

1

Saudações a todos

Pessoal, é o seguinte: Tenho em um TSQLDataSet na aplicação servidora o CommandText: "SELECT * FROM CLIENTES WHERE ID_CLIENTE =:pID_CLIENTE". Na aplicação cliente, tenho um ClientDataSet que acessa este TSQLDataSet passando o valor para parametro pID_CLIENTE (ex. cds.Params.ParamByName('Pid_CLIENTE').AsInteger := 23), depois de aberto o ClientDataSet o usuário faz as alterações desejadas, salva e pesquisa o id 45 por exemplo, depois altera e salva e assim por diante. Para mostrar os dados no ClientDataSet, uso Close e Open. Tudo está funcionando corretamente, porém preciso implementar de jeito que todos os registros que o usuário for pesquisando e alterando fiquem no ClientDataSet para uma posterior impressão. Como faço Close e Open o ClientDataSet fica somente com o último registro pesquisado. Alguém sabe se tem como manter todos os registros?

Desde já, obrigado a todos!
Responder

Posts

23/04/2013

Marcos Morais

no seu ClientDataSet depois do open, use tambem um refresh.

cds.Refresh;

ve se funciona.
Responder
no seu ClientDataSet depois do open, use tambem um refresh.

cds.Refresh;

ve se funciona.



Caro Marcos, acho que isso não funcionaria, pois ao dar o Close, tudo que está no ClientDataSet seria despejado da memória.
Responder

24/04/2013

Junior Miranda

Saudações a todos

Pessoal, é o seguinte: Tenho em um TSQLDataSet na aplicação servidora o CommandText: "SELECT * FROM CLIENTES WHERE ID_CLIENTE =:pID_CLIENTE". Na aplicação cliente, tenho um ClientDataSet que acessa este TSQLDataSet passando o valor para parametro pID_CLIENTE (ex. cds.Params.ParamByName('Pid_CLIENTE').AsInteger := 23), depois de aberto o ClientDataSet o usuário faz as alterações desejadas, salva e pesquisa o id 45 por exemplo, depois altera e salva e assim por diante. Para mostrar os dados no ClientDataSet, uso Close e Open. Tudo está funcionando corretamente, porém preciso implementar de jeito que todos os registros que o usuário for pesquisando e alterando fiquem no ClientDataSet para uma posterior impressão. Como faço Close e Open o ClientDataSet fica somente com o último registro pesquisado. Alguém sabe se tem como manter todos os registros?

Desde já, obrigado a todos!


Ficou estranho! O que você quer fazer de fato? Observe:

1- "preciso implementar de jeito que todos os registros que o usuário for pesquisando e alterando fiquem no ClientDataSet para uma posterior impressão";

2- "Como faço Close e Open o ClientDataSet fica somente com o último registro pesquisado";

3- "Alguém sabe se tem como manter todos os registros?".

[]'s
Responder
Olá.

Esse tipo de implementação no CDS não conheço.

Uma sugestão é criar um arquivo de Log de alterações (pode ser uma tabela).

Onde você salva o usuario e o ID do cadastro salvo/alterado.

Então você cria uma metodo para imprimir esses registros.

Espero que ajude.
Responder
Macário,

sua ideia talvez funcione, mas acho que perderia um pouco de performance devido ter que gravar o log em disco e depois abri-lo novamente para fazer a impressão. Se eu conseguir fazer direto no ClientDataSet torna-se muito rápido, pois os dados para impressão já estarão em memória.
Responder
Macário,

sua ideia talvez funcione, mas acho que perderia um pouco de performance devido ter que gravar o log em disco e depois abri-lo novamente para fazer a impressão. Se eu conseguir fazer direto no ClientDataSet torna-se muito rápido, pois os dados para impressão já estarão em memória.


Se você não precisa persistir os dados, sim você pode usar outro CDS (temporário) para isso.

Mas veja, é interessante você pensar em um modo de contingência. Se por acaso o usuário estiver editando resgistros - O log estará em memoria - e a estação de trabalho ficar indisponivel (falta de energia, travamento, etc). Como proceder com o seu objetivo??

Então de alguma forma, acredito é necessário a persistência dos dados.

Pense nisso.


Responder