Fórum Msg de erro na tabela temporária #393909

18/01/2011

0

Boa noite Em uma grid os os registros estão em ClientDataset (Tabela temporária), para determinados campos fiz um LOOKUP, para exibir a descrição do pagamento... Quando vou alterar o registro para informar o pagto por exemplo aparece um panel azul, como exemplo da imagem abaixo                      informo pagamento em dblookupcombobox... Pressiono OK e no evento onclick do botão, coloquei um REFRESH para fazer atualização, tipo: Cds.refresh, então aparece a seguinte msg de erro: Estou usando o Delphi 10 + DBX + Firebird 2.1    
Rogerio Santos

Rogerio Santos

Responder

Posts

19/01/2011

Leonardo Xavier

O refresh esta antes ou depois do post?
Responder

Gostei + 0

19/01/2011

Wellington

Você esta tentando dá o reflesh com o ClientDataSet ainda em status  insert/edit.
Tente usar:

procedure TForm1.cdsAfterApplyUpdates(Sender: TObject;
  var OwnerData: OleVariant);
begin
  cds.Refresh;
end;


ou caso não funcione tenta:
procedure TForm1.btnOKClick(Sender: TObject);
begin
  cds.Post;
  cds.Refresh;
end;


Responder

Gostei + 0

19/01/2011

Marco Salles

um pouco de mershandising http://marcosalles.wordpress.com/2010/04/09/must-apply-updates-before-refreshing-data-refresh-clientdataset/      
Responder

Gostei + 0

24/01/2011

Rogerio Santos

Olá amigo   As suas dicas não deram certo... O que eu consegui fazer para não mostrar a msg de erro foi assim: CDS.NEXT....   Coloquei no evento onclick do botão.. Ele simplesmente vai para o próximo registro e atualiza a grid mostrando os dados... Não sei se é o certo em fazer... mas pelo meno funciona certinho, sem erro. Se caso tiver outra dica favor mandar para eu testar.     Obrigado pela atenção     Rogério    
Responder

Gostei + 0

24/01/2011

Marco Salles

Rogerio tudo bem Não é dica minha . É teoria  . Para .  realizar um REFRESH no ClientDataSet, é necesário que não exista nenhuma atualização pendente em CACHE.    Vc diz:  
Coloquei no evento onclick do botão.. Ele simplesmente vai para o próximo registro e atualiza a grid mostrando os dados... Não sei se é o certo em fazer... mas pelo meno funciona certinho, sem erro. Se caso tiver outra dica favor mandar para eu testar.
    eu que lhe peço o exemplo para que possa simular o que esta acontecendo para tentar entender e chegar no Denominador Comum com Vc   Se puder disponibilizar o exemplo para que possamos trocar experiencia ficarei grato        
Responder

Gostei + 0

25/01/2011

Rogerio Santos

Olá   Mas como vc quer o exemplo ???? Disponibilizar o código fonte ??? Como assim...   Rogério      
Responder

Gostei + 0

25/01/2011

Rogerio Santos

Olá   Mas como vc quer o exemplo ???? Disponibilizar o código fonte ??? Como assim...   Rogério      
Responder

Gostei + 0

25/01/2011

Marco Salles

Podeira simular este erro com as tabelas em um aplicativo simples , ou de outra forma sei lá O que eu sei é o seguinte   Qnd vc modifica (Post) uma tabela em memoria o Arquivo Xml Gerado é modificado vai acumulando em forma de Delta   Se vc dar o Refresh vc terá este erro ( reportado por vc )   Se vc tiver utilizando um Sistema SGDB , ap dar o ApplayUpdates do Cds , imediatamente este Xml é Limpo ( pq atraves dele que se trafega os dados para serem Resolvidos pelo dataSetProvider) e apos vc pode dar um Refresh   Porém se vc esta usando o MyBase e não tem esta opção de ApplayUpdates , vc tema aopção de chamar o método MergeChangeLog que zera o Delta e logo apos vc consegue dar um Refresh   bem a teoria é esta , mas por alguma razão vc disse que não deu certo . Eu gostaria de siguir os seus passos para confirma ou não se esta errada a teoria . So isso    
Responder

Gostei + 0

08/02/2011

Rogerio Santos

Amigo.. Desculpe em responder, mas ainda não consegui fazer a não ser usando o comando Cds.next...     Rogério
Responder

Gostei + 0

08/02/2011

Marco Salles

Citação Errada
Porém se vc esta usando o MyBase e não tem esta opção de ApplayUpdates , vc tema aopção de chamar o método MergeChangeLog que zera o Delta e logo apos vc consegue dar um Refresh
  desculpe ...Com o MergeChangeLog vc zera o Delta mas no caso de usar o MyBase não consegue dar o refresh da o erro que ele reclama do DataSetProvider.       Visto este deslize vamos entender e concatenar as idéias   O que seria um Refresh ???   A principio uma Atualização dos dados   Vc pode tb atualizar os dados fazendo close seguido de Open   qual a diferença entre Refresh e Close seguido de Open ???   basicamente tres diferenças a)qnd vc usa refresh o cursor fica parado no mesmo registro onde vc estava antes do Refresh .. O mesmo não se pode dizer ao dar umClose seguido de open .. O Cursor é delocado para o Primeiro Registro   b)Alguns eventos , como por exemplo beforeopen, afteropen, beforeclose, beforescroll  que normalmente q  sao chamamados na abertura e fechamento , não são disparador qnd se usa o refresh.. É claro que o beforescroll  não será disparado pq não há deslocamento do ponteiro   c)No caso de parãmetros , qnd se usa o Refresh não existe ha necessidade de passa-lo , pois trabalha com parametros  ele simplesmente reabre a consulta exatamente com o mesmo Select que estva uzando antes do Refresh   Vamos chegar lá ....... Não faz muito sentido da um Refresh No MyBase ... Os dados estão na Memória do Computador, então atualizar o que ????   Agora perceba o que vc esta fazendo.. Eu não sei aonde e nen em quem vc esta dando o Next , mas basicamente é isto que esta acontecendo   O Next irá deslocar o ponteiro , o que dispara o eventos BeforePost e AfterPost entre outros. com isto se o registro estava no Modo de Edição , ele grava os Dados e sai desse modo   Espero ter te ajudado um pouco a elucidar o que esta ocorrendo . Pelo menos para vc poder explicar melhor o que esta fazendo. Sds   então a operação de refresh não esta disponivel no MyBase ...
Responder

Gostei + 0

16/05/2013

José

Este tópico esta sendo fechado por inatividade. Se necessário, sinalizar para que seja reaberto ou abrir um novo.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar