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]