Obtener datos de access

140 views
Skip to first unread message

jmr...@gmail.com

unread,
Feb 17, 2022, 7:39:28 AM2/17/22
to Comunidad de Visual Foxpro en Español
Estoy intentando usar la clase SQLDATA de German Fabricio Valdez para obtener los datos de una tabla de ACCESS.

Consigo que me lea los datos sin problema, me crea la tabla temporal dbf, pero hay algo que se me escapa, porque cuando intento actualizar mi tabla definitiva 'diario' borrandola para actualizarla con los datos obtenidos me da error

Adjunto copia de los ficheros
demo.zip

HernanCano

unread,
Feb 17, 2022, 9:36:37 AM2/17/22
to Comunidad de Visual Foxpro en Español
¿Cuál es el error que da?

Germán Fabricio Valdez

unread,
Feb 17, 2022, 8:30:56 PM2/17/22
to Comunidad de Visual Foxpro en Español
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 

jmr...@gmail.com

unread,
Feb 18, 2022, 5:38:58 AM2/18/22
to Comunidad de Visual Foxpro en Español
Muchas gracias, ¡ahora si!
Reply all
Reply to author
Forward
0 new messages