Page 1 of 2

LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin

PostPosted: Tue Mar 26, 2013 1:07 am
by Leo
Srs. del foro, necesito hacer un append from con mysql, pero el siguiente Query:

Code: Select all  Expand view
LOAD DATA [LOCAL] INFILE 'file_name.txt'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [FIELDS
        [TERMINATED BY '\t']
        [[OPTIONALLY] ENCLOSED BY '']
        [ESCAPED BY '\\' ]
    ]
    [LINES
        [STARTING BY '']    
        [TERMINATED BY '\n']
    ]
    [IGNORE number LINES]
    [(col_name,...)]


retorna el mensaje que "Este programa ha dejado de funcionar", qué ocurre?

Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin

PostPosted: Tue Mar 26, 2013 2:42 am
by Daniel Garcia-Gil
Hola

creo que el archivo debe estar alojado en la parte del servidor y no de forma local

Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin

PostPosted: Tue Mar 26, 2013 10:27 am
by Ariel
Leo,
Efectivamente como dice Daniel, el archivo de salida se genera en el servidor, seguramente no tendras acceso al mismo, la solucion que encontré fue crear una carpeta TEMPORAL, publica en el servidor y enviar ahi el archivo resultante y luego levantarlo desde cualquier terminal
Espero te sirva,
Salu2, Ariel.

Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin

PostPosted: Tue Mar 26, 2013 6:04 pm
by Leo
Cree una carpeta pública en mi servidor Ubuntu 12.04, y aún así persiste el error... estoy confundido, la aplicación debo ejecutarla desde la carpeta que tengo asignada a sistemas en mi servidor también?

Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin

PostPosted: Tue Mar 26, 2013 6:19 pm
by Ariel
Leo,
chequea q pusiste el path + tutxt
salu2, Ariel.

Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin

PostPosted: Tue Mar 26, 2013 7:16 pm
by Leo
El Path y el archivo son correctos, el programa lo carga correctamente, sólo que cuando termina me arroja el mensaje al intentar refrescar el xbrowse. ¿Será por que es un archivo plano con más de 250.000 registros?

Codigo Fuente:

Code: Select all  Expand view
//----------------------------------------------------------------------------//
Function Txt2MySQL(oDlg)
        LOCAL   aDBF := {"EMPLEADOS" }
      LOCAL   aHOJAS:= { "Hoja1" }
        Local   aHeaders:={},aCampos:={}
        Local   oQry
        Public  xValue:=0,Start_Row:=2,cXlsFile:="",o100,o102,_Mensaje:="",x,cDrive:=""

        Set Deleted On
       Set Date British
        Set Century on
       Set Epoch to 2000

        cXlsFile:=cGetFile("\PLAEST*.TXT", "Seleccione Archivo")
        If empty( cXlsFile )
            Return Nil
        Else
            cFile:=cXlsFile
            xValue:=Len(Alltrim(cFile))
      Endif
        cFile:=Substr(cFile,3,xValue)
