Buen dia, aqui te comparto un ejemplo que como migro masivamente 2 tablas dbf's (invearts e inveprec) a uan DB
es la mejor pero fuciona.
SET SAFETY OFF
SET DELETED ON
RELEASE ALL
CLEAR ALL
RELEASE nconn
lcserver="localhost"
lcdatabase="midb"
lcuser="usuario"
lcpassword="contraseña"
lcport="5432"
lcstringConn="Provider=MSDASQL;Driver={PostgreSQL ODBC Driver(UNICODE)}; Server="+lcserver+";Port="+lcport+";Database="+lcdatabase+";uid="+lcuser+";pwd="+lcpassword+";UseServerSidePrepare=1;MaxVarcharSize=254;UnknownsAsLongVarchar=0;TextAsLongVarchar=0;"
SQLSETPROP(0, "Displogin", 3)
_nconn=SQLSTRINGCONNECT(lcstringConn)
ccar=[!&><"'\]
IF _nconn>0 THEN
SET MESSAGE TO '...Depurando invearts.'
cini='DELETE FROM mapasoft.invearts;'
TEXT TO lcSQLcommand NOSHOW TEXTMERGE
<<cini>>
ENDTEXT
IF SQLEXEC(_nconn, lcSQLcommand, "")>0 THEN
SET MESSAGE TO '...Depurando invecodb.'
cini='DELETE FROM mapasoft.invecodb;'
TEXT TO lcSQLcommand NOSHOW TEXTMERGE
<<cini>>
ENDTEXT
IF SQLEXEC(_nconn, lcSQLcommand, "")>0 THEN
SET MESSAGE TO '...Depurando audit.'
cini='DELETE FROM mapasoft.audit WHERE audit.idaudit>0;'
TEXT TO lcSQLcommand NOSHOW TEXTMERGE
<<cini>>
ENDTEXT
IF SQLEXEC(_nconn, lcSQLcommand, "")>0 THEN
IF FILE(FULLPATH(CURDIR())+[TEMP\INVEARTS.DBF]) AND FILE(FULLPATH(CURDIR())+[TEMP\INVEPREC.DBF]) THEN
STORE [] TO csql, cerror
cini=[INSERT INTO mapasoft.invearts (noarticulo, cvefamilia, cvelinea, cvemarca, codbarras, producto, peso, unidad, localizado, minimo, maximo, ]
cini=cini+[precompra, poriva, ieps, utilidadp1, utilidadp2, utilidadp3, precio1, precio2, precio3, estatus, foto, inventario, deposito, negativo, ]
cini=cini+[prelista, descuento1, moneda, noprovedor) ]
SELECT B
USE FULLPATH(CURDIR())+[TEMP\INVEPREC.DBF] ALIAS inveprec EXCL
SELECT A
USE FULLPATH(CURDIR())+[TEMP\INVEARTS.DBF] ALIAS invearts EXCL
GO TOP
IF ! EOF() THEN
nson=RECCOUNT()
DO WHILE ! EOF())
SET MESSAGE TO 'Producto :'+ALLTRIM(invearts.producto)
SELECT * FROM inveprec WHERE inveprec.noarticulo=invearts.noarticulo INTO CURSOR myinveprec
IF ! EOF() THEN
cbarras=[]
SELECT A
STORE '' TO c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25,;
c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50
cc0=[c0="VALUES (']+ALLTRIM[STR[invearts.noarticulo]]+[', "]
&cc0
cc1=[c1="']+ALLTRIM[STR[invearts.cvefamilia]]+[', "]
&cc1
cc2=[c2="']+ALLTRIM[STR[invearts.cvelinea]]+[', "]
&cc2
cc3=[c3="']+ALLTRIM[STR[1]]+[', "]
&cc3
cc4=[c4="']+ALLTRIM[cbarras]+[', "]
&cc4
cres=''
FOR nj=1 TO INT(LEN(ALLTRIM(invearts.producto))) STEP 1
IF SUBSTR(invearts.producto, nj, 1)$ccar THEN
LOOP
ELSE
cres=cres+SUBSTR(invearts.producto, nj, 1)
ENDIF
ENDFOR
cc5=[c5="']+ALLTRIM[cres]+[', "]
&cc5
cc6=[c6="']+ALLTRIM(TRANSFORM[invearts.peso, '9999999.999'])+[', "]
&cc6
cc7=[c7="']+ALLTRIM[STR[invearts.unidad]]+[', "]
&cc7
cc8=[c8="']+ALLTRIM[invearts.localizado]+[', "]
&cc8
cc9=[c9="']+ALLTRIM[TRANSFORM[invearts.minimos, '9999999999999.9999']]+[', "]
&cc9
cc10=[c10="']+ALLTRIM[TRANSFORM[invearts.maximos, '9999999999999.9999']]+[', "]
&cc10
cc11=[c11="']+ALLTRIM[TRANSFORM[myinveprec.precomreal, '9999999999999.9999']]+[', "]
&cc11
cc12=[c12="']+ALLTRIM[TRANSFORM[myinveprec.iva, '9999999.999']]+[', "]
&cc12
cc13=[c13="']+ALLTRIM[TRANSFORM[myinveprec.ieps, '9999999.999']]+[', "]
&cc13
cc14=[c14="']+ALLTRIM[TRANSFORM[myinveprec.utilidadn, '9999999.999']]+[', "]
&cc14
cc15=[c15="']+ALLTRIM[TRANSFORM[myinveprec.utilidade, '9999999.999']]+[', "]
&cc15
cc16=[c16="']+ALLTRIM[TRANSFORM[myinveprec.utilidadp, '9999999.999']]+[', "]
&cc16
cc17=[c17="']+ALLTRIM[TRANSFORM[myinveprec.preunonor, '9999999999999.9999']]+[', "]
&cc17
cc18=[c18="']+ALLTRIM[TRANSFORM[myinveprec.preunoesp, '9999999999999.9999']]+[', "]
&cc18
cc19=[c19="']+ALLTRIM[TRANSFORM[myinveprec.preunopic, '9999999999999.9999']]+[', "]
&cc19
cc20=[c20="']+ALLTRIM[STR[invearts.estatus]]+[', "]
&cc20
cc21=[c21="']+ALLTRIM[invearts.foto]+[', "]
&cc21
cc22=[c22="']+IIF(invearts.inventario=.T., 'TRUE', 'FALSE')+[', "]
&cc22
cc23=[c23="']+IIF(invearts.deposito=.T., 'TRUE', 'FALSE')+[', "]
&cc23
cc24=[c24="']+IIF(invearts.negativo=.T., 'TRUE', 'FALSE')+[', "]
&cc24
cc25=[c25="']+ALLTRIM[TRANSFORM[myinveprec.precompra, '9999999999999.9999']]+[', "]
&cc25
cc26=[c26="']+ALLTRIM[TRANSFORM[myinveprec.porcdesc, '9999999.999']]+[', "]
&cc26
cc27=[c27="']+IIF(myinveprec.moneda=[P], ALLTRIM(STR(1)), ALLTRIM(STR(2)))+[', "]
&cc27
cc28=[c28="'1'"]
&cc28 &&noprovedor
csql=c0+c1+c2+c3+c4+c5+c6+c7+c8+c9+c10+c11++c12+c13+c14+c15+c16+c17+c18+c19+c20+c21+c22+c23+c24+c25+c26+c27+c28+[);]
TEXT TO lcSQLcommand NOSHOW TEXTMERGE
<<cini>>
<<csql>>
ENDTEXT
IF SQLEXEC(_nconn, lcSQLcommand, "")<=0 THEN
MESSAGEBOX(lcSQLcommand)
=AERROR(laError)
cError='F-'+laError(1,3)
MESSAGEBOX(cError)
EXIT
ENDIF
ENDIF
SELECT invearts
SKIP
ENDDO
SET MESSAGE TO '...Depurando audit.'
IF INT(LEN(ALLTRIM(cerror)))<1 THEN
cini='DELETE FROM mapasoft.audit;'
TEXT TO lcSQLcommand NOSHOW TEXTMERGE
<<cini>>
ENDTEXT
IF SQLEXEC(_nconn, lcSQLcommand, "")>0 THEN
SET MESSAGE TO ''
MESSAGEBOX('Listo...')
ELSE
SET MESSAGE TO ''
=AERROR(laError)
cError='E-'+laError(1,3)
MESSAGEBOX(cError)
ENDIF
ENDIF
ELSE
MESSAGEBOX('Error; La Tabla Invearts No Tiene Ningun Registro...', 16, 'Mensaje.', 5000)
ENDIF
USE IN SELECT("MYINVEPREC")
USE IN SELECT("INVEARTS")
USE IN SELECT("INVEPREC")
ELSE
MESSAGEBOX('Error; No Existe El Origen De Datos, Invearts-Inveprec-Invecodb.', 16, 'Mensaje.')
ENDIF
ELSE
SET MESSAGE TO ''
=AERROR(laError)
cError='C-'+laError(1,3)
MESSAGEBOX(cError)
ENDIF
ELSE
SET MESSAGE TO ''
=AERROR(laError)
cError='C-'+laError(1,3)
MESSAGEBOX(cError)
ENDIF
ELSE
SET MESSAGE TO ''
=AERROR(laError)
cError='B-'+laError(1,3)
MESSAGEBOX(cError)
ENDIF
ELSE
SET MESSAGE TO ''
=AERROR(laError)
cError='A-'+laError(1,3)
MESSAGEBOX(cError)
ENDIF
SET MESSAGE TO ''
SET SAFETY ON
RELEASE ALL
CLEAR ALL
CLEAR MEMORY
RELEASE nconn
*** Si ocupas algo mas, favor de solicitarlo es este hilo.
Slds....
Mapasac
General Escobedo, N.L. Mexico