PDA

Ver la Versión Completa : de excel a delphi


ddd_ddd
27-09-2005, 04:47:03
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.

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


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;

roman
27-09-2005, 06:01:58
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 (http://www.clubdelphi.com/foros/showthread.php?t=2696) 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

nosferatu177
28-06-2007, 22:10:29
hola oye roman en mi caso quiero exportar datos de un archivo de excel a mysql; ya intente con el 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 :o

roman
28-06-2007, 22:24:47
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:


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

Alexis De la Cr
26-06-2008, 17:45:28
Rescatando un poco este tema

navegando por internet encontre esto

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