Fórum dbExpress - troca de dados entre dois CDS #301269
31/10/2005
0
Estou desenvolvendo uma aplicacao q pega dados de um banco oracle e passa os dados para um firebird, utilizando dbExpress. montei um form para importacao de dados (CEP e CIDADE), duas linhas de dbtipos (conexao, dataset, provider, clientdataset e datasource), cada um no seu banco. Carrego os dados no CDS do oracle, mas jah tentei algumas variacoes de inserir dados no CDS do FB, sem sucesso (via fieldbyname). Alguem pode me dar uma luz?
Bugaloobr
Curtir tópico
+ 0
Responder
Posts
31/10/2005
Camilo
caro BugalooBR, gravar dados no FB, via dbexpress é coisa simples, ficaria mais fácil se vc colocasse ae a instrução q está tentando passar.....
se preferir, msn
camilo_meganews@hotmail.com
se preferir, msn
camilo_meganews@hotmail.com
Responder
Gostei + 0
01/11/2005
Bugaloobr
Tentarei explicar o mais possivel o perfil do sistema:
De um lado temos um banco Oracle, no qual residem os dados a serem obtidos.
A tabela eh Forn, de onde pegarei dados em duas vias, primeiro, CEP (CEPFOR) e CIDADES (CIDFOR), para
preencher uma tabela no FB chamada Cidades, contendo CEP (CEP) e CIDADES (CIDADE), segundo, demais dados
referentes ao fornecedor (se puxar o primeiro, nao terei dificuldade de puxar o segundo).
Criei uma aplicacao utilizando Delphi 2005 e dbExpress, no datamodule (DM) crie duas colunas de componentes de acesso a dados (connection CONNX, dataset DS, datasetprovider DSP, clientdataset CDS, datasource SRC), uma para o Oracle e outra para o FB. Para ter certeza do evento de importacao, crie dois dbgrid mostrando os dados em ambos os bancos.
Quando carrego os dados no lado Oracle, tudo bem, aparece tudo o que eu quero no dbgrid.
Duando clico para importar dados, verifico o FB e nao ha nada (nada foi importado).
Do lado Oracle, no dataset, na propriedade CommandText tenho:
select x.cepfor, x.cidfor from FORN
where x.cepfor > 1000000
Com isto ele polula o dbgrid corretamente. Entao, tenho um botao importar que possui a seguinte programacao:
procedure TfrmCidades.btnImportarClick(Sender: TObject);
var
CEP : integer;
CIDADE: string;
begin
if DMPrincipal.connxFB.Connected = False then // testa se a conexao estah desligada, ligando-a
begin
DMPrincipal.connxFB.Connected := True;
end; // verificar conexao com banco. Fazer conexao
DMPrincipal.cdsCidadesFB.Active := True;
DMPrincipal.dsCidadesFB.Active := True;
with DMPrincipal.cdsCidadesOracle do
begin
DMPrincipal.cdsCidadesOracle.FileName := ´c:\Cidades_CEPs.XML´; // carrega os CDS com dados e salva num XML
savetofile;
end;
with DMPrincipal.cdsCidadesFB do
begin
DMPrincipal.cdsCidadesFB.FileName := ´c:\Cidades_CEPs.XML´; // carrega o CDS com os dados salvos no XML
loadfromfile;
while DMPrincipal.cdsCidadesFB.Eof do
DMPrincipal.cdsCidadesFB.First;
DMPrincipal.cdsCidadesFB.CommandText := ´insert into CIDADES (CEP, CIDDADES) values (:CEPFOR, :CIDFOR)´;
DMPrincipal.cdsCidadesFB.FieldByName(´CEPFOR´).AsInteger := CEP;
DMPrincipal.cdsCidadesFB.FieldByName(´CIDFOR´).AsString := CIDADE;
DMPrincipal.cdsCidadesFB.Next;
end;
DMPrincipal.cdsCidadesFB.ApplyUpdates(-1);
end;
Tudo vai sem problema, mas quando clico no botao Mostrar dados (no FB), o grid estah vazio.
De um lado temos um banco Oracle, no qual residem os dados a serem obtidos.
A tabela eh Forn, de onde pegarei dados em duas vias, primeiro, CEP (CEPFOR) e CIDADES (CIDFOR), para
preencher uma tabela no FB chamada Cidades, contendo CEP (CEP) e CIDADES (CIDADE), segundo, demais dados
referentes ao fornecedor (se puxar o primeiro, nao terei dificuldade de puxar o segundo).
Criei uma aplicacao utilizando Delphi 2005 e dbExpress, no datamodule (DM) crie duas colunas de componentes de acesso a dados (connection CONNX, dataset DS, datasetprovider DSP, clientdataset CDS, datasource SRC), uma para o Oracle e outra para o FB. Para ter certeza do evento de importacao, crie dois dbgrid mostrando os dados em ambos os bancos.
Quando carrego os dados no lado Oracle, tudo bem, aparece tudo o que eu quero no dbgrid.
Duando clico para importar dados, verifico o FB e nao ha nada (nada foi importado).
Do lado Oracle, no dataset, na propriedade CommandText tenho:
select x.cepfor, x.cidfor from FORN
where x.cepfor > 1000000
Com isto ele polula o dbgrid corretamente. Entao, tenho um botao importar que possui a seguinte programacao:
procedure TfrmCidades.btnImportarClick(Sender: TObject);
var
CEP : integer;
CIDADE: string;
begin
if DMPrincipal.connxFB.Connected = False then // testa se a conexao estah desligada, ligando-a
begin
DMPrincipal.connxFB.Connected := True;
end; // verificar conexao com banco. Fazer conexao
DMPrincipal.cdsCidadesFB.Active := True;
DMPrincipal.dsCidadesFB.Active := True;
with DMPrincipal.cdsCidadesOracle do
begin
DMPrincipal.cdsCidadesOracle.FileName := ´c:\Cidades_CEPs.XML´; // carrega os CDS com dados e salva num XML
savetofile;
end;
with DMPrincipal.cdsCidadesFB do
begin
DMPrincipal.cdsCidadesFB.FileName := ´c:\Cidades_CEPs.XML´; // carrega o CDS com os dados salvos no XML
loadfromfile;
while DMPrincipal.cdsCidadesFB.Eof do
DMPrincipal.cdsCidadesFB.First;
DMPrincipal.cdsCidadesFB.CommandText := ´insert into CIDADES (CEP, CIDDADES) values (:CEPFOR, :CIDFOR)´;
DMPrincipal.cdsCidadesFB.FieldByName(´CEPFOR´).AsInteger := CEP;
DMPrincipal.cdsCidadesFB.FieldByName(´CIDFOR´).AsString := CIDADE;
DMPrincipal.cdsCidadesFB.Next;
end;
DMPrincipal.cdsCidadesFB.ApplyUpdates(-1);
end;
Tudo vai sem problema, mas quando clico no botao Mostrar dados (no FB), o grid estah vazio.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)