Fórum Copiar registros de um DB para outro no em tempo de execução #395940
18/02/2011
0
Como faço isso ?
Ronaldo Lanhellas
Curtir tópico
+ 0Posts
18/02/2011
Rogerio
Gostei + 0
18/02/2011
Ronaldo Lanhellas
utilizo firebird ! e sinceramente não tenho ideia de como copiar apenas os registros alterados para outro banco (Central) em tempo de execução
Gostei + 0
18/02/2011
Marco Salles
Gostei + 0
19/02/2011
Ronaldo Lanhellas
mais amigo, pense comigo ! eu tenho 2 bd's sendo que 1 desses é o central, já o local que fica na maquina (notebook) do cara, ele vai ficar quase 1 semana fazendo alterações nele sem passar nada pro central. depois dessa semana ele tem que transferir todas as modificações para o central, axo que não tem como ficar salvando no delta durante 1 semana né ? nem em xml pois vai ficar pesadão :D
Gostei + 0
19/02/2011
Marco Salles
uses MMSystem; var StartTick, EndTick: DWord;
procedure TForm1.btnGerarClick(Sender: TObject);
var
i: Integer;
begin
StartTick:=TimeGetTime;
for i := 0 to 10000 do
begin
cds.Append;
cds.FieldByName('nome').AsString:='Marco'+Inttostr(i);
cds.FieldByName('Idade').AsInteger:=i;
cds.Post;
end;
EndTick := TimeGetTime;
self.Caption:='Duration (in milliseconds) '+inttostr( EndTick - StartTick);
end;procedure TForm1.btsSalvarClick(Sender: TObject);
begin
StartTick:=TimeGetTime;
cds.SaveToFile('tempCds.xml',dfXMLUTF8);
EndTick := TimeGetTime;
self.Caption:='Duration (in milliseconds) '+inttostr( EndTick - StartTick);
end;procedure TForm1.BtnCarregarClick(Sender: TObject);
begin
StartTick:=TimeGetTime;
cds.LoadFromFile('tempCds.xml');
EndTick := TimeGetTime;
self.Caption:='Duration (in milliseconds) '+inttostr( EndTick - StartTick);
end;Gostei + 0
19/02/2011
Ronaldo Lanhellas
otimo, entendi. vou usar xml mesmo agora veja se meu conceito esta certo, com base na estrutura que voce pegou la do topico anterior que é a mesma
1 - Quando usuario logar pela primeira vez, obrigatoriamente ele tem que estar conectado ao banco de dados central onde tem todas as tabelas e dados originais.
2 - Já logado, ele aperta em um botão "SINCRONIZAR DO SERVIDOR PARA CLIENTE", e todas as tabelas e registros do banco central vão para a maquina do cliente em formato XML.
3 - Ae o cliente vai emborar com o notebook cadastrar cidades (como voce disse no exemplo), sendo que ele só tem os xml no notebook.
4 - Ao abrir o programa pela segunda vez (agora está desconectado do banco central), ele já carrega todos os ClientDataSet pelos XML.
5 - Agora vem a sacada, pois só interessa as alterações feitas, o que não foi mudado pode continuar como estava. Então quando o cliente cadastrar uma nova cidade automaticamente ele já salvar o delta do clientdataset em um outro XML chamado por exemplo: cidadesAlteradas.xml
Eu teria que fazer isso, pois quando voltar ao banco central e copiar todos os dados do XML para o banco, eu não posso de forma alguma sobreescrever os que já estão lá, apenas incluir os novos, ou alterar os que o cliente mudou.
Ta certo meu pensamento ? Lembrando que tenho que salvar no banco central só os dados alterados
Gostei + 0
19/02/2011
Marco Salles
otimo, entendi. vou usar xml mesmo agora veja se meu conceito esta certo, com base na estrutura que voce pegou la do topico anterior que é a mesma
Gostei + 0
19/02/2011
Ronaldo Lanhellas
vamos supor que no banco central o administrador modificou um registro lá !
Sendo que o vendedor que saiu para vender já tinha pego os arquivos xml e agora estão desatualizados , já que o administrador modificou este registro. Quando o vendedor voltar e sincronizar com o servidor, os xml vão ser copiados para o banco central mais não podem sobreescrever essa modificação que foi feita pelo administrador com a antiga que esta no xml.
e agora ?
Gostei + 0
19/02/2011
Marco Salles
vamos supor que no banco central o administrador modificou um registro lá !
Sendo que o vendedor que saiu para vender já tinha pego os arquivos xml e agora estão desatualizados , já que o administrador modificou este registro. Quando o vendedor voltar e sincronizar com o servidor, os xml vão ser copiados para o banco central mais não podem sobreescrever essa modificação que foi feita pelo administrador com a antiga que esta no xml.
e agora ?
Gostei + 0
19/02/2011
Ronaldo Lanhellas
Eu quero ficar salvando apenas o delta dentro do XML, consegui salvar o primeiro, mais ae se eu salvar outro delta (modificação), simplesmente ele sobreescreve todo o arquivo xml, e não quero isso porque eu quero depois pegar essas modificações e jogar do db.
Gostei + 0
19/02/2011
Ronaldo Lanhellas
fiz assim
var cdsDelta: TClientDataSet;begin cdsDelta := TClientDataSet.Create(Self); cdsDelta.Data := TClientDataSet(Sender).Delta; cdsDelta.SaveToFile('D:\CDSPRODUTO.XML', dfXML); cdsDelta.Free;end;
mais toda vez que salva ele sobreescreve a antiga...
por exemplo se eu inserir um registro novo, ele refaz todo o xml só com este novo registro e não quero isso
Gostei + 0
19/02/2011
Ronaldo Lanhellas
posso usar um banco central, e varios bancos locais (um por notebook obviamente)
o vendedor vai fazendo as modificações no banco local, ae quado for sincronizar , uma rotina verifica (compara) o banco central com o local, se ouver algo diferente, ele muda no central
agora como fazer? :d
Gostei + 0
19/02/2011
Marco Salles
posso usar um banco central, e varios bancos locais (um por notebook obviamente)
o vendedor vai fazendo as modificações no banco local, ae quado for sincronizar , uma rotina verifica (compara) o banco central com o local, se ouver algo diferente, ele muda no central
agora como fazer? :d
Gostei + 0
19/02/2011
Ronaldo Lanhellas
se tiver alguma sugestão para melhoria eu agradeço ! heheh
Gostei + 0
16/05/2013
José
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)