Problema com atualizacoes em cache
27/12/2005
0
É 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
Posts
27/12/2005
Thomaz_prg
var p:pointer;
p := Query1.GetBookmark;
query1.next;
Query1.GotoBookMark(p);
Parece meio Quebra-Galhos, mas deve funcionar.
28/12/2005
Marco Salles
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] 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:
29/12/2005
Marco Salles
como eu tinha dito anteriormente :
Marco salles
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
Marco salles
Se esta informaçõa estiver correta , Eu dou por encerrado o assunto.
muito obrigado..
Clique aqui para fazer login e interagir na Comunidade :)