Fonte: www.activedelphi.com.br
Administrador Esta é uma dica simples de como fazer migração de dados entre bancos ou entre tabelas diferentes, utilizando poucas linhas de código e deixando o trabalho maior na organização dos componentes
Você deve deixar os campos com as mesmas posições em seus componentes DataSet de origem e destino (componentes que farão a leitura de uma tabela e edição na outra). Este DataSet, obviamente pode ser um TQuery, TTable, TIBQuery, TADOQuery, TClientDataSet ou, enfim, qualquer outro componente descendente da classe TDataSet.
Vamos supor que estamos fazendo a migração de um banco Access para Firebird. Para acessar o Access, usaremos um ADOQuery, e para Firebird, ClientDataSet.
Feitas as conexões, o que precisamos fazer é organizar os campos no ADOQuery e no ClientDataSet para que fiquem com as mesmas posições, ou seja, campo[0] do ADOQuery equivale ao campo[0] no ClientDataSet, assim como os demais, campo[1], campo[2], etc.
Organizados os campos, o seguinte código seria suficiente para transferir os dados entre as tabelas:
//código do botão "Transferir"
var
c: integer;
begin
//abre a tabela Destino
ClientDataSet1.Open;
//abre a tabela Origem
ADOQuery1.Open;
//enquanto não chegar ao fim da origem
while not ADOQuery1.EOF do
begin
//abre um novo registro no destino
ClientDataSet1.Append;
//para cada campo da tabela destino
for c := 0 to ClientDataSet1.FieldCount-1 do
//preenche cada campo com seu valor respectivo da origem
//ClientDataSet1.Fields[c].Value := ClientDataSet1.Fields[c].Value;
//Corrigido em 16/07/2009 15:45
ClientDataSet1.Fields[c].Value := ADOQuery1.Fields[c].Value;
//grava o registro na tabela destino (em memória)
ClientDataSet1.Post;
//confirma as alterações no banco de dados
//(desnecessário se não for um ClientDataSet)
ClientDataSet1.ApplyUpdates(0);
//vai para o próximo registro da origem
ADOQuery1.Next;
end;
//fecha a origem
ADOQuery1.Close;
//fecha o destino
ClientDataSet1.Close;
end;
Você deve deixar os campos com as mesmas posições em seus componentes DataSet de origem e destino (componentes que farão a leitura de uma tabela e edição na outra). Este DataSet, obviamente pode ser um TQuery, TTable, TIBQuery, TADOQuery, TClientDataSet ou, enfim, qualquer outro componente descendente da classe TDataSet.
Vamos supor que estamos fazendo a migração de um banco Access para Firebird. Para acessar o Access, usaremos um ADOQuery, e para Firebird, ClientDataSet.
Feitas as conexões, o que precisamos fazer é organizar os campos no ADOQuery e no ClientDataSet para que fiquem com as mesmas posições, ou seja, campo[0] do ADOQuery equivale ao campo[0] no ClientDataSet, assim como os demais, campo[1], campo[2], etc.
Organizados os campos, o seguinte código seria suficiente para transferir os dados entre as tabelas:
//código do botão "Transferir"
var
c: integer;
begin
//abre a tabela Destino
ClientDataSet1.Open;
//abre a tabela Origem
ADOQuery1.Open;
//enquanto não chegar ao fim da origem
while not ADOQuery1.EOF do
begin
//abre um novo registro no destino
ClientDataSet1.Append;
//para cada campo da tabela destino
for c := 0 to ClientDataSet1.FieldCount-1 do
//preenche cada campo com seu valor respectivo da origem
//ClientDataSet1.Fields[c].Value := ClientDataSet1.Fields[c].Value;
//Corrigido em 16/07/2009 15:45
ClientDataSet1.Fields[c].Value := ADOQuery1.Fields[c].Value;
//grava o registro na tabela destino (em memória)
ClientDataSet1.Post;
//confirma as alterações no banco de dados
//(desnecessário se não for um ClientDataSet)
ClientDataSet1.ApplyUpdates(0);
//vai para o próximo registro da origem
ADOQuery1.Next;
end;
//fecha a origem
ADOQuery1.Close;
//fecha o destino
ClientDataSet1.Close;
end;
Nenhum comentário:
Postar um comentário