Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   Importacion desde Excel con ADO no importa algunos datos (https://www.clubdelphi.com/foros/showthread.php?t=78025)

Chaja 14-03-2012 02:29:59

Importacion desde Excel con ADO no importa algunos datos
 
Hola... escribo por que estaba buscadno un tema con referencia a la importacion de datos desde excel, y me encuentro con un tema. Uso la forma de hacerlos con los ADO comp. uso como se ha explicado en el foro y todo eso y se hace bien. todo bien, hasta que me sucede lo siguiente. No se por que algunos valors de la tabla de excel me los trae vacios, concretamenete los que son valores enteros, como controlo eso? la hoja de excel es:
codigo detalle precio
5588/1 Pelota Futbol CLUB 42.00
5589/1 Pelota Futbol Master 42.00
5589/2
Pelota Master Color 42.00
11 Pelota Fox Nº 4 52.00
17 Arco Futbol 1.83 x 1.22 x.60 149.00
17/A Arco Futbol 2.40 x 1.52 x 0.90 239.00
17/B Arco Futbol 3.02 x 2.07 x 1.18 349.00
18 Pelota Futsala Pro cosida 54.00
20
Silbato fox 40 striker 9.90
21 Collarines x 12 Unidades 18.90
22 Silbato fox 40 dolfin 18.90
23 Silbato Fox Micro C/C 24.90
24 Silbato Fox 40 classic 21.90
24D Silbato Fox 40 clasicc color surt x12 262.00
25 Silbato Fox 40 Pearl 11.90
26 Silbato Fox 40 con cronometro 139.00
27 Silbato fox Shark c/collarin 29.90
28 Collarin Fox x12 69.00

por ejemplo los codigo 11 17 24 25 26 27 28 no me levanta los datos , si el resto pero esos valores no. Para que lo haga debo ir al excel y editar uno por uno para que sea un texto. si son poco no pasa nada, pero como debo importar mas de 1000 lineas se complica.
Alguna sugerencia?

Gracias

Luis Roldan
Mar del Plata
Argentina

CHECHE81 28-04-2012 00:47:00

Saludos Chaja
Si nos muestras tu código podriamos ver como lo haces o talvez sea el tipo de dato que tienes en tu bd por ejemplo yo
para importar un excel a mysql utilizo algo como esto:

Código Delphi [-]
try
  AdoDataSet1.First;
  While not AdoDataSet1.EoF do
  begin

      cds1.Append;
     if not AdoDataSet1.FieldByName('campostring1').IsNull then
      cds1.FieldByName('campostring1').Value:= AdoDataSet1.FieldByName('campostring1').Value ;

      if not AdoDataSet1.FieldByName('campostring2').IsNull then
      cds1.FieldByName('campostring1').Value := AdoDataSet1.FieldByName('campostring2').Value ;
…

      if not AdoDataSet1.FieldByName('campoentero1').IsNull then
        cds1.FieldByName('campoentero1').Value := AdoDataSet1.FieldByName('campoentero1').Value ;
      …
      if not AdoDataSet1.FieldByName('campoentero2').IsNull then
        cds1.FieldByName('campoentero2').Value := AdoDataSet1.FieldByName('campoentero2').Value ;
      …


      cds1.post;

      AdoDataSet1.Next;

  end;

  Cerrar; //función para cerrar y refrescar el cds1 para mostrar los datos importados

  showmessage('Se agregaron los datos con éxito.');

  except
    ShowMessage('Verifique que los datos de su archivo de excel esten correctos, gracias.'); // Esto es si no coinciden
// los campos que estoy guardando en mi tabla  y los tengo en mi código de importación con los que tiene el excel, con 
//uno que no coincida aqui truena ok.
  end;

Solo que tengo un detalle se tarda demaciado, se me pasma la pantalla no he probado con los componentes de excel y no
se si es más rapido por esa vía, pero por aqui se me tarda un rato con un excel de 72 filas y 13 columnas, estuve pensando
si se podria hacer un insert con un select::)
Código SQL [-]
INSERT INTO tabla_A(CAMPO1, CAMPO2) select CAMPO1,CAMPO2 from tablaB
para que sea más rapida la importación y dejarle la chamba a la bd pero el detalle es que mi AdoDataSet1 esta conectado al
excel y los datos no estan en la bd sino en el el excel... si alguien ha hecho algo parecido y tiene algún dato extra se lo
agradezco de ante mano y estaria super jojojo¡¡¡¡¡

Grax por su tiempo.:)

juanlaplata 12-05-2012 15:42:00

Hola, saludos ...
asi es como importo datos de Excel.
Recorre todas las celdas del Excel e importa cada una de ellas.
Obviamente, tendrias q analizar de que manera se adapta a tu necesidad.

Código Delphi [-]
              FileName := OpenDialog1.FileName;
              Excel := CreateOleObject('Excel.Application');
              Excel.Workbooks.Open(FileName);

              Sheet := Excel.Workbooks[ExtractFileName(FileName)].WorkSheets[1];
              Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;

              CantRow := Excel.ActiveCell.Row;
              CantCol := Excel.ActiveCell.Column;

              RangoMatriz := Excel.Range['A1', Excel.Cells.Item[CantRow,CantCol]].Value;

              for i:=1 to CantRow do
                 begin
                      for j:=1 to CantCol do
                       begin

                            Base.buscarTelefonos.Append;
                            Base.buscarTelefonosImei.AsString := trim(RangoMatriz[i,j]);
                            Base.buscarTelefonos.Post;

                       end; // for j
                 end;//for i
              Excel.quit;


La franja horaria es GMT +2. Ahora son las 14:32:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi