Array
(
)

Problema com atualizacoes em cache

Marco Salles
   - 27 dez 2005

tenho um programa que resolvi dar uma incrementada nele...

É grande e é trabalhoso ... Mas na indas e vindas me apareceu um problema que esta me tirando do serio..

Tenho uma Query associada a um UpdateSQL1 , um dbgrid e um DataSouce

Na grid faço as alteraçoes nos campos

O Grande problema é quando faço uma única alteração na Grid e Logo após preciso Executar os métodos query1.ApplyUpdates e query1.CommitUpdates;

antes de executar esses método eu testo se existe uma Transação pendende.. Para isso eu uso o if Query1.UpdatesPending then

O Código então fica assim ;

#Código

if Query1.UpdatesPending then
begin
FormMovimentoCheques.query1.ApplyUpdates;
FormMovimentoCheques.query1.CommitUpdates;
end;


O Que esta ocorrendo é que nas situaçoes onde realizo uma pequena alteração na base de dados via dbGrid a propriedade Query1.UpdatesPending se mantem em False o que impossibilita a conclussão da Transição .. Pois os métodos
#Código
FormMovimentoCheques.query1.ApplyUpdates;
FormMovimentoCheques.query1.CommitUpdates;

Não são executados

:arrow:
Por outro lado se apos esta pequena modificaçao na Base de Dados eu usar a barra de rolagem , isto ja é suficiente para que a propriedade
Query1.UpdatesPending se transforme em True..
e com isto eu finalizo a transação

Vou tentar explicar com as figuras abaixo :

Na primeira figura é o estad do Banco Inicial

[URL=http://imageshack.us][img:cee767225f]http://img445.imageshack.us/img445/4887/imagemtransacao11my.jpg[/img:cee767225f][/URL]

Inicio uma alteração no primeiro Registro . Note que o Botão Refresh Esta Habilitado

[URL=http://imageshack.us][img:cee767225f]http://img445.imageshack.us/img445/5599/imagemtransacao22gl.jpg[/img:cee767225f][/URL]

Na terceira e ultima etapa clico no Botao Refresh.. É neste botao que esta o Código

#Código
if Query1.UpdatesPending then
begin
FormMovimentoCheques.query1.ApplyUpdates;
FormMovimentoCheques.query1.CommitUpdates;
end;


Na quarta e ultima etapa os Dados Não são gravados como se pode ver na figura abaixo

[URL=http://imageshack.us][img:cee767225f]http://img445.imageshack.us/img445/5599/imagemtransacao22gl.jpg[/img:cee767225f][/URL]

O Problema é que mesmo que o campo Observaçoes foi modificado a propriedade Query1.UpdatesPending não alterou seu estado... Como alterar esta Propriedade , alterando simplesmente alguns dados na Base de Dados

Muito Obrigado...


Thomaz_prg
   - 27 dez 2005

Não uso BDE mas, se existe a necessidade de uma movimentação no ponteiro, tente gravar a posição atual e retorná-la. Por exemplo, antes do seu código (de gravação) tente colocar:

var p:pointer;

p := Query1.GetBookmark;

query1.next;

Query1.GotoBookMark(p);

Parece meio Quebra-Galhos, mas deve funcionar.


Marco Salles
   - 28 dez 2005

obrigado pela sua participaçao .

Bem o fato curioso é o seguinte .. Este problema apareceu do nada . Anteriormente pelo que me costa eu conseguia gravar nas situaçoes onde não havia , digamos assim este ´deslocamento do Ponteiro´

a verdade é que antes mesmo de enviar esta mensagem eu ja tinha observado da necessidade desde deslocamento.. Mas não tinha certeza , se era so o deslocamento ou alguma propriedade da query no objecto inspector, que talves tivesse alterado meio sem querer ...

tinha feiro assim :
#Código

if datasource1.state in [DsEdit] then
query1.post


Mas o que voce me passou não foi apenas um código , foi o conteudo de que nas atualizaçoes com cache usando BDE , é necessário ter o deslocamento do ponteiro.. Isto não esta escrito na biografia que estava lendo sobre o assunto


Thomaz_prg
   - 28 dez 2005

Então funcionou blz?


Marco Salles
   - 29 dez 2005

thomaz_prg

Citação:
Então funcionou blz?


como eu tinha dito anteriormente :

Marco salles

Citação:
tinha feiro assim :
Código:
if datasource1.state in [DsEdit] then
query1.post


Eu ja tinha resolvodo o Problema em questão .. Somente estava em dúvida se era alguma configuração da query que eu porventura tivesse sida alterada , ou algo inetrente aos meus conhecimentos

Não apresentei a solução , porque muitas das vezes ninguem responde

So que voce colocou algo de novo :

thomaz_prg

Citação:
Não uso BDE mas, se existe a necessidade de uma movimentação no ponteiro,


Marco salles

Citação:
Isto não esta escrito na biografia que estava lendo sobre o assunto


Se esta informaçõa estiver correta , Eu dou por encerrado o assunto.

muito obrigado..