Resolvendo a situação...

Depois de algumas boas cabeçadas, acho que encontrei a maneira. Não sei se é a 
mais correta. Gostaria que o pessoal que já tá a mais tempo trabalhando com ADO 
utilizando ADOConnection + ADODataset + DataSetProvider + ClientDataSet + 
DataSource comentasse caso eu escreva algo incorreto.

Depois de bastante pesquisa e testes entendi que o ClientDataSet faz uma 
espécie de cache do dataset no lado cliente. Quando altero a tabela utilizando 
uma query com um comando sql na verdade ela executa diretamente no banco de 
dados, fazendo com que a imagem que está no meu CDS fique desatualizada. Para 
forçar uma atualização dos dados existem alguns métodos... resync, refresh e 
requery. No lado cliente só existem o resync e refresh, que na verdade 
atualizam os dados que estão disponíveis para mim, trazendo qualquer alteração 
existente em qualquer dos registros ou em um específico, dependendo das opções 
do resync. Porém eles não são capazes de trazer novos registros, criados 
depois. Nem sumir com os que foram excluidos e dependendo da situação podem até 
gerar uma exceção. Para isto existe o requery, disponível apenas no ADODataSet. 
Como no meu caso eu inclui vários novos registros, o resync e o refresh não 
resolveram. Como solução encontrei logo após o fim das inserções utilizar um 
requery no dataset e um refresh no clientdataset, para que ele reflita as 
alterações do dataset... algo como:

adodataset.requery([]);
clientdataset.refresh;

Dessa maneira tudo ficou ok. Executo os meus scripts de inserção e é refletido 
na hora na minha tabela.
Isso só acontece com essa estrutura de dados que passei. Com ADOTable não tive 
problema, pois pelo que percebi ele faz acesso direto ao banco, não dependendo 
de mais ninguém no meio. Por ser um dataset também tem o método requery 
disponível.

Gostaria muito que me corrigissem caso tenha alguma coisa errada no que 
escrevi, e principalmente caso exista alguma outra maneira de solucionar o 
problema, que não seja essa.

Agradeço a todos que me responderam.

Abraços.

_____________________________________
Claudiney Cogo
N2 Sistemas e Soluções em Informática
Av. São Paulo, 172 - 15º Andar - Sala 1505
Maringá - Paraná
www.n2solutions.com.br


  ----- Original Message ----- 
  From: Claudiney Cogo 
  To: delphi-br@yahoogrupos.com.br 
  Sent: Monday, October 22, 2007 11:08 AM
  Subject: Re: [delphi-br] Problema com refresh do dataset


  Grande Rafael...

  Td blz? Rapaz.. nem sabia que vc tava por aqui... rsrs

  Valeu pelas instruções. Testei de algumas maneiras, mas ainda não consegui 
fazer funcionar.

  Esse form é um cadastro, onde existe um tipo de importação na tabela filha. 
Essa importação funciona assim: Limpo a tabela filha, caso tenha dados (usando 
delete) e na sequencia abro uma query pra selecionar o que quero importar pra 
dentro dela (select em outra tabela). Com o que quero selecionado eu faço um 
laço pra importar na minha tabela, ajustando as coisas de acordo. Aí entra o 
Insert que coloca os dados lá.

  Coloquei então o BeginTrans antes do laço e o CommitTrans depois de terminado 
o laço. Não deu. Então coloquei o BeginTrans dentro do laço antes do Insert e o 
CommitTrans dentro do laço logo abaixo do Insert. Também nada.

  Existe outra tabela nesse mesmo form onde insiro registros por Insert também, 
e esta atualiza sem problemas, na hora. A única diferença é que esta do 
problema é uma tabela filha, ligado por MasterSource... e tem campos 
calculados. Mas já testei sem os calculados, sem sucesso também. 

  Tô ainda procurando a solução. Achando aqui eu aviso. Se por acaso você tiver 
