duvida com Refresh em Clientdataset
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
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?
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
Curtidas 0
Respostas
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
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
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.
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
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 ?????
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
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
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
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
09/02/2012
Não resolva esse problema com refresh, use o comando bookmark!
GOSTEI 0
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
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.
É 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