Fórum Transportar dados de uma tabela de um banco para outro p/cód #346498

23/09/2007

0

Pessoal, bom dia, tenho duas tabelas de dois bancos diferente, uma em firebird (Tabela Origem) e outras e Access (Tabela Destino), bom é o seguinte, tenho que transportar dados da tabela Origem para a tabela Destino, porém depois de transportado as vezes preciso fazer manutenção na tabela Origem, ou seja alguma alteração ou exclusão por exemplo, preciso depois exportar os novos dados para a tabela Destino, e não estou sabendo como fazer. Pois se o banco fosse o mesmo em firebird poderia facilmente criar uma SP pra isso, agora com dois bancos diferentes não estou sabendo como fazer.

Obs: Não posso alterar nem incluir novos campos na tabela Destino, pq, não pertence ao meu projeto, essa tabela é de outro sistema, o que o meu programa faz é somente exportar os dados lançados para este programa.


Então galera;
Como eu faço?

procedure TForm1.Button1Click(Sender: TObject); begin [color=red:b14a048d31]destino.disablecontrols; destino.First; while (not destino.Eof) do begin //caso tenha algum campo na tabela destino que não bate com a tabela origem //então é deletado para não ficar diferente uma da outra //if Destino.Locate(´dtlancamento; dscomplum; cdreduzida´, VarArrayof([origemmespgto.Value, origemhistorico.Value, origemconta.Value]), []) then if origem.Locate(´mespgto; historico; conta´, VarArrayof([destinodtlancamento.Value, destinodscomplum.Value, destinocdreduzida.Value]), []) then begin destino.Next; end else begin destino.delete; end; destino.Next; end; destino.EnableControls;[/color:b14a048d31] [color=darkblue:b14a048d31] //--agora começa a fazer uma varredura atualizando a tabela destino cfe //--os dados da tabela origem origem.disablecontrols; origem.First; while (not origem.Eof) do begin {Gravando da tabela origem para tabela destino} if Destino.Locate(´dtlancamento; dscomplum; cdreduzida´, VarArrayof([origemmespgto.Value, origemhistorico.Value, origemconta.Value]), []) then begin destino.Next; //se tiver gravado na tabela destino passa pra frente end else begin destino.append; //se não grava na tabela destino {passa para tabela destino dos dados da tabela origem} destinodtLancamento.value:=origemmespgto.value; destinocdSindicato.Value:=46; destinovlpagamento.value:=origempagamento.value; destinovlrecebimento.value:=origemrecebimento.value; destinonranomes.value:=strtoint(convert(origemreferentemesano.value));//converte mm/aaaa para aaaamm destinocdreduzida.value:=strtoint(origemconta.value); destinonrlancamento.value:=Prox; destinocdHistorico.value:=origemcdhistorico.value; destinodsComplUm.Value:=origemhistorico.value; destino.post; //gravando na tabela destino end; origem.Next; end; origem.EnableControls; end;[/color:b14a048d31]
Tentei este código acima, mas esta parte em vermelho no código não funcionou, algum jeito pra isso?

Tambem percebi que duas tabelas de bancos diferentes não tem como (pelo menos não consegui fazer um select)

Assim não funciona
begin
  with qorigem do
  begin
    close;
    sql.clear;
    sql.add(´select * from fluxocaixa O where not exists(select * from lancamento D where D.dtlancamento = O.mespgto ´
           +´and D.cdreduzida = O.conta and D.dsComplUm = O.Historico)´);
    open;
  end;

Aponta o seguinte erro: [color=red:b14a048d31]Table Unknown LANCAMENTO [/color:b14a048d31], porque não existe no banco firebird esta tabela LANCAMENTO.

Tentei fazer uma gambiarra, mais ai não consegui fazer a sintaxe correta (Isto é se tiver como)
var
  sql, texto: string;
begin
  sql := ´select * from LANCAMENTO ´;

  //--CHAMANDO A QUERY DO ADO (DEPOIS QUE CHAMO FAÇO A COMPARAÇÃO DAS TABELAS)
  QDESTINO.Close;
  QDESTINO.SQL.Clear;
  QDESTINO.SQL.Add(sql);
  QDESTINO.Open;

  with qorigem do
  begin
    close;
    sql.clear;
    sql.add(´select * from FLUXOCAIXA O where not exists((sql) D where D.dtlancamento = O.mespgto ´
           +´and D.cdreduzida = O.conta and D.dsComplUm = O.Historico)´);
    open;
  end;


Bom pessoal, é isto ai.

Qualquer ajuda será bem vinda.

Obrigado
Adriano.


Adriano_servitec

Adriano_servitec

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar