Marcio, vou te sugerir a maneira mais simples de resolver isso que me vem à
mente agora, mas com certeza essa não é a única alternativa. Vamos lá.

PS1: Estou pertindo do princípio que a atualização ocorre apenas no sentido
SERVIDOR->CLIENTE, como eu entendi.

Na tabela "transportadora", além do campo "DataMod", você precisa também ter
um campo para informar que tipo de operação foi feita. Poderia ser, por
exemplo, "TipoMod". Os valores possíveis seriam "I", "A" e "E",
significando, Inclusão, Alteração e Exclusão, respectivamente.

PS2: Quando uma transportadora for excluída no servidor, o registro não
poderá ser fisicamente excluído até que os cliente tenham sincronizado essa
exclusão com suas bases locais.

Para sincronizar as alterações do servidor com os clientes, você faz o
seguinte:

1 - um "select * from Transportadora where
DATAMOD>:DATA_E_HORA_DA_ULTIMA_SINCRONIZACAO_DO_CLIENTE"

2 - carrega o dspTransportadora.cds para a memória

3 - percorre cada registro da query executada no servidor e verifica o campo
TipoMod.
    - se o conteudo for:
      - "I", INCLUI o registro no dataset que foi carregado com o
dspTransportadora.cds
      - "A", localiza o registro no dataset que foi carregado com o
dspTransportadora.cds e faz a ALTERACAO
      - "E", localiza o registro no dataset que foi carregado com o
dspTransportadora.cds e faz a EXCLUSAO

4 - salva o dataset que foi carregado com o dspTransportadora.cds em disco

5 - grava em algum lugar a data e hora da última sincronização do cliente
com o servidor.

Posso ter esquecido algum detalhe, mas de modo geral, essa é uma solução
possível para o seu problema.

Um abraço,

--
Dirlei Dionísio
Novo artigo: // Não comente seu código
http://MaisQueBomCodigo.blogspot.com


Em 19 de julho de 2010 13:31, Marcio <mar...@sulfabril.com.br> escreveu:

>
>
> deixa eu explicar melhor para baixar a base faco desta maneira :
>
> Aplicação servidora :
>
> SqlDataset : Select * from transportadora
>
> Aplicação Cliente :
>
> Cds := TClientDataSet.Create(nil);
> Cds.RemoteServer := SoapConnection1;
> SoapConnection1.Connected := True;
>
> Cds.Close;
> Cds.ProviderName := 'dspTransportadora' ;
> Cds.Open;
> //Cds.SaveToFile('dspTransportadora' + '.XML');
> Cds.SaveToFile('dspTransportadora.cds',dfBinary);
> Cds.Free;
> ShowMessage('arquivo baixado');
> exit;
>
> desta maneira baixei todas as transportadora , mas se eu quiser so
> atualizar o
> dspTransportadora.xml ?
>
> se eu fizer um select ,
> SqlDataset : Select * from transportadora where DataMod >= :DataMod
>
> como faco para unir com o dspTransportadora.xml com os registros do sql ??
>
> att. Marcio
>
> At 07:33 19/7/2010 -0700, you wrote:
> >
> >
> >Amigo como você falou que grava a data de alteração de cada registro
> >você pode simplesmente gerar um SQL (select) que filtre somente pela
> >data de alteração, poderia ser registro a registro porque ai você
> >teria como comparar a data do registro do arquivo local com a do
> >que estar no Server.
> >Estando usando ClientDataSet + XML é só desativar o ChangeLog do CDS
> >para não manter o registro antigo.
> >
> >isso resolve?
> >
> >===================================
> > Jean Barreiros
> > Programador/Web-Designer
> > Delphi|C++|PHP|JavaScript
> > FireBird|MySql|SQLServer
> > PostGree|Oracle
> > msn: delphij...@gmail.com <delphijean%40gmail.com>
> > e-mail: delphij...@yahoo.com.br <delphijean%40yahoo.com.br>
> >===================================
> >
> >
> >
> >De: Marcio <mar...@sulfabril.com.br <marcio%40sulfabril.com.br>>
> >Para: n...@yahoogrupos.com.br <NDDV%40yahoogrupos.com.br>
> >Enviadas: Segunda-feira, 19 de Julho de 2010 11:15:58
> >Assunto: Re: [NDDV] [ ClientDataSet atualizar base offline ]
> >
> >
> >
> >
> >
> >Daniel ,obrigado pela atençao.
> >
> >Bom ..
> >Estou tentando(tenho) construir uma aplicacao para os vendedores externos
> >da empresa .
> >
> >esta aplicao vai ser off-line / online.
> >
> >os vendedores antes de ir ao cliente baixam a base com os dados
> atualizados
> >ou uma vez
> >por semana ..
> >
> >estou baixando os dados via SOAP , mas o problema é se cada vez que
> >atualizar a
> >base cliente tiver que trazer tudo , fica muito pesado .
> >
> >pretendo atualizar a BASE cliente somente com os registros novos no
> servidor .
> >
> >estive pesquisando sobre compressao de dados no datapack mais nao
> encontrei
> >nada .
> >
> >é possivel isso ??
> >
> >At. Marcio
>
> >
> >
> >
> >
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


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



------------------------------------

-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    delphi-br-ow...@yahoogrupos.com.br
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    delphi-br-unsubscr...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Responder a