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 27-09-2005
ddd_ddd ddd_ddd is offline
Miembro
 
Registrado: sep 2005
Posts: 60
Poder: 19
ddd_ddd Va por buen camino
de excel a delphi

tengo el siguiente codigo para transferir la hoja de claculo excel a la tabla de delphi. pero con 50mil filas y 12 columnas se tarda mas de 30 minutos.


¿alguien sabe como hacer la tranferencia en el menor tiempo posible?


Código Delphi [-]
 procedure TForm2.BitBtn1Click(Sender: TObject);
 var
   appExcel: Variant;
   i, j: integer;
   sql: String;
   x: string;
 const
   numCampos: integer = 12;
   numFilas: integer = 50000;
 begin
   appExcel := CreateOleObject('Excel.Application');
   appExcel.WorkBooks.Open('C:\archivo.xls');
   query1.active:=false;
   for i := 2 to (numfilas + 2) do // en la fila 1 esta el nombre del campo
   begin
     sql := '';
     for j := 1 to numCampos do
     begin
       x := appExcel.WorkBooks[1].Worksheets[1].Cells[i, j];
       sql := sql + x + '''';
       if j <> numCampos then
         sql := sql + ',''';
     end;
     query1.SQL.Clear;
     query1.SQL.Add('insert into tabla values(''' + sql + ')');
     try
       query1.ExecSQL;
     except
       showmessage('no se pudo transferir todos los registros') ;
     end;
   end;
   showmessage('ya se han transferido los datos');
   appExcel.Quit;
   appExcel := Unassigned;
 end;

Última edición por dec fecha: 27-09-2005 a las 05:11:12. Razón: ¡¡Encerrad el código fuente entre las etiquetas [DELPHI] ... [/DELPHI]!!
Responder Con Cita
  #2  
Antiguo 27-09-2005
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
Usar OLE para acceder a Excel puede, en efecto, ser sumamente lento. Yo te recomiendo que intentes usando ADO. En el hilo Llevar desde Excel a una BD paradox puedes ver cómo acceder a una hoja de Excel como si de una tabla se tratase usando ADO. El hilo habla de una transferencia de datos a una tabla Paradox aunque esto último es hasta cierto punto irrelevante; lo que hagas con los datos que te proporciona el ADODataSet ya depende de tí.

// Saludos
Responder Con Cita
  #3  
Antiguo 28-06-2007
nosferatu177 nosferatu177 is offline
Miembro
 
Registrado: mar 2007
Posts: 42
Poder: 0
nosferatu177 Va por buen camino
de excel a mysql

hola oye roman en mi caso quiero exportar datos de un archivo de excel a mysql; ya intente con el
Código SQL [-]
load data infile...
, pero dice q no encuentra el archivo(en este caso el archivo es un .cvs), encontre este hilo y al implementarlo me marca: acceso denegado , como puedo enviarle el user y password?, espero haber formulado bien la pregunta
Responder Con Cita
  #4  
Antiguo 28-06-2007
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
El archivo debe estar en el servidor, accesible a todo mundo y el usuario con el que te conectas a mysql debe tener habilitado el privilegio FILES. Si no, puedes añadir la directiva LOCAL:

Código SQL [-]
load data local infile 'ruta\al\archivo.csv
...

De esta forma, el archivo lo tienes del lado del cliente. Tiene la desventaja de ser un poco más lento porque el cliente primero manda el archivo al servidor y luego procesa el load data.

// Saludos
Responder Con Cita
  #5  
Antiguo 26-06-2008
Alexis De la Cr Alexis De la Cr is offline
Miembro
 
Registrado: may 2006
Ubicación: Puebla
Posts: 124
Poder: 19
Alexis De la Cr Va por buen camino
Rescatando un poco este tema

navegando por internet encontre esto

Cita:
Por razones de seguridad, cuando se leen ficheros de texto del servidor, los ficheros deben residir en el directorio de la base de datos o tener acceso para todos. Además, para usar LOAD DATA INFILE en ficheros del servidor, se debe poseer el privilegio FILE en el ordenador servidor.

Desde MySQL 3.23.49 y MySQL 4.0.2 (4.0.13 en Windows), LOCAL funcionará sólo si el servidor y el cliente han sido configurados para admitirlo. Por ejemplo, si mysqld se ha arrancado con --local-infile=0, LOCAL no funcionará.
mi duda es local-infile es una directiva o es un comando? necesito cambiar ese parametro para que mi servidor acepte el comando LOCAL.

y si es una directiva, cual es el archivo de configuracion de mysql?

Gracias por la Respuesta
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


La franja horaria es GMT +2. Ahora son las 03:40:32.


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