duvida com Refresh em Clientdataset

Delphi

09/02/2012

olá pessoal,
tenho um banco de dados feito em firebird e uso os seguites componentes para manipular
SQLTable1, DataSetProvider1, ClientDataSet1, DataSource1.

Estou gravando da seguite forma
ClientDataSet1.ApplyUpdates(-1);
ClientDataSet1.Refresh;


O problema é que quando mando salvar, a tabela vai para o primeiro registro e eu preciso que permaneça no mesmo registro. Eu preciso usar o refresh para poder gerar o ID automatico (pela trigger).
Tentei usar um Locate, mas a unica referencia seria o ID mas ele so é criado depois do Refresh.

Alguem tem alguma sugestão?
Valdenir Matos

Valdenir Matos

Curtidas 0

Respostas

Marco Salles

Marco Salles

09/02/2012

O Conjunto de instruçoes gerados por voce de modo geral , nçao altera o cursor de dados

Ao inves do Refresh , voce fizer um clientdataset.close seguido de um clientdataset.open

ai sim voce alteraria o cursor para o primeiro registro . Então se esta alterando deve
ser aluguma coisa a mais que voce tem no código e não o Refresh ...

Para ver que o Refresh não movimenta o cursor faça um teste simplescom a tabela COUNTRY
do firebird ... ( Formulario sem código nenhum ) adicione um regustro e aplica seguido de
REfresh o Cursor fica parado . Faça o mesmo exemplo utilizando o OPne close e verá que
o Cursor vai para o Primeirp Registro

De qualquer modo pesquisevor variáveis Opacas ( Bookmark ) em algumas das vezes ela é
usada para manter a posição do cursor . Porpem reitero que deve ser algo pertinente ao seu
código ( eventos ) que alteram a posição do cursor e não o Refresh em si

GOSTEI 0
Valdenir Matos

Valdenir Matos

09/02/2012

eu estou usando apenas o refresh mesmo, eu achei estranho porque no access não é assim, mas
fiz uma rotina que deu certo.
antes do refresh verifica se o ID tem valor, se tiver então é uma alteração e posso usar o locate se não é uma inserção e uso o last.
funcionou certinho, mas se alguem tem alguma dica melhor eu agradeço.
GOSTEI 0
Marco Salles

Marco Salles

09/02/2012

vou continuar teimando ...

Voce diz :

tenho um banco de dados feito em firebird e uso os seguites componentes para manipular
SQLTable1, DataSetProvider1, ClientDataSet1, DataSource1.

Estou gravando da seguite forma
#Código
ClientDataSet1.ApplyUpdates(-1);
ClientDataSet1.Refresh;

E eu te dei um exemplo com a Tabela Country do Banco EMPLOYEE do Firebird

Faça o teste e veja que o Refresh não Modifica , a não ser que ************

Voce esteja Trabalhando com MESTRE/DETALHE

e este o caso ?????
GOSTEI 0
William

William

09/02/2012

Colega Marcos também tenho esse mesmo problema com o refresh usando o Firebird, inclusive um dos meus cliente relatou que as vezes o cursor move para ao 1º registro e em outras não, realizei testes em casa com um programinha bem parecido com o seu bem simples, e constatei a mesmo coisa ele move para o 1ºregistro.
GOSTEI 0
William

William

09/02/2012

Colega Marcos também tenho esse mesmo problema com o refresh usando o Firebird, inclusive um dos meus cliente relatou que as vezes o cursor move para ao 1º registro e em outras não, realizei testes em casa com um programinha bem parecido com o seu bem simples, e constatei a mesmo coisa ele move para o 1ºregistro. Na realidade usando o ApplyUpdates junto com Refresh ele nem atualiza o DBGrid tenho q madar atualizar novamente para que o registro novo apareça,à não ser que antes do ApplyUpdates e dê um Post, mais não atualiza a ID q vem do banco.
GOSTEI 0
Marco Salles

Marco Salles

09/02/2012

Colega Marcos também tenho esse mesmo problema com o refresh usando o Firebird, inclusive um dos meus cliente relatou que as vezes o cursor move para ao 1º registro e em outras não, realizei testes em casa com um programinha bem parecido com o seu bem simples, e constatei a mesmo coisa ele move para o 1ºregistro. Na realidade usando o ApplyUpdates junto com Refresh ele nem atualiza o DBGrid tenho q madar atualizar novamente para que o registro novo apareça,à não ser que antes do ApplyUpdates e dê um Post, mais não atualiza a ID q vem do banco.


Voce poderia por gentileza , montar um pequeno exemplo onde ocorre esta imperfeição , e me enviar por emai
(Sem o .Exe) para que possamos achar uma solução

salhamoda@uol.com.br
marco@salhamoda.com.br
GOSTEI 0
Daniel Santos

Daniel Santos

09/02/2012

Não resolva esse problema com refresh, use o comando bookmark!
GOSTEI 0
Marco Salles

Marco Salles

09/02/2012

Não resolva esse problema com refresh, use o comando bookmark!


então Daniel , eu ja tinha comentado sobre isto no inicio de minha postagens

De qualquer modo pesquisevor variáveis Opacas ( Bookmark ) em algumas das vezes ela é
usada para manter a posição do cursor . Porpem reitero que deve ser algo pertinente ao seu
código ( eventos ) que alteram a posição do cursor e não o Refresh em si


Mas ainda acho estranho o refresh mudar o cursor ( salvo em Mestre/Detalhe)
GOSTEI 0
Elton Souza

Elton Souza

09/02/2012

Já tem um tempinho o post, mas caso alguém mais precise...
É exatamente o que o Marco falou, o Refresh não tira o ponteiro o problema é quando se usa (Ex: Order by na query) e MESTRE DETALHE.

GOSTEI 0
POSTAR