Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-01-2009
odrack odrack is offline
Miembro
 
Registrado: feb 2008
Posts: 167
Poder: 17
odrack Va por buen camino
Exportar con sql

Un saludo a todos en el foro.

Tengo un pequeño problemita con esta consulta (SQL).
Código Delphi [-]
    query2.Close;
    query2.SQL.Clear;
    query2.SQL.add(' select numreferencia, clvarticulo, descripcion, fecharecepcion, cantidad');
    query2.sql.add(' INTO OUTFILE "C:/'+edit2.text+'.csv" FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY ","');
    query2.SQL.add(' LINES TERMINATED BY "\n"');
    query2.SQL.add(' FROM '+TBL+' where (fecha between '+quotedstr(fecha1)+' and '+quotedstr(fecha2)+')');
    query2.ExecSQL;

Esto hace que me exporte un archivo a excel (*.CSV) por medio de TQuery.
Con esto no hay ningun problema ya que lo ejecuta bien, el problema que tengo es que se guarda el archivo en la maquina servidor y no en mi equipo local, debo aclarar que es una aplicación que trabaja en red. ¿Como puedo guardar el archivo en mi equipo y no en el servidor?

Esto lo hago asi ya que en codegear delphi 32 no he encontrado los archivo para poder exportarlos por medio de TExcelAplication

Saludos!!
Responder Con Cita
  #2  
Antiguo 14-01-2009
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Este hilo puede servirte: http://www.clubdelphi.com/foros/showthread.php?t=62307

En cuanto a los componentes Servers, como TExcelApplication, la documentación más completa la encontrarás en las páginas de MSDN, ya que son envolturas de clases de Microsoft adaptadas a Delphi Win32.

Saludos.

Al.

Última edición por Al González fecha: 14-01-2009 a las 20:08:23.
Responder Con Cita
  #3  
Antiguo 14-01-2009
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
hola, puedes exportarlo directamente a formato .xls

Código Delphi [-]
     q.Active := false;
     q.SQL.Text := 'select * into ["Excel 8.0;Database=c:\test.xls"].[hoja1] from tabla'; 
     q.ExecSQL;

y la ruta sera relativa (aunque no estoy seguro) a tu aplicación.
Responder Con Cita
  #4  
Antiguo 14-01-2009
odrack odrack is offline
Miembro
 
Registrado: feb 2008
Posts: 167
Poder: 17
odrack Va por buen camino
Saludos

He visto las dos formas y la opcion de Al González trabaja con Interbase y yo trabajo con MySQL, y no he podido hacer mucho con esto y se le agradece la ayuda, en cuanto al codigo de coso
Código Delphi [-]
 q.Active := false;
     q.SQL.Text := 'select * into ["Excel 8.0;Database=c:\test.xls"].[hoja1] from tabla'; 
     q.ExecSQL;

me manda un error aqui ["Excel 8.0;Database=c:\test.xls"].[hoja1] from usuarios.

La version que ultilizo de excel es office excel 2007, tiene algo que ver??
Responder Con Cita
  #5  
Antiguo 14-01-2009
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
q raro, a mi me funciona asi tal cual y no me ha fallado...no tendras algun errorcillo de sintaxis? quiza sea lo del Excel 2007
Responder Con Cita
  #6  
Antiguo 14-01-2009
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por odrack Ver Mensaje
Saludos

He visto las dos formas y la opcion de Al González trabaja con Interbase y yo trabajo con MySQL, y no he podido hacer mucho con esto...
Oiga señor, ¿leyó el mensaje #8 de ese hilo?


Cita:
Empezado por odrack Ver Mensaje
...en cuanto al codigo de coso
Código Delphi [-]
 q.Active := false;
     q.SQL.Text := 'select * into ["Excel 8.0;Database=c:\test.xls"].[hoja1] from tabla'; 
     q.ExecSQL;

me manda un error aqui ["Excel 8.0;Database=c:\test.xls"].[hoja1] from usuarios.

La version que ultilizo de excel es office excel 2007, tiene algo que ver??
No creo que MySQL acepte esa sintaxis, probablemente sólo funciona con SQL Server. Creo que Coso pensó que lo estabas haciendo con SQL Server, en parte porque no mencionaste al principio el motor usado.

Saludos.

Al.
Responder Con Cita
  #7  
Antiguo 14-01-2009
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
no, no me fije en el motor, pero creia que era algo general que se puede tratar una hoja de excel como base de datos, siempre que especifiques el driver. Al menos, esta es la manera general de especificar un driver y un fichero...no recuerdo de donde lo saque X/
Responder Con Cita
  #8  
Antiguo 14-01-2009
odrack odrack is offline
Miembro
 
Registrado: feb 2008
Posts: 167
Poder: 17
odrack Va por buen camino
Hola a todos.

