Usar ApplyUpdates ou Post resolve?

Delphi

17/02/2006

Galera me tire uma dúvida...

Uso base em Interbase com componentes nativos (IBDataSet), e para salvar os dados sempre faço assim:
IbDataSet.Post;
IbDataSet.ApplyUpdates;

mais quando uso somente a funcção Post do IBDataSet as vezes funciona normalmente, as vezes não, já usando o applyUpdates depois do Post fica tudo na paz...

me corrijam se estiver errado mais o applyupdates não seria necessário apenas quando a propriedade CacheUpdates do IbDataSet estivesse True, então pq as vezes quando uso somente o Post não salva as alterações quando uso o sistema em rede?


Paullsoftware

Paullsoftware

Curtidas 0

Respostas

Eniorm

Eniorm

17/02/2006

Post resolve, caso a propriedade CachedUpdates da query esteja como False...

caso essa propriedade esteja como true, apos o Post, os dados são gravados no cache, em memória.... e após o ApplyUpdates e Commit que realmente os dados são gravados no banco...

é algo semelhante ao conceito do DBX (caso eu esteja errado me corrijam).....

particularmente eu uso assim

deixo como true, e no evento AfterPost da query (ou IBDataset, no meu caso) eu dou o ApplyUpdates seguido do CommitRetaining

abraço...


GOSTEI 0
Lindomar.des

Lindomar.des

17/02/2006

Uso o post e nos eventos de afterpost, afterdelete e aftercancel dos IBDataset´s uso o seguinte codigo:

afterpost,afterdelete:

IBTransaction1.CommitRetaining;

aftercancel:

IBTransaction1.RollbackRetaining;

Para isso criei 2 procedures Generic_AfterPost_Delete e Generic_AfterCancel. E ligo os eventos respectivos dos IBDataset´s.

Toda vez que o usuario salva,deleta e/ou cancela, o sistema já grava as alterações. Com isso tb impossibilita ao usuario a opção de desfazer alguma alteração feita por engano. Mas isso é uma faca de dois gumes.
ex: 01
o usuario está digitando uma NF com uns 30/40 itens. Quando está quase terminando a digitação alguma coisa acontece e desliga o computador...resultado: digitação perdida...e o usuário puto da vida.

ex: 02
o usuario exclui um determinado registro (quando não há integridade referencial para impermitir). Se ele excluiu por engano não há como desfazer...resultado: usuario puto da vida.

Levando em consideração o primeiro exemplo, optei por commitar todos os post´s. Quanto ao segundo exemplo o usuario precisa estar atento ao trabalho e suas ações.


GOSTEI 0
Edilcimar

Edilcimar

17/02/2006

Seguindo o exemplo do lindomar, optei por criar uma tabela temporária para as nf, e quando o usuário terminar de digitar, aí sim eu finalizo o processo, então ele pode excluir, incluir, etc... Como a opreção é efetuada no final, se der tudo certo eu dou commit, caso contrário dou rollback e não limpo a tabela temporária


GOSTEI 0
POSTAR