Return cFile
*---------------------------------------------------------------------------------
Function QryExecute(oBrw,cFile)
Local oQry,cDrive
cDrive:=CurDrive()+":\"
oQry:=oConected:Query( "
LOAD DATA LOCAL INFILE '"+cDrive+Alltrim(cFile)+"' INTO TABLE sabana Columns TERMINATED BY '|' Ignore 1 lines" )
oBrw:Refresh()
Return Nil
//----------------------------------------------------------------------------//

Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin

PostPosted: Wed Mar 27, 2013 1:59 pm
by Adolfo
La solucion al problema es super facil

Local cFile:="c:\\traspaso.txt"

oSvr:Execute("LOAD DATA LOCAL INFILE '" + cFile + "' INTO TABLE xboss.enccambio FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n'")

Asumiendo que oSvr es el server de conexion de la tDolphin
Probado y funcionando al 100% en un server Fedora Core 16 y Centos, desde clientes Windows XP y Windows 7

NO OLVIDEN EL DOBLE \\ en las rutas que le pasan a MYSQL en LINUX

Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin

PostPosted: Wed Mar 27, 2013 3:28 pm
by Daniel Garcia-Gil
Adolfo

Gracias, podrias aclararme si el archivo esta en local o remoto?

Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin

PostPosted: Wed Mar 27, 2013 3:46 pm
by Adolfo
Daniel....

Yo genero ingresos masivos de nuevos registros hacia un servidor remoto. Tiene una IP publica y yo solo accedo por el puerto 3306 al servidor LINUX que se encuentra en esa sucursal de la empresa.

Tengo en mi lan, otro servidor Linux. El principal de la casa matriz. El usuario genera un archivo de texto (usando la rutina oQry:Export( EXP_TEXT, "C:\TRASPASO" )) y genero mi archivo TXT que luego subire al servidor REMOTO.

por eso tengo declarado el archivo de traspaso asi
Local cFile:="c:\\traspaso.txt"
Como veras se encuentra en mi disco duro LOCAL, y le escribo las 2 \\

Creo mi conexion con tDolphin hacia el servidor remoto

CONNECT oSvrRem;
HOST "200.200.200.200" ;
USER "userxxxxx" ;
PASSWORD "passxxxxxx" ;
DATABASE "mibase"

y ejecuto mi carga.....

oSvrRem:Execute("LOAD DATA LOCAL INFILE '" + cFile + "' INTO TABLE mibase.mitabla FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n'")

Y acabo de enviar los datos.
Es muchismo mas rapido y eficiente que si copiara los datos uno a uno, ocupa menos ancho de banda, y va de maravilla.

Desde Chile
Adolfo

Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin

PostPosted: Wed Mar 27, 2013 8:59 pm
by Leo
Adolfo, Daniel y Ariel, muchas gracias, nuevamente el foro es una instancia que puedo resolver problemas, el programa funciona excelente con servidor remoto y carga local y con carga desde el mismo servidor remoto. Genial, Gracias!

Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin

PostPosted: Fri Mar 29, 2013 12:38 am
by sysctrl2
Daniel, Adolfo , colegas,

se puede hace un txt con datos de un DBF y despues pasarlo a mysql?

que estructura debe de tener el texto ?

esto haria mas facil la migracion de dbf a sql.

saludos..

Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin

PostPosted: Fri Mar 29, 2013 2:11 am
by Adolfo
SysCtrl2

Es en definitiva un simple archivo CSV, separado por comas o punto y coma, enter al final de linea.
El lunes te publico un ejemplo completo.

Saludos
Desde Chile
Adolfo

Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin

PostPosted: Fri Mar 29, 2013 6:49 pm
by sysctrl2
perfecto Adolfo,
gracias.

Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin

PostPosted: Fri Apr 05, 2013 12:04 am
by Francisco Horta
A mi me va bien asi:

LOAD DATA LOCAL INFILE 'p:/temp/day.csv' INTO TABLE arts COLUMNS TERMINATED BY ',' IGNORE 1 LINES

pero aqui debe haber un orden en el archivo a importar .csv y los campos de la tabla,

Aqui ahora me resulta una necesidad, a ver si Adolfo me puedes ayudar, tengo una tabla con 40 campos y un .csv con 4 campos y esos 4 campos del .csv son en mi tabla los campos de la posicion 1,3,23,28 como lo hago?

probe asi sin exito:

LOAD DATA INFILE 'p:/temp/valores.csv' INTO TABLE arts (id,nombre,costo,unitario) FIELDS TERMINATED BY ',' IGNORE 1 LINES

al definirle los campos (id,nombre,costo,unitario) la sentencia TERMINATED BY ',' hace que no funcione
algo estoy haciendo mal?

pero si lo hago asi:

LOAD DATA INFILE 'p:/temp/valores.csv' INTO TABLE arts (id,nombre,costo,unitario)
funciona pero me agrega todos los datos del .csv en la columna id

:(
Mi necesidad es espcificar los campos en los que se va a actualizar mi tabla y es una lata crear columnas vacias en excel para saber la posicion de cada campo..
gracias
saludos

Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin

PostPosted: Fri Apr 05, 2013 11:52 am
by Adolfo
Francisco.

Que version de MYSQL usas, si es anterior a la 5.0.3, deberas actualizarla.

En todo caso a mi me funciona con
LOAD DATA LOCAL INFILE '" + cFile + "' INTO TABLE mibase.mitabla FIELDS (campo1,campo2,campo3) TERMINATED BY ';' LINES TERMINATED BY '\r\n

Siempre y cuando exista completa correspondencia entre el TXT y los campos aludidos. Con enter al final de la linea. Y sin declarar linea de titulos o nombres de campo.
Si no te funciona puedes probar asi.

LOAD DATA LOCAL INFILE '" + cFile + "' INTO TABLE mibase.mitabla FIELDS (campo1,@dummy,campo2,@dummy,campo3) TERMINATED BY ';' LINES TERMINATED BY '\r\n

Donde @dummy es un valor inexistente, vale decir que al agregar el campo, asume el valor por defecto especificado en la tabla de mysql. dummy no se inicializa ni se declara, es propio de Mysql

Prueba y me comentas.

PD: Donde tienes el servidor MYSQL, en un Win o en Linux ?

Desde Chile
Adolfo