Si habia visto el hilo y el mensaje #8, solo que con el codigo que tengo funciona igual a diferencia que lo hago desde un TQuery y no un dataset como lo muestran, aun que no estoy seguro que el ejemplo que mencionan lo guarde en mi equipo y no en el servidor, ya que trabajo en una aplicación clietne servidor.

una disculpa por no haber especificado el motor de base de datos , seguire investigando una forma de guardar la información en mi equipo!!

Saludos
Responder Con Cita
  #9  
Antiguo 15-01-2009
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por odrack Ver Mensaje
...a diferencia que lo hago desde un TQuery y no un dataset como lo muestran, aun que no estoy seguro que el ejemplo que mencionan lo guarde en mi equipo y no en el servidor, ya que trabajo en una aplicación clietne servidor....
Bueno, aquí lo que habría que conocer es que un TQuery es un TDataSet (polimorfismo), por lo que la función SaveToCsv que sugiero (o algún código similar) te funcionará perfectamente con un TQuery, un TTable, un TADOQuery, etc. (porque todos son derivados de la clase TDataSet).

Y respecto a la otra inquietud, que podrás guardar el archivo CSV en la ruta que tú le indiques (parámetro AsciiFilePath), mientras esa ruta sea accesible por tu programa, claro está, y sin importar dónde se encuentre el servidor de la base de datos.

Espero haber orientado un poco más.

Saludos.

Al.
Responder Con Cita
  #10  
Antiguo 15-01-2009
odrack odrack is offline
Miembro
 
Registrado: feb 2008
Posts: 167
Poder: 17
odrack Va por buen camino
Hola !!!

Creo que no tenia entendido bien lo del dataset, pero he investigado un poco
y aun sigo con el mismo problema, mi unica teoria es la forma en la que me conecto a mi base de datos, quiero suponer que es por que utilizo ODBC para mi conexion y es ahi donde los datos se estan guardando en el servidor ya que cuando ejecuto el sql me guarda los datos en el servidor, aun no entiendo bien como funciona la sentencia que ejecuto.

Tambien me he di cuenta que por defaul en la instalación de delphi 32 no vienen los componentes listos para usarse y tube que abrir los paquetes para su instalación, ahora ya he instalado los componentes para office.

espero que con ExcelApplication1 tenga un mejor resultado

Saludos!!!
Pd. espero haber me dado a entender
Responder Con Cita
  #11  
Antiguo 15-01-2009
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Mi sugerencia con los mensajes anteriores es prescindir de la cláusula "INTO OUTFILE", y traerte la consulta como normalmente lo harías si quisieras, por ejemplo, mostrar el listado en un DBGrid. Entonces, ya abierta esa consulta (y con Open, en lugar de ExecSQL), llamar a la función SaveToCSV o alguna similar a las del hilo referido.

Basándome en tu código original, quedaría más o menos así:
Código Delphi [-]
query2.Close;
query2.SQL.Clear;
query2.SQL.add(' select numreferencia, clvarticulo, descripcion, fecharecepcion, cantidad');
query2.SQL.add(' FROM '+TBL+' where (fecha between '+quotedstr(fecha1)+' and '+quotedstr(fecha2)+')');
query2.Open;
SaveToCSV (query2, 'C:\' + Edit2.Text + '.csv', '"', ',');

Temo que la cláusula INTO OUTFILE (que para mi es una cosa desconocida porque no trabajo con MySQL) siempre te creará el archivo en donde se encuentre el servidor o la base de datos, no localmente. Por ello la alternativa de cargar una consulta "normal" y luego exportarla con alguna función de utilería como SaveToCSV (incluso es posible que existan otras que exporten directamente a Excel).

Saludos.

Al.
Responder Con Cita
  #12  
Antiguo 15-01-2009
odrack odrack is offline
Miembro
 
Registrado: feb 2008
Posts: 167
Poder: 17
odrack Va por buen camino
Saludos!!

Tienes razon, cuando ejecutas la sentencia into outfile la ejecuta donde se encuentra el servidor. He resuelto el problema instalando Texcelapplication y trabajar directamente con un Tquery como buscador y texcelapplication para exportar.

Gracias a todos por la ayuda!!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Exportar en una DLL en C++ Ege C++ Builder 1 05-04-2008 11:22:34
Exportar *.gdb lachooo Firebird e Interbase 1 19-10-2006 12:38:58
exportar a pdf KeyMan HTML, Javascript y otros 2 20-04-2006 00:27:08
Exportar a PDF Coco_jac Varios 1 02-06-2005 22:35:42
Exportar A D7 erasmorc Servers 10 24-05-2005 23:02:15


La franja horaria es GMT +2. Ahora son las 17:37:27.


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
Copyright 1996-2007 Club Delphi