FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin
Posts: 66
Joined: Thu Jan 03, 2013 06:13 PM
LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin
Posted: Tue Mar 26, 2013 01:07 AM
Srs. del foro, necesito hacer un append from con mysql, pero el siguiente Query:

Code (fw): Select all Collapse
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?
Fivewin 12.04 + xHarbour 1.2.1 + BCC582



Nada como Fivewin, odio visual basic, visual studio y todas las porquerías visual.
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin
Posted: Tue Mar 26, 2013 02:42 AM

Hola

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

Posts: 389
Joined: Wed Nov 29, 2006 01:51 PM
Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin
Posted: Tue Mar 26, 2013 10:27 AM

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.

Posts: 66
Joined: Thu Jan 03, 2013 06:13 PM
Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin
Posted: Tue Mar 26, 2013 06:04 PM

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?

Fivewin 12.04 + xHarbour 1.2.1 + BCC582



Nada como Fivewin, odio visual basic, visual studio y todas las porquerías visual.
Posts: 389
Joined: Wed Nov 29, 2006 01:51 PM
Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin
Posted: Tue Mar 26, 2013 06:19 PM

Leo,
chequea q pusiste el path + tutxt
salu2, Ariel.

Posts: 66
Joined: Thu Jan 03, 2013 06:13 PM
Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin
Posted: Tue Mar 26, 2013 07:16 PM
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 (fw): Select all Collapse
//----------------------------------------------------------------------------//
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
//----------------------------------------------------------------------------//
Fivewin 12.04 + xHarbour 1.2.1 + BCC582



Nada como Fivewin, odio visual basic, visual studio y todas las porquerías visual.
Posts: 883
Joined: Tue Oct 11, 2005 11:57 AM
Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin
Posted: Wed Mar 27, 2013 01:59 PM

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

;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 2 * 1 TB NVME M.2, GTX 1650
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin
Posted: Wed Mar 27, 2013 03:28 PM

Adolfo

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

Posts: 883
Joined: Tue Oct 11, 2005 11:57 AM
Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin
Posted: Wed Mar 27, 2013 03:46 PM

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

;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 2 * 1 TB NVME M.2, GTX 1650
Posts: 66
Joined: Thu Jan 03, 2013 06:13 PM
Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin
Posted: Wed Mar 27, 2013 08:59 PM

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!

Fivewin 12.04 + xHarbour 1.2.1 + BCC582



Nada como Fivewin, odio visual basic, visual studio y todas las porquerías visual.
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin
Posted: Fri Mar 29, 2013 12:38 AM

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..

Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "
Posts: 883
Joined: Tue Oct 11, 2005 11:57 AM
Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin
Posted: Fri Mar 29, 2013 02:11 AM

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

;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 2 * 1 TB NVME M.2, GTX 1650
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin
Posted: Fri Mar 29, 2013 06:49 PM

perfecto Adolfo,
gracias.

Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin
Posted: Fri Apr 05, 2013 12:04 AM

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

:(

____________________

Paco
Posts: 883
Joined: Tue Oct 11, 2005 11:57 AM
Re: LOAD DATA [LOCAL] INFILE 'file_name.txt' en tdolphin
Posted: Fri Apr 05, 2013 11:52 AM

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

;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 2 * 1 TB NVME M.2, GTX 1650