migrar DBF para MySql
Enviado: 21 Mar 2014 12:34
ola amigos
estou usando a seguinte query:
INSERT_QUERY := OSERVER:QUERY( 'LOAD DATA LOCAL INFILE "CAMPOS.TXT" INTO TABLE CAMPOS;')
tenho uma tabela chamada CAMPOS.DBF montei um programa para criar o arquivos TXT e logo depois executar a query, os dados estão gravando OK mas com uma restrição, na tabela CAMPOS.DBF tenho um campo que é Memo e o mesmo esta desta forma:
a cada {|M,X| é uma linha dentro do campo MEMO e seu gerar o arquivo TXT ao executar a query ira criar um registro invalido com cada linha que tiver no campo MEMO, isso tambem acontece no arquivo TXT, tentei fazer o seguinte:
FDPREVAL := ALLTRIM( STRTRAN( CAMPOS->FD_PREVAL, CHR(13)+CHR(10),"CHR(13)+CHR(10)" ) )
assim grava, só que no MySQL o campo LONGTEXT não grava linha por linha como esta no campo MEMO do DBF.
como faço para gravar um campo MEMO com varias linhas no campo LONGTEXT no MySql usando um arquivo TXT
aqui esta a parte do programa que estou tentando fazer a conversão
se alguém puder ajudar, agradeço
estou usando a seguinte query:
INSERT_QUERY := OSERVER:QUERY( 'LOAD DATA LOCAL INFILE "CAMPOS.TXT" INTO TABLE CAMPOS;')
tenho uma tabela chamada CAMPOS.DBF montei um programa para criar o arquivos TXT e logo depois executar a query, os dados estão gravando OK mas com uma restrição, na tabela CAMPOS.DBF tenho um campo que é Memo e o mesmo esta desta forma:
{|M,X| X[3]:VarPut(VAL(SUBSTR(M:VarGet(),5,1))*3 ),X[3]:Assign,X[3]:UpdateBuffer(),X[3]:Display(),.T.}
{|M,X| X[3]:VarPut(VAL(SUBSTR(M:VarGet(),4,1))+X[3]:VarGet()),X[3]:Assign,X[3]:UpdateBuffer(),X[3]:Display(),.T.}
{|M,X| X[3]:VarPut(VAL(SUBSTR(M:VarGet(),3,1))*3+X[3]:VarGet()),X[3]:Assign,X[3]:UpdateBuffer(),X[3]:Display(),.T.}
a cada {|M,X| é uma linha dentro do campo MEMO e seu gerar o arquivo TXT ao executar a query ira criar um registro invalido com cada linha que tiver no campo MEMO, isso tambem acontece no arquivo TXT, tentei fazer o seguinte:
FDPREVAL := ALLTRIM( STRTRAN( CAMPOS->FD_PREVAL, CHR(13)+CHR(10),"CHR(13)+CHR(10)" ) )
assim grava, só que no MySQL o campo LONGTEXT não grava linha por linha como esta no campo MEMO do DBF.
como faço para gravar um campo MEMO com varias linhas no campo LONGTEXT no MySql usando um arquivo TXT
aqui esta a parte do programa que estou tentando fazer a conversão
SELECT('CAMPOS')
CAMPOS->( DBGOTOP() )
DO WHILE !CAMPOS->( EOF() )
FDPREVAL := ALLTRIM(STRTRAN(CAMPOS->FD_PREVAL, CHR(13)+CHR(10),"CHR(13)+CHR(10)"))
FDPOSVAL := ALLTRIM(STRTRAN(CAMPOS->FD_POSVAL, CHR(13)+CHR(10),"CHR(13)+CHR(10)"))
FDUSERS := ALLTRIM(STRTRAN(CAMPOS->FD_USERS, CHR(13)+CHR(10),"CHR(13)+CHR(10)"))
FDHELP := ALLTRIM(STRTRAN(CAMPOS->FD_HELP, CHR(13)+CHR(10),"CHR(13)+CHR(10)"))
ARQTXT += ;
IIF( EMPTY( CAMPOS->FD_FILE ),"NULL", CAMPOS->FD_FILE ) + CHR(9) + ;
STRZERO( CAMPOS->FD_NUMBER,3 ) + CHR(9) + ;
IIF( EMPTY( CAMPOS->FD_NAME ),"NULL", CAMPOS->FD_NAME ) + CHR(9) + ;
IIF( EMPTY( CAMPOS->FD_TYPE ),"NULL",CAMPOS->FD_TYPE ) + CHR(9) + ;
STRZERO( CAMPOS->FD_WIDTH,4 ) + CHR(9) + ;
STRZERO( CAMPOS->FD_DECIMAL,3 ) + CHR(9) + ;
IIF( CAMPOS->FD_LAYOUT=.T., ".T.",".F." ) + CHR(9) + ;
IIF( CAMPOS->FD_SYSTEM=.T., ".T.",".F." ) + CHR(9) + ;
IIF( CAMPOS->FD_PRINT =.T., ".T.",".F." ) + CHR(9) + ;
IIF( CAMPOS->FD_CHANGE=.T., ".T.",".F." ) + CHR(9) + ;
IIF( CAMPOS->FD_CRYPT =.T., ".T.",".F." ) + CHR(9) + ;
STRZERO( CAMPOS->FD_EDIT,1 ) + CHR(9) + ;
IIF( EMPTY( CAMPOS->FD_DESCR ),"NULL", CAMPOS->FD_DESCR ) + CHR(9)+ ;
IIF( EMPTY( FDPREVAL ),"NULL",FDPREVAL )+CHR(9)+ ;
IIF( EMPTY( FDPOSVAL ),"NULL",FDPOSVAL )+CHR(9)+ ;
IIF( EMPTY( FDUSERS ),"NULL",FDUSERS )+CHR(9)+ ;
IIF( EMPTY( FDHELP ),"NULL",FDHELP )+QUEBRA
CAMPOS->( DBSKIP() )
ENDDO
NHANDLE := FCREATE( VPASTA + "CAMPOS.TXT" )
FWRITE( NHANDLE , @ARQTXT , LEN( ARQTXT ) )
FCLOSE( NHANDLE )
ARQTXT := ""
INSERT_QUERY := OSERVER:QUERY( 'LOAD DATA LOCAL INFILE "CAMPOS.TXT" INTO TABLE CAMPOS;')
IF INSERT_QUERY:NetErr()
erros := INSERT_QUERY:Error()
ARQERR := VPASTA + "CAMPOS.ERR"
IF FILE( ARQERR )
DELETE FILE ( ARQERR )
ENDIF
NHANDLE := FCREATE( ARQERR )
FWRITE( NHANDLE , @erros , LEN( erros ) )
FCLOSE( NHANDLE )
ENDIF
INSERT_QUERY:DESTROY()
se alguém puder ajudar, agradeço