Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Exportar e Importar Datos (https://www.clubdelphi.com/foros/showthread.php?t=27044)

santi33a 10-11-2005 13:01:35

Exportar e Importar Datos
 
Hola a Todos:
Quisiera saber si alguien me pudiera dar una idea de como exportar y exportar unos datos en una aplicación hecha con Delphi 7 y MSSQL server 2000, en mi caso por ejemplo tengo dos tablas

TEmpresa (idEmp int, Empresa varchar 50)
y
TFactura (idFac int, idEmp int, imp money)

ahora si este aplicacion se llevara en varias empresa de forma independiente, es decir en cada empresa la tabla TEmpresa solo tendrá un solo articulo, y en una compañía que agrupa a todas estas empresas quiere tener el resultado de todas, yo pensee ponerle a la aplicacion un boton que diga Exporar Empresa y otro que diga importar, pero no tengo idea como implementarlo, por lo que agradeceria cualquier ayuda

lgarcia 10-11-2005 15:43:58

Exportar e importar datos
 
Hola:

Para la importacion e importacion de datos te recomendaria utilizar Excel dado que como funciona como una tabla te sera mas facil el tratamiento de estos procesos.

Para la exportacion debes crear un procedimiento almacenado que te devuelva los datos de la empresa que va a exportar y de ahi llenas la hoja de Excel y luego creas otro procedimiento almacenado para insertar esos datos el cual leera los datos de la hoja de Excel.

Te dare algun codigo con una muestras.

Para importar
Código:

procedure TFormMenu.Productos2Click(Sender: TObject);
var
  j: Integer;
begin
  try
        Excel := CreateOleObject('Excel.Application');
  except
        Excel.Quit;
        showmessage('No se pudo crear el Objecto Excel.');
        raise;
  end;
  if OpenDialogXls.Execute then Archivo:= OpenDialogXls.FileName
  else exit;
  Excel.Workbooks.Open(Archivo);
  j:= 2;
  try
        repeat
          with InsertarProductos do
          begin
                Close;
                Parameters.ParamByName('@codplu').Value:= Excel.Cells[j,1].Value;
                Parameters.ParamByName('@codtrasval').Value:= Excel.Cells[j,2].Value;
                Parameters.ParamByName('@codfabricante').Value:= Excel.Cells[j,3].Value;
                Prepared:= True;
                ExecProc;
          end;
        inc(j);
        until Excel.Cells[j,2].Value = '';
        Excel.quit;
        ShowMessage(' El fichero de productos ha sido importado exitosamente');
  except
        ShowMessage(' !!!!! ATENCION !!!!! ' + chr(13) +
                                        ' El fichero no pudo ser importado' + chr(13) +
                                        ' Revise bien su estructura');
  end;
end;

Para exportar
Código:

procedure TFormMenu.otal4Click(Sender: TObject);
var
  Excel, Libro: Variant;
  i: integer;
begin
  Excel:=CreateOleObject('Excel.Application');
  Excel.Visible := False;
  Excel.DisplayAlerts:= False;
  Excel.WorkBooks.Add('C:\Archivos de programa\Tienda\Inventario.xlt');
  Excel.WorkBooks[1].WorkSheets[1].Name := 'Productos';
  Libro := Excel.WorkBooks[1].WorkSheets['Productos'];
  with Inventario do
  begin
        Close;
        Open;
  end;
  try
        Inventario.First;
        i:= 2;
        while not (Inventario.Eof) do
        begin
          Libro.Cells [i,1] := InventarioCodTrasval.Value;
          Libro.Cells [i,2] := InventarioDescripcionPLU.Value;
          Libro.Cells [i,3] := Inventariopreciocosto.Value;
          inc(i);
          Inventario.Next;
        end;
        Libro.SaveAs('C:\Archivos de programa\Tienda\Inventario actualizado');
        ShowMessage(' El fichero Inventario actualizado.xls ha sido creado exitosamente');
        Excel.Quit;
  except
        ShowMessage(' El fichero no pudo ser creado');
        Excel.Quit;
  end;
end;

Para la exportacion te recomiendo que trabajes con una plantilla de Excel porque te ahorraras el problema de tener que darle formato a los datos. Otra cosa que debes tener en cuenta es que en el uses de la Unit debes incluir Excel97, ComObj.

Espero que te sirva.

Saludos
Luis Garcia

_____________________________
La mejor manera de decir es hacer

santi33a 10-11-2005 15:52:33

Agradecido
 
Ok, Luis voy a probar y muchas gracias

Casimiro Notevi 10-11-2005 19:28:45

Pues llevo años haciendo exportaciones/importaciones y siempre han sido en formato texto, ocupa poco, es rápido, cómodo, lo puedes ver con cualquier editor y además es gratis. El formato xls es un formato propietario, complejo, cerrado, necesitas comprar el programa (o piratearlo) y además no puedes verlo con otro programa.

Aunque ultimamente estoy probando xml, que a fin de cuentas es texto formateado.

Xianto 10-11-2005 19:53:06

Hay una opción muy interesante a la hora de exportar pero depende de como tenga los locales el que abra el informe.
Con locales me resfiero a la configuración de la PC donde se abre el archivo, la cual puede tener como delimitador numerico de decimales la coma o el punto.

La idea es generar el reporte como si fuera una tabla html...

Código:

 
<table ....>
  <tr>
        <td>datos...</td>
  <tr>
</table>

Una vez generada, la tabla con los datos, simplemente la guardas como XLS y buala...

Pero recuerda, los locales son el problema !!!

Saludetes.

Casimiro Notevi 10-11-2005 23:28:31

Cita:

Empezado por Xianto
[...] La idea es generar el reporte como si fuera una tabla html...
[...]Una vez generada, la tabla con los datos, simplemente la guardas como XLS y buala [...]

¿xls?, te recomiendo esto. ;)

