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 01-08-2010
Avatar de Alvarus
Alvarus Alvarus is offline
Registrado
 
Registrado: ene 2007
Posts: 7
Poder: 0
Alvarus Va por buen camino
Question Como puedo importar un csv a MYSQL

Hola,
Estoy intentando importar un archivo csv a MYSQL desde Delphi, para esto estoy utilizando el objeto SqlQuery.
Cuando trato de llamar a mi query desde un botón me indica que tengo cinco errores:
Checking project dependencies...
Compiling Project1_ABCMysql.dproj (Debug configuration)
[DCC Error] ejemplo.pas(98): E2066 Missing operator or semicolon
[DCC Error] ejemplo.pas(98): E2029 'END' expected but string constant found
[DCC Error] ejemplo.pas(98): E2038 Illegal character in input file: '"' (#$22)
[DCC Error] ejemplo.pas(98): E2038 Illegal character in input file: '\' (#$5C)
[DCC Fatal Error] Project1_ABCMysql.dpr(5): F2063 Could not compile used unit 'ejemplo.pas'

El código es el siguiente:

Código Delphi [-]
ClientDataSet1.Close;
SQLDataset1.Close;

SqlQuery1.Close;
SqlQuery1.SQL.Clear;
SqlQuery1.SQL.Text:='LOAD DATA INFILE 'c:\\archivo.csv' INTO TABLE test.pruebas FIELDS TERMINATED BY ',' ENCLOSED BY '"'LINES TERMINATED BY '\n'ignore 1 lines;';
SqlQuery1.Active:=True

La instrucción SQL esta bien, puesto que ya lo he ejecutado en la BD.
Los errores hacen referencia a la instrucción:
SqlQuery1.SQL.Text:='LOAD DATA INFILE 'c:\\irnet.csv' INTO TABLE test.irnet FIELDS TERMINATED BY ',' ENCLOSED BY '"'LINES TERMINATED BY '\n'ignore 1 lines;';


Muchas gracias por cualquier ayuda y/o sugerencia

Estoy utilizando RAD Studio 2010.
Alvaro

Última edición por roman fecha: 01-08-2010 a las 05:16:58.
Responder Con Cita
  #2  
Antiguo 01-08-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola Alvarus, bienvenido al Club.

He puesto etiquetas [delphi] a tu mensaje para que quede mejor el formato. Así puedes ver más claramente que estás formando mal la cadena de texto de la instrucción SQL: debería aparecer todo en color naranja.

// Saludos
Responder Con Cita
  #3  
Antiguo 01-08-2010
Avatar de Alvarus
Alvarus Alvarus is offline
Registrado
 
Registrado: ene 2007
Posts: 7
Poder: 0
Alvarus Va por buen camino
Roman,
Gracias por el dato, pero lo que no se, es como Delphi maneja la instrucción del archivo que quiero subir, es decir 'c:\\archivo.csv', o como puedo pasarle ese parámetro al Query para que lo ejecute.

Gracias.

Alvaro
Responder Con Cita
  #4  
Antiguo 01-08-2010
Avatar de Alvarus
Alvarus Alvarus is offline
Registrado
 
Registrado: ene 2007
Posts: 7
Poder: 0
Alvarus Va por buen camino
Ya pude solucionar el problema de la cadena que hace referencia al archivo, esta debería quedar así:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientDataSet1.Close;
SQLDataset1.Close;

SqlQuery1.Close;
SqlQuery1.SQL.Clear;
SqlQuery1.SQL.Text:='LOAD DATA INFILE ''c:irnet.csv'' INTO TABLE test.irnet FIELDS TERMINATED BY '','' ENCLOSED BY ''"''LINES TERMINATED BY ''\n''ignore 1 lines;';
//SqlQuery1.SQL.Text:='LOAD DATA INFILE "c:\\irnet.csv" INTO TABLE test.irnet FIELDS TERMINATED BY "," ENCLOSED BY """LINES TERMINATED BY "\n" ignore 1 lines;';
SqlQuery1.Active:=True

end;

Sin embargo, cuando se ejecuta la aplicación, tengo el siguiente mensaje de error:
Raised exception class EDatabaseError with message 'SQLQUERY1: cursor not returned from Query';
SQLQuery1: Cursor not returned from Query



Agradeceré cualquier ayuda y/o sugerencia.
Gracias.
Alvarus
Responder Con Cita
  #5  
Antiguo 01-08-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
En lugar de poner

Código Delphi [-]
SqlQuery1.Active:=True

debes poner

Código Delphi [-]
SqlQuery1.ExecSQL;

Esto es así porque la consulta que estás usando (LOAD DATA...) no devuelve un cursor, esto es, un conjunto de registros.

// Saludos
Responder Con Cita
  #6  
Antiguo 02-08-2010
Avatar de Alvarus
Alvarus Alvarus is offline
Registrado
 
Registrado: ene 2007
Posts: 7
Poder: 0
Alvarus Va por buen camino
Thumbs up Solucionado !!!

Hola,
El problema lo solucione cambiando lo siguiente en mi código:

Código Delphi [-]
SqlQuery1.SQL.Text:='LOAD DATA INFILE ''c:file.csv'' INTO TABLE test.table FIELDS TERMINATED BY '','' ENCLOSED BY ''"''LINES TERMINATED BY ''\n''ignore 1 lines;';
SqlQuery1.Active:=True;




Estas líneas fueron cambiadas por:

Código Delphi [-]
SQLQuery1.SQL.Add('LOAD DATA INFILE ''c:file.csv'' INTO TABLE test.table FIELDS TERMINATED BY '','' ENCLOSED BY ''"''LINES TERMINATED BY ''\n''ignore 1 lines;');
   SQLQuery1.ExecSQL(true);




Para aquel que necesite un ejemplo del código final es este:

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
    ClientDataSet1.Close;
    SQLDataSet1.Close;
    SQLQuery1.SQL.Clear;
    SQLQuery1.SQL.Add('LOAD DATA INFILE ''c:irnet.csv'' INTO TABLE test.irnet FIELDS TERMINATED BY '','' ENCLOSED BY ''"''LINES TERMINATED BY ''\n''ignore 1 lines;');
    SQLQuery1.ExecSQL(true);
    SQLDataSet1.Open;
    ClientDataSet1.Open;
 end;

Claro quedaría mucho mejor si pudiera enviar un mensaje que le muestre al usuario cuantos registros subió con el archivo, pero bueno supongo que son detalles que ya ire encontrando en Delphi 2010.
Saludos
Alvarus
Responder Con Cita
  #7  
Antiguo 21-06-2011
Avatar de alej.villa
alej.villa alej.villa is offline
Miembro
NULL
 
Registrado: may 2011
Ubicación: Caracas, Venezuela
Posts: 76
Poder: 13
alej.villa Va por buen camino
estoy tratando de hacer algo igual pero no se mucho de SQL podrias explicar un poco la linea de SQL para entenderla mejor y gracias!
Responder Con Cita
  #8  
Antiguo 22-06-2011
Avatar de Alvarus
Alvarus Alvarus is offline
Registrado
 
Registrado: ene 2007
Posts: 7
Poder: 0
Alvarus Va por buen camino
Hola Alej,
Te explico lo que hice:
Load data infile = le indico al programa de que archivo debe subir la informacion.
Into table = indico en que base de datos y en que tabla voy a guardar los datos, recuerda la base_de_datos.tabla
FIELDS TERMINATED BY '','' = Aca indico que los campos estan separados por comas en el archivo csv.
ENCLOSED BY ''"''= se indica que los campos estan entre comillas.
LINES TERMINATED BY ''\n'' = indico el salto de lineas, es decir comienza un nuevo registro en el archivo csv.
ignore 1 lines;' = Indico que ignore la primera linea, por lo general estan los nombres de los campos.
Para mayor información te recomiendo ver la documentación de MYSQL.
Saludos
Alvarus
Responder Con Cita
  #9  
Antiguo 22-06-2011
Avatar de alej.villa
alej.villa alej.villa is offline
Miembro
NULL
 
Registrado: may 2011
Ubicación: Caracas, Venezuela
Posts: 76
Poder: 13
alej.villa Va por buen camino
Gracias por la respuesta, ahora bien si mi archivo no tiene comas, ni comillas como puedo aplicar tu codigo?
mi archivo esta en excel y por ende no trae campos que terminen con ',' ni encerrados en ""
aun asi necesito importarlo a una base de datos en MS SQL Server utilizando como intermediario el lenguaje de programacion Delphi 7.

Podrias ayudarme o si sabes de algun manual, pagina web para orientarme te lo agradeceria mucho.!
Responder Con Cita
  #10  
Antiguo 22-06-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por alej.villa Ver Mensaje
aun asi necesito importarlo a una base de datos en MS SQL Server utilizando como intermediario el lenguaje de programacion Delphi 7.
Si te fijas, el título de este tema es: "Como puedo importar un csv a MYSQL y las respuestas aluden a una instrucción específica de MySQL. Habría que ver si MS SQL Server tiene una instrucción similar.

// Saludos
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
Como puedo conectar delphi6+MySQL 5.0.26 comba MySQL 7 10-03-2008 11:37:32
PHP: Importar / Exportar Mysql dmassive PHP 5 21-01-2006 01:16:25
como puedo restaurar un archivo .sql a una base de datos en mysql por delphi Shidalis Varios 8 18-08-2005 21:24:14
Como puedo mostrar una lista de bases de datos en un servidor MySQL con Zeos? guillote MySQL 0 27-07-2004 03:32:20
Importar Base_Datos a MySql joselitros MySQL 2 19-05-2004 03:37:33


La franja horaria es GMT +2. Ahora son las 14:28:52.


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