A quem possa interessar, conclusões sobre o Delta: Como os colegas já tinham dito, o Delta armazena somente os registros que foram modificados. Então para constatar o seu correto funcionamento, fiz um teste muito simples:
- Criei um novo projeto e coloquei dois TClientDataSet na tela (cdsNormal e cdsDelta). - Com o cdsNormal linkado à minha tabela do banco de dados, inseri, alterei e deletei registros. - Depois atribui o Delta do cdsNormal ao Data do cdsDelta: cdsDelta.Data := cdsNormal.Delta; - Quando dei um Active := true no cdsDelta (mostrei os registros num DBGrid), o mesmo continha somente as alterações realizadas no cdsNormal. - Para saber o que tinha acontecido com cada registro, fiz o seguinte no evendo onCellClick do DBGrid linkado ao cdsDelta: procedure TForm1.DBGrid2CellClick(Column: TColumn); begin with cdsDelta do begin case UpdateStatus of usUnmodified: lblStatus.Caption := 'Não modificado'; usModified: lblStatus.Caption := 'Modificado'; usInserted: lblStatus.Caption := 'Inserido'; usDeleted: lblStatus.Caption := 'Deletado'; end; end; end; Simples não?! Abraços, Edelson. 2009/6/2 Edelson Regis de Lima <edre...@ig.com.br> > Valew pessoal! > > Vou fazer uns testes aqui, e depois posto o resultado. > > Abraços, > > Edelson. > > > 2009/6/2 Daniel Sobrinho Laporte <daniel.lapo...@gmail.com> > > >> >> Exatamente Ricardo... através do Delta você consegue obter o valor antigo, >> e >> o novo valor dos campos através dos métodos NewValue e OldValue. >> >> Edelson para um pequeno teste você pode criar um projeto em branco colocar >> dois clientdataset's, um como tabela de memória e o outro com dados >> preenchidos, ao alterar os valores do primeiro e realizar o post, grave o >> delta no clientdataset de memória, desta maneira você pode realizar um FOR >> olhando os fields e comparando-os. É importante que você entenda bem o >> funcionamento de Variants para não ter supresas de como trabalhar com os >> OleVariants. >> >> []s >> >> Daniel >> >> 2009/6/2 Ricardo César Cardoso >> <ricardo_engs...@yahoo.com.br<ricardo_engsoft%40yahoo.com.br> >> > >> >> >> > >> > >> > Até onde lembro o Delta só tem as colunas e dados mudados. Não tem o >> > registro todo. Se não me engano a matriz do Delta é algo assim: Field, >> > OldValue, NewValue mas não tenho certeza absoluta. >> > >> > []'s >> > Ricardo. >> > >> > 1) Evite escrever suas mensagens usando somente LETRAS MAIÚSCULAS. >> > >> > 2) Revise o texto de sua mensagem. Uma mensagem bem escrita é melhor >> > compreendida. >> > >> > 3) Vamos ajudar o Grupo e o Yahoo! Apague o conteúdo irrelevante! >> > >> > --- Em ter, 2/6/09, Edelson Regis de Lima >> > <edre...@ig.com.br<edregis%40ig.com.br> >> <edregis%40ig.com.br>> >> > escreveu: >> > >> > De: Edelson Regis de Lima <edre...@ig.com.br <edregis%40ig.com.br><edregis% >> 40ig.com.br>> >> > Assunto: Re: [delphi-br] Funcionamento interno do ApplyUpdates >> > Para: delphi-br@yahoogrupos.com.br >> > <delphi-br%40yahoogrupos.com.br><delphi-br% >> 40yahoogrupos.com.br> >> >> > Data: Terça-feira, 2 de Junho de 2009, 9:40 >> > >> > >> > Entendi... >> > >> > E eu consigo enxergar as rows os Fields dentro do Data e do Delta? >> > >> > Ou tenho que fazer algum TypeCast para obter as informações? >> > >> > Pelo que você falou, eu preciso comparar tudo o que está diferente no >> Delta >> > >> > em relação ao Data, trabalhar essas informações e depois persistir no >> banco >> > >> > de dados. >> > >> > Vocês sabem de alguma maneira eficaz de se fazer isso? Tipo, sem correr >> o >> > >> > risco de deixar dados para traz? >> > >> > Obrigado, >> > >> > Edelson. >> > >> > 2009/6/1 Daniel Sobrinho Laporte <daniel.laporte@ gmail.com> >> > >> > > >> > >> > > >> > >> > > Edelson o ClientDataSet possui dois estados internos. >> > >> > > >> > >> > > ClientDataSet. Data: contém os dados originais >> > >> > > ClientDataSet. Delta: contém os dados que sofreram alteração >> > >> > > >> > >> > > A peristência na verdade é realizada pelo DataSetProvider de acordo >> com >> > seu >> > >> > > UpdateMode e com as configurações dos ProviderFlags. Tanto o Data >> quanto >> > o >> > >> > > Delta são OleVariants, desta forma você pode criar um array de >> variants e >> > >> > > atribuir o valor, ou utilizar um outro ClientDataSet. Data em tempo de >> > >> > > execução ok? >> > >> > > >> > >> > > []'s >> > >> > > >> > >> > > Daniel >> > >> > > >> > >> > > 2009/6/1 berdam <berdamzinho@ yahoo.com. br <berdamzinho% 40yahoo.com >> . >> > br>> >> > >> > > >> > >> > > >> > >> > > > >> > >> > > > >> > >> > > > o dataset tem tuas propriedades o data e o delta, se n me engano o >> data >> > >> > > > possui o registro, já o delta possui todos os registros alterados. >> > >> > > > >> > >> > > > Edelson Regis de Lima escreveu: >> > >> > > > >> > >> > > > > >> > >> > > > > >> > >> > > > > Olá galera! >> > >> > > > > >> > >> > > > > Alguém sabe como o ApplyUpdates do TClientDataSet reconhece >> > >> > > internamente >> > >> > > > > quais são os registros que foram alterados, e que operação ele >> > precisa >> > >> > > > > executar (se é insert, update, delete...). >> > >> > > > > Estou perguntando isso porque estou desenvolvendo um componente >> > herdado >> > >> > > > do >> > >> > > > > TClientDataSet, que terá um ApplyUpdates "modificado" . Esse >> > >> > > ApplyUpdates >> > >> > > > > terá que fazer algumas outras coisas antes de persistir os dados. >> > >> > > > > E se eu conseguir entender como o ApplyUpdates reconhece quais os >> > >> > > > > registros/campos que precisam ser persistidos, irá facilitar >> muiiiito >> > a >> > >> > > > > minha vida. >> > >> > > > > Já ouvi falar que tem a ver com o Delta, mas não manjo muito sobre >> > >> > > ele... >> > >> > > > > >> > >> > > > > Abraços, >> > >> > > > > >> > >> > > > > Edelson. >> > >> > > > > >> > >> > > > > [As partes desta mensagem que não continham texto foram removidas] >> > >> > > > > >> > >> > > > > >> > >> > > > >> > >> > > > -- >> > >> > > > ------------ --------- --------- --------- --------- ----- >> > >> > > > Uberdam Cavaletti >> > >> > > > Formado em Tecnologia da informação - Unoesc - Xxe >> > >> > > > Pós graduado em Desenvolvimento Java - Unoesc - Xxe >> > >> > > > >> > >> > > > Acesse http://www.curricul ar.com.br/ berdam >> > >> > > > Acesse http://passandovene no.blogspot. com >> > >> > > > >> > >> > > > ------------ --------- --------- --------- --------- ----- >> > >> > > > >> > >> > > > >> > >> > > > >> > >> > > >> > >> > > -- >> > >> > > Daniel Sobrinho Laporte >> > >> > > Analista de Sistemas e Desenvolvedor Delphi + Firebird. >> > >> > > Colunista e Editor Técnico ClubeDelphi - DevMedia. >> > >> > > >> > >> > > [As partes desta mensagem que não continham texto foram removidas] >> > >> > > >> > >> > > >> > >> > > >> > >> > [As partes desta mensagem que não continham texto foram removidas] >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > Veja quais são os assuntos do momento no Yahoo! +Buscados >> > http://br.maisbuscados.yahoo.com >> > >> > [As partes desta mensagem que não continham texto foram removidas] >> > >> > >> > >> >> -- >> Daniel Sobrinho Laporte >> Analista de Sistemas e Desenvolvedor Delphi + Firebird. >> Colunista e Editor Técnico ClubeDelphi - DevMedia. >> >> [As partes desta mensagem que não continham texto foram removidas] >> >> >> > > [As partes desta mensagem que não continham texto foram removidas]