Xianto 11-11-2005 12:52:40

Pues simplemente para probar... genera un tabla HTML con los datos que quieras y guarda el fichero como pepe.xls...

Al darle un doble click el excel lo abrirá perfectamente, eso digo.

Con respecto a la propiedad del XLS, te dire que no es asi... dentro de las mejores especificaciones de como "armar" un xls se encuentran las del Open Officce.
Del MS Excel, nunca he encontrado especificaciones buenas, pero con las del Open Officce, hace tiempo que estamos generando reportes XLS, para nuestros clientes, sin componentes pirateados ó adquiridos legalmente, ya que a la larga todo se puede hacer, es solo cuestion de encontrar los datos técnicos y ponerle un poco de empeño :)

Saludetes

Casimiro Notevi 11-11-2005 13:15:48

:( algunos me entenderán, ya se cansa uno de repetir lo mismo una y otra vez...

Xianto 11-11-2005 15:30:51

Creo que la idea de un foro es discutir un tema hasta llegar al fondo y aprender cosas nuevas o enseñarlas...

Mira esto:

Cita:

Empezado por Casimiro Notevi
Pues llevo años haciendo exportaciones/importaciones y siempre han sido en formato texto, ocupa poco, es rápido, cómodo, lo puedes ver con cualquier editor y además es gratis.

Esto simplemente significa que nunca te has cruzado con la necesidad de enviar informacion a un servidor ADAIA o a un SAP, etc...

Hay gente (clientes) que piden Excel, Word, Access, DBF , XML, Texto, CSV, etc... para sus sistemas o para ellos.

Al igual que tu, creo que lo mejor siempre es un formato simple como el texto, pero la realidad demuestra que el paga tiene la razón, jejejeje...

Por esto a la hora de exponer, nuestros enfoques tienen que ser múltiples y ayudar a quien sea con la mayor informacion posible, para que el se encamine con "la" opción que mejor se adapte a sus necesidades !!!

Saludetes.

Casimiro Notevi 11-11-2005 21:29:31

No te quito la razón, la tienes, cuando es necesario hacer algo en el formato que sea, se hace.
Pero, en este caso, no se hace referencia a ningún formato específico, simplemente se pide hacer una sencilla exportación/importación de unos poquitos datos, para algo así creo que es recomendable algo sencillo, cómodo, rápido e independiente de otros programas. No hay necesidad alguna de usar formatos de otros programas. Opino, pienso, creo... que si me piden, por ejemplo, pasar un bmp a jpg desde delphi, lo más razonable es dar alguna solución cómoda e independiente de otros programas. En este caso, aconsejando el formato xls, es como si hubiese contestado: grabas el bmp en disco en formato gif, luego abres el photoshop (y lo compras o pirateas) y lo exportas a jpg, luego lo grabas a disco en ese formato, cierras el photoshop y abres el programa de importación donde podrás leer el archivo en el formato deseado, el jpg. Me parece una barbaridad poner un programa de por medio, cuando no es necesario.

Y vuelvo a repetir lo mismo, a veces hace falta y no queda más remedio que usar formatos de otros programas, por supuesto, y se hace.

En fin, es sólo una opinión y puedo estar equivocado en mi razonamiento, pero es lo que yo haría.

Saluditos.

santi33a 12-11-2005 12:49:54

Agradecido
 
Hola a todos, nunca pensee que fuera a generar tanta discusion el tema, no obstante muchas gracias a todos por la atención, en realidad no pensee que existieran tantas variantes, por lo que quisiera agregar que en mi caso especifico si se deben exportar e importar muchos datos y sobre todo tablas y sobre todo necesito que estas tablas no las puedan editar y modificar en el trayecto, es decir garantizar que se importe lo que se exporto.
sin mas Santiago

Casimiro Notevi 12-11-2005 20:28:25

Cita:

Empezado por santi33a
Hola a todos, nunca pensee que fuera a generar tanta discusion el tema, no obstante muchas gracias a todos por la atención, en realidad no pensee que existieran tantas variantes, por lo que quisiera agregar que en mi caso especifico si se deben exportar e importar muchos datos y sobre todo tablas y sobre todo necesito que estas tablas no las puedan editar y modificar en el trayecto, es decir garantizar que se importe lo que se exporto.
sin mas Santiago

Bueno, no es una discusión, solamente son comentarios sobre las experiencias de cada uno en el tema, siempre hay algo nuevo que puedes aprender :)

