Importando XML para Firebird

Firebird

15/11/2012

Pessoal tenho uma aplicação em firebird 2.1 delphi7, preciso importar dados de um arquivo xml para dentro do firebird, são mais de 4500 produtos de um supermercado, não sei nem por onde começar, verifiquei pelo ibexpert mais não consegui,
porfavor alguem me ajude..Aguardo
Rodrigo Bernal

Rodrigo Bernal

Curtidas 0

Melhor post

Claudia Nogueira

Claudia Nogueira

19/11/2012

Oie, desculpa a demora.
Você já tem o banco de dados em Firebird e com a tabela na mesma estrutura?
Me fala isso que daí te passo um código simples aqui pra gravar no banco.
GOSTEI 1

Mais Respostas

Claudia Nogueira

Claudia Nogueira

15/11/2012

Pode passar a estrutura desse XML?
Só copiar uma parte dele e postar aqui.
GOSTEI 0
Rodrigo Bernal

Rodrigo Bernal

15/11/2012

O Claudia Vai ai
<?xml version="1.0" standalone="true"?>
-<Produtos> -<Produto ProdutoID="0"> <Codigo>00000000000000001</Codigo> <Descritivo>PAO FRANCES KG F.P. </Descritivo> <PrecoUnitario>5,99</PrecoUnitario> <Totalizador>09</Totalizador> <Pesado>1</Pesado> <Departamento>015</Departamento> <Plu>0</Plu> <Preco2>0</Preco2> <Preco3>0</Preco3> <Preco4>0</Preco4> <IMEI>0</IMEI> <ICCID>0</ICCID> </Produto> -<Produto ProdutoID="1"> <Codigo>00000000000000002</Codigo> <Descritivo>TOMATE DEBORA kg </Descritivo> <PrecoUnitario>2,59</PrecoUnitario> <Totalizador>05</Totalizador> <Pesado>1</Pesado> <Departamento>011</Departamento> <Plu>0</Plu> <Preco2>0</Preco2> <Preco3>0</Preco3> <Preco4>0</Preco4> <IMEI>0</IMEI> <ICCID>0</ICCID>

segue ai
GOSTEI 0
Carlos Bernardo

Carlos Bernardo

15/11/2012

Tentou carregar ele pelo ClientDataSet, propriedade FileName?
GOSTEI 0
Rodrigo Bernal

Rodrigo Bernal

15/11/2012

BLZ CARLOS JA CARREGUEI PELO CLIENTDATASET MAIS TO COM DIFICULDADE PARA JOGAR ISSO PARA DENTRO DO MEU BANCO DE DADOS..
OU EXPORTAR PARA O EXCELL E DEPOIS JOGAR NO BANCO...
GOSTEI 0
Rodrigo Bernal

Rodrigo Bernal

15/11/2012

BOM DIA SIM CLAUDIA TENHO
GOSTEI 0
Carlos Bernardo

Carlos Bernardo

15/11/2012

Amigo, eu faço isso com um loop...

Ex:.
CDS_TABLE.OPEN;
CDS_XML.OPEN;
CDS_XML.FIRST;
WHILE NOT CDS_XML.EOF DO
BEGIN
CDS_TABLE.APPEND;
CDS_TABLE.FIELDBYNAME('CAMPO1').ASINTEGER := CDS_TABLE.FIELDBYNAME('CAMPO1').ASINTEGER ;
CDS_TABLE.FIELDBYNAME('CAMPO2').ASSTRING := CDS_TABLE.FIELDBYNAME('CAMPO2').ASSTRING ;
CDS_TABLE.FIELDBYNAME('CAMPO3').VALUE := CDS_TABLE.FIELDBYNAME('CAMPO3').VALUE ;
CDS_TABLE.POST;
CDS_TABLE.APPLYUPDATES(0);
CDS_XML.NEXT;
END;

Pode ser que exista outra forma, mas eu faço assim...

GOSTEI 0
Carlos Bernardo

Carlos Bernardo

15/11/2012

Amigo, eu faço isso com um loop...

Ex:.
CDS_TABLE.OPEN;
CDS_XML.OPEN;
CDS_XML.FIRST;
WHILE NOT CDS_XML.EOF DO
BEGIN
CDS_TABLE.APPEND;
CDS_TABLE.FIELDBYNAME('CAMPO1').ASINTEGER := CDS_TABLE.FIELDBYNAME('CAMPO1').ASINTEGER ;
CDS_TABLE.FIELDBYNAME('CAMPO2').ASSTRING := CDS_TABLE.FIELDBYNAME('CAMPO2').ASSTRING ;
CDS_TABLE.FIELDBYNAME('CAMPO3').VALUE := CDS_TABLE.FIELDBYNAME('CAMPO3').VALUE ;
CDS_TABLE.POST;
CDS_TABLE.APPLYUPDATES(0);
CDS_XML.NEXT;
END;

Pode ser que exista outra forma, mas eu faço assim...





Xi falha nossa, ele recebe do CDS_XML


CDS_TABLE.OPEN;
CDS_XML.OPEN;
CDS_XML.FIRST;
WHILE NOT CDS_XML.EOF DO
BEGIN
CDS_TABLE.APPEND;
CDS_TABLE.FIELDBYNAME('CAMPO1').ASINTEGER := CDS_XML.FIELDBYNAME('CAMPO1').ASINTEGER ;
CDS_TABLE.FIELDBYNAME('CAMPO2').ASSTRING := CDS_XML.FIELDBYNAME('CAMPO2').ASSTRING ;
CDS_TABLE.FIELDBYNAME('CAMPO3').VALUE := CDS_XML.FIELDBYNAME('CAMPO3').VALUE ;
CDS_TABLE.POST;
CDS_TABLE.APPLYUPDATES(0);
CDS_XML.NEXT;
END;
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

15/11/2012

Oie, faço parecido com o que o coleta digitou.
1 IbDataBase
1 IbTransaction
1 IbTable (ligada na tabela que vai receber as informações do ClientDataSet com mesma estrutura)
1 ClientDataSet que está ligado ao XML.

Var
  i : Integer;
begin
  IBTable1.Close;
  IBTable1.Open;
  ClientDataSet1.Close;
  ClientDataSet1.Open;
  ClientDataSet1.First;
  while not ClientDataSet1.Eof do
  begin
    IBTable1.Insert;
    for i := 0 to ClientDataSet1.FieldCount - 1 do
      IBTable1.FieldByName(ClientDataSet1.Fields[i].FieldName).Value := ClientDataSet1.FieldByName(ClientDataSet1.Fields[i].FieldName).Value;
    IBTable1.Post;
    ClientDataSet1.Next;
  end;
  IBTransaction1.CommitRetaining;
end;
GOSTEI 1
POSTAR