mais alguma idéia do que possa ser, me avise, por favor. Vou acabar ficando 
careca... rsrs.. e olha que tenho cabelo até demais...

  Abraço Rafael. E obrigado pela ajuda.

  _____________________________________
  Claudiney Cogo
  N2 Sistemas e Soluções em Informática
  Av. São Paulo, 172 - 15º Andar - Sala 1505
  Maringá - Paraná
  www.n2solutions.com.br

  ----- Original Message ----- 
  From: [EMAIL PROTECTED] 
  To: delphi-br@yahoogrupos.com.br 
  Sent: Saturday, October 20, 2007 9:09 AM
  Subject: Re: [delphi-br] Problema com refresh do dataset

  Cogo, no Ado é diferente os comandos.
  tenta assim

  ADOConnection1.BeginTrans; //para começar uma transação nova;
  ADOConnection1.CommitTrans; //no update ou post para comitar a transação;
  ADOConnection1.RollbackTrans;//se der algum erro na transação ele faz o 
rollback;

  Att.
  rafael.

  > E ae Dr. Cogo tudo beleza?
  > Como estão as coisas?
  > Estava dando uma lida na sua dúvida. é mais ou menos assim
  > esse tipo de conexão abre uma transação quando inicia o projeto
  > e so comita ao sair da conexão.
  > Tenta usar o starttransaction com commit ou rollback nas telas.
  > faz um teste forçando abrir uma nova transação e comitando ao gravar ou 
alterar
  > os dados. Com certeza ira funcionar, se nao der certo entra em contato 
novamente
  > que tentaremos te ajudar.
  >
  > Um abraço
  > Rafael.
  >
  >> Desculpem.. postei com o subject errado... segue novamente com o correto..
  >>
  >> Boa tarde a todos...
  >>
  >> Venho mais uma vez buscar a ajuda de vocês, porque já queimei alguns bons
  >> neurônios e nada... rsrs
  >> O problema é o seguinte:
  >>
  >> Minha aplicação usa Delphi 7 + ADO + Sql Server. Até aí tudo tranquilo.
  >> Tenho um form onde cadastro uma determinada tabela. Ela tem uma tabela 
filha,
  >> ligada por master source. Também sem problema até aqui. Num determinado
  >> momento
  >> eu preciso fazer algumas inserções nessa tabela, num laço while. Essas
  >> inserções
  >> eu faço usando SQL (insert into tabela ...). Funciona. O problema é que 
logo
  >> após sair do laço as informações da tabela não são atualizadas. Como se
  >> faltasse
  >> o applyupdates num insert pelo dataset. Mesmo fechando a tabela e abrindo 
de
  >> novo os dados permanecem os antigos. Só atualiza quando saio do sistema e
  >> volto,
  >> fechando a conexão. Sei que devo ter errado ou esquecido alguma coisa no 
meio
  >> do
  >> caminho. Mas já queimei muitos neurônios e não acho o problema. Já fui no
  >> google
  >> pesquisar e nada a respeito. Help do delphi, nada. Mensagens do delphi-br e
  >> nada. Ou dei muito azar na hora da busca, ou procurei pelos termos 
errados. O
  >> caso é que preciso resolver e não encontrei nada. Sei que deve ser alguma
  >> idiotice que fiz, mas se alguém puder dar uma luz, fico agradecido.
  >>
  >> Abraço a todos.
  >>
  >> _____________________________________
  >> Claudiney Cogo
  >> N2 Sistemas e Soluções em Informática
  >> Av. São Paulo, 172 - 15º Andar - Sala 1505
  >> Maringá - Paraná
  >> www.n2solutions.com.br
  >>
  >> [As partes desta mensagem que não continham texto foram removidas]
  >>
  >>
  >
  >
  >

  __________ NOD32 2604 (20071019) Information __________

  This message was checked by NOD32 antivirus system.
  http://www.eset.com

  [As partes desta mensagem que não continham texto foram removidas]



   

  __________ NOD32 2606 (20071022) Information __________

  This message was checked by NOD32 antivirus system.
  http://www.eset.com


[As partes desta mensagem que não continham texto foram removidas]

Responder a