hola romeo
hiciste todo bien
el error esta en esa version de la clase sqldata2 83f y anteriores, que tienen incompatibilidades con tablas dbfs libres.
solo actualiza la clase a la nueva version. y listo
este es tu ejemplo solo hay que eliminar el tableupdate(.t.)
*configuraciones de fox necesarias
SET STATUS OFF
SET ECHO OFF
SET TALK OFF
SET NOTIFY OFF
SET NOTIFY CURSOR OFF
SET CONSOLE OFF
SET TEXTMERGE ON
SET DELETED ON
SET DATE TO DMY
SET CENTURY ON
SET NULLDISPLAY TO "sin datos"
SET POINT TO ","
SET HOURS TO 24
SET SECONDS ON
SET ESCAPE OFF
SET CLASSLIB TO "sqldata2"
*configurando el evento para atrapar errores
*ON ERROR do perror WITH ERROR( ), MESSAGE( ), PROGRAM( ), LINENO( )
ON SHUTDOWN quit
*creación del entorno de conexión para una quinta conexión via a Access
LOCAL osqldata2 as sqldata2 OF sqldata2.sqldata2
osqldata2=CREATEOBJECT("sqldata2.sqldata2")
osqldata2load1=CREATEOBJECT("custom")
osqldata2.psqlcargar(_screen,"1",osqldata2load1)
*estableciendo la cadena de conexion para una base de datos de visual foxpro solo lectura
TEXT TO vcadenaconexionado NOSHOW TEXTMERGE PRETEXT 8
DRIVER=Microsoft Access Driver (*.mdb, *.accdb);
uid=admin;
UserCommitSync=Yes;
Threads=3;
SafeTransactions=0;
MaxScanRows=8;
MaxBufferSize=2048;
FIL=MS Access;
DriverId=25;
DBQ=E:\demo\0002015.accdb
ENDTEXT
LOCAL osqldata2 as sqldata2 OF sqldata2.sqldata2
osqldata2=CREATEOBJECT("sqldata2.sqldata2")
osqldata2.psqlcadena(_screen,"1","access",vcadenaconexionado)
IF osqldata2.psqlestado(_screen,"1")=.f.
MESSAGEBOX("Error al conectarse",64,"Atención")
RETURN
ENDIF
*lineas para traer un cursor con los datos seleccionados para posteriormente ser grabados los cambios (consultag)
LOCAL osqldata2 as sqldata2 OF sqldata2.sqldata2
osqldata2=CREATEOBJECT("sqldata2.sqldata2")
IF USED("f_apu")
USE IN f_apu &&es necesario que el cursor no exista antes de llamar a psqlejecutar /*
ENDIF
of_apu=CREATEOBJECT("cursoradapter")
osqldata2.psqlejecutar(_screen,"1",_screen,of_apu,"consultag","f_apu","f_apu","select * from f_apu order by asiapu",1,"asiapu")
LOCAL osqldata2 as sqldata2 OF sqldata2.sqldata2
osqldata2=CREATEOBJECT("sqldata2.sqldata2")
osqldata2.psqldesconectar(_screen,"1")
REMOVEPROPERTY(_screen,"sqlconnection1")
REMOVEPROPERTY(_screen,"sqldata25")
cFichero1 = 'tmp0001.dbf'
SELECT f_apu
copy to (cFichero1)
*= TABLEUPDATE(.T.) &&esto no va
USE diario EXCLUSIVE
ZAP &&Esta linea da error <-------------------------------------------/*
APPEND FROM (cFichero1)
*= TABLEUPDATE(.T.) &&esto no va
PROCEDURE PERROR
LPARAMETER merror, mess, mprog, mlineno
LOCAL osqldata2 as sqldata2 OF sqldata2.sqldata2
osqldata2=CREATEOBJECT("sqldata2.sqldata2")
osqldata2.psqlerror(_screen)
MESSAGEBOX("Ocurrio un error."+mess+". Modulo:"+mprog+"N° de linea"+ALLTRIM(STR(mlineno,10,0))+", reintente",64,"Atencion")
RETURN TO MASTER
*configuraciones de fox necesarias
SET STATUS OFF
SET ECHO OFF
SET TALK OFF
SET NOTIFY OFF
SET NOTIFY CURSOR OFF
SET CONSOLE OFF
SET TEXTMERGE ON
SET DELETED ON
SET DATE TO DMY
SET CENTURY ON
SET NULLDISPLAY TO "sin datos"
SET POINT TO ","
SET HOURS TO 24
SET SECONDS ON
SET ESCAPE OFF
SET CLASSLIB TO "sqldata2"
*configurando el evento para atrapar errores
*ON ERROR do perror WITH ERROR( ), MESSAGE( ), PROGRAM( ), LINENO( )
ON SHUTDOWN quit
*creación del entorno de conexión para una quinta conexión via a Access
LOCAL osqldata2 as sqldata2 OF sqldata2.sqldata2
osqldata2=CREATEOBJECT("sqldata2.sqldata2")
osqldata2load1=CREATEOBJECT("custom")
osqldata2.psqlcargar(_screen,"1",osqldata2load1)
*estableciendo la cadena de conexion para una base de datos de visual foxpro solo lectura
TEXT TO vcadenaconexionado NOSHOW TEXTMERGE PRETEXT 8
DRIVER=Microsoft Access Driver (*.mdb, *.accdb);
uid=admin;
UserCommitSync=Yes;
Threads=3;
SafeTransactions=0;
MaxScanRows=8;
MaxBufferSize=2048;
FIL=MS Access;
DriverId=25;
DBQ=E:\demo\0002015.accdb
ENDTEXT
LOCAL osqldata2 as sqldata2 OF sqldata2.sqldata2
osqldata2=CREATEOBJECT("sqldata2.sqldata2")
osqldata2.psqlcadena(_screen,"1","access",vcadenaconexionado)
IF osqldata2.psqlestado(_screen,"1")=.f.
MESSAGEBOX("Error al conectarse",64,"Atención")
RETURN
ENDIF
*lineas para traer un cursor con los datos seleccionados para posteriormente ser grabados los cambios (consultag)
LOCAL osqldata2 as sqldata2 OF sqldata2.sqldata2
osqldata2=CREATEOBJECT("sqldata2.sqldata2")
IF USED("f_apu")
USE IN f_apu &&es necesario que el cursor no exista antes de llamar a psqlejecutar /*
ENDIF
of_apu=CREATEOBJECT("cursoradapter")
osqldata2.psqlejecutar(_screen,"1",_screen,of_apu,"consultag","f_apu","f_apu","select * from f_apu order by asiapu",1,"asiapu")
LOCAL osqldata2 as sqldata2 OF sqldata2.sqldata2
osqldata2=CREATEOBJECT("sqldata2.sqldata2")
osqldata2.psqldesconectar(_screen,"1")
REMOVEPROPERTY(_screen,"sqlconnection1")
REMOVEPROPERTY(_screen,"sqldata25")
cFichero1 = 'tmp0001.dbf'
SELECT f_apu
copy to (cFichero1)
*= TABLEUPDATE(.T.) &&esto no va
USE diario EXCLUSIVE
ZAP &&Esta linea da error <-------------------------------------------/*
APPEND FROM (cFichero1)
*= TABLEUPDATE(.T.) &&esto no va
PROCEDURE PERROR
LPARAMETER merror, mess, mprog, mlineno
LOCAL osqldata2 as sqldata2 OF sqldata2.sqldata2
osqldata2=CREATEOBJECT("sqldata2.sqldata2")
osqldata2.psqlerror(_screen)
MESSAGEBOX("Ocurrio un error."+mess+". Modulo:"+mprog+"N° de linea"+ALLTRIM(STR(mlineno,10,0))+", reintente",64,"Atencion")
RETURN TO MASTER