Problema com atualizacoes em cache

27/12/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[color=darkred:cee767225f] única [/color:cee767225f]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 ;

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


O Que esta ocorrendo é que nas situaçoes onde realizo[color=darkred:cee767225f] uma pequena alteração[/color:cee767225f] na base de dados via dbGrid a propriedade [b:cee767225f]Query1.UpdatesPending [/b:cee767225f]se mantem em[b:cee767225f] False [/b:cee767225f]o que impossibilita a [b:cee767225f]conclussão da Transição[/b:cee767225f] .. Pois os métodos
FormMovimentoCheques.query1.ApplyUpdates;
  FormMovimentoCheques.query1.CommitUpdates;

[color=darkred:cee767225f]Não são executados[/color:cee767225f]:cry: :cry: :cry:

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

Vou tentar explicar com as figuras abaixo :

[b:cee767225f]Na primeira figura é o estad do Banco Inicial[/b:cee767225f]

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

[b:cee767225f]Inicio uma alteração no primeiro Registro . Note que o Botão Refresh Esta Habilitado[/b:cee767225f]

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

[b:cee767225f]Na terceira e ultima etapa clico no Botao Refresh.. É neste botao que esta o Código [/b:cee767225f]

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


[b:cee767225f]Na quarta e ultima etapa os Dados Não são gravados como se pode ver na figura abaixo[/b:cee767225f]

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

[b:cee767225f]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[/b:cee767225f]

Muito Obrigado...


Marco Salles

Respostas

27/12/2005

Thomaz_prg

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.


Responder Citar

28/12/2005

Marco Salles

[b:1fc8438476]obrigado pela sua participaçao . [/b:1fc8438476]

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 :
if datasource1.state in [DsEdit&93; 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 :cry: :cry: :cry:


Responder Citar

28/12/2005

Thomaz_prg

Então funcionou blz?


Responder Citar

29/12/2005

Marco Salles

thomaz_prg
Então funcionou blz?


como eu tinha dito anteriormente :

Marco salles
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
Não uso BDE mas, se existe a necessidade de uma movimentação no ponteiro,


Marco salles
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..


Responder Citar