Lepe 13-11-2005 10:52:20

Cita:

Empezado por santi33a
sobre todo necesito que estas tablas no las puedan editar y modificar en el trayecto, es decir garantizar que se importe lo que se exporto.
sin mas Santiago

Pues hazlo en binario.

O bien te lo curras con un Tfile of Record, o bien usas TFileStream y lo grabas. Los campos que sean texto se verán en el archivo, encriptar esos datos creo que sería demasiado... no sé.

Así te olvidas de xls, pero ahora será un formato de archivo propietario (tuyo). Seguro que esta solución le gusta mucho a Casimiro :p :D :D ;)

saludos

Xianto 13-11-2005 18:23:13

Eso, responder entre todos nos ayuda a los que intentamos ayudar en este post, a aprender algo nuevo !

Definitivamente he aprendido algo de Casimiro Notevi, y es que hay que simplificar las respuestas para no llenar de informacion a alguien que solo necesita algo simple.

Y eso, es lo importante, solucionar sin complicaciones... mas alla que a algunos nos guste debatir y proponer soluciones mas complejas !

Saludetes !

Casimiro Notevi 13-11-2005 19:32:53

Cita:

Empezado por Lepe
Así te olvidas de xls, pero ahora será un formato de archivo propietario (tuyo). Seguro que esta solución le gusta mucho a Casimiro :p :D :D ;) saludos

Cuando envío datos por internet, siempre lo hago de forma encriptada y comprimida, en el otro lado lo descomprimo y desencripto y listo.

Acostumbro a usar algo simple, por ejemplo: Abbrevia que es un compresor/descompresor libre para tratamiento del formato estandar zip. Permite añadir un password para encriptar la información, como cualquier zip.

Uso software libre siempre que me es posible y formatos también estándares y libres. Y os puedo asegurar que no hace falta "complicarse la vida" con programas y formatos cerrados, hay soluciones libres para todo.

Lepe 13-11-2005 22:23:19

Cita:

Empezado por Casimiro Notevi
Y os puedo asegurar que no hace falta "complicarse la vida" con programas y formatos cerrados, hay soluciones libres para todo.

Estoy totalmente de acuerdo contigo.

saludos

walito 09-01-2006 21:55:12

Estuve leyendo el hilo entero y la verdad que los ejemlpos funcionaron Ok, agradesco a todos.
Ahora me surge algo que me hace falta, existe algo que me diga de antemano la cantidad de filas a leer del excel?
pregunto como para hacer una barra de progreso e ir mostrando lo que falta del archivo.

desde ya muchas gracias

walter


La franja horaria es GMT +2. Ahora son las 11:10:31.

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