Ado Con Ffp6.p

Hola Amigo
Como puedo trabajar con Ado y Access. Cuales son las instrucciones para Abrir una Base, table etc de Access y luego Como Grabar y Actualizar los Datos.
Desde ya muchas Gracias
Manuel.
1

1 respuesta

Respuesta
1
Este es un ejemplo donde actualizo tablas de Vfox y de access simultáneamente, utilizo una conexión ADO DSN.
** ACA HAGO LAS ACTUALIZACIONES
lcMDBDir = 'C:\poliasist\web'
lcMDBName = 'web.mdb'
* String donde me conecto por ADO a la Base de Access
gnConnHandle = SQLSTRINGCONNECT('DSN=MS Access Database;DBQ='+;
lcMDBDir+'\'+lcMDBName+';DefaultDir='+;
lcMDBDir+';DriverId=25;FIL=MS Access;MaxBufferSize=2048;'+;
'PageTimeout=5;UID=admin;')
xestado='Sin Autorizacion'
* Conpruebo si me conecte
IF gnConnHandle < 0
= MESSAGEBOX('No se puede conectar', 16, 'Error de conexión SQL')
ELSE
*= MESSAGEBOX('Conexión realizada', 48, 'Mensaje de conexión SQL')
= SQLSETPROP(gnConnHandle, 'asynchronous', .F.)
xconn = SQLEXEC(gnConnHandle, 'SELECT * FROM solisinauto, estados where solisinauto.nro_soli=estados.nro_soli;
and solisinauto.cod_area=estados.cod_area and estados.estado='+'?xestado', 'MiCursor')
* Compruebo si se ejecuta SQL
if xconn <0
= MESSAGEBOX('Error en Conexión', 48, 'Mensaje de conexión SQL')
else
sele micursor
go top
* inserto cursor Web en Solisinauto.dbf
do while !eof()
INSERT INTO solisinauto (nro_soli, cod_area, nro_item, descrip, cantidad, cod_concep, precio_uni, precio_tot) VALUES (micursor.nro_soli, micursor.cod_area, micursor.nro_item, micursor.descrip, micursor.cantidad, micursor.cod_concepto, micursor.precio_uni, micursor.precio_tot)
se le micursor
skip
enddo
*= MESSAGEBOX('Bases Fox Actualizadas', 48, 'Mensaje de conexión SQL')
Endif
* Inserto el Estados.dbf nuevas Solicitudes
xconn = SQLEXEC(gnConnHandle, 'SELECT * FROM estados where estados.estado='+'?xestado', 'MiCursor')
sele micursor
go top
do while !eof()
INSERT INTO Estado (nro_soli, cod_area, estado, id_usr, observa_w, fecha_alta) VALUES (micursor.nro_soli, micursor.cod_area, 'S', micursor.id_usr, micursor.observaciones_w, micursor.fecha_alta)
se le micursor
skip
enddo
Sele count(nro_soli) as cant from micursor where micursor.estado=xestado into cursor aux1
* Remplazo estado Sin Autorizacion por Bajado sin Auto (en Access)
xvar1='Leido Sin Autorizacion'
xconn=SQLEXEC( gnConnHandle,'UPDATE Estados SET Estados.estado = '+'?Xvar1'+' WHERE Estados.estado ='+'?Xestado' )
if xconn<0
= MESSAGEBOX('Error en Conexión de Reemplazo', 48, 'Mensaje de conexión SQL')
else
= SQLCOMMIT(gnConnHandle) && Graba los cambios.
*= MESSAGEBOX('Bases Access Actualizadas', 48, 'Mensaje de conexión SQL')
Endif
xcant=aux1.cant
MESSAGEBOX('Se han bajado '+str(xcant)+chr(13)+'Solicitudes de la Web', 48, 'Mensaje de conexión SQL')
* Ahora actualizar Web para subir y listo
* Actualizo estado web que estan autorizados nuevos
Sele nro_soli, cod_area from estado where estado='A' into cursor micursor
sele micursor
go top
do while !eof()
xnro=micursor.nro_soli
xcod=micursor.cod_area
xvar2='Autorizado'
xconn=SQLEXEC( gnConnHandle,'UPDATE Estados SET Estados.estado = '+'?Xvar2'+' where Estados.nro_soli= '+'?xnro'+' and Estados.cod_area= '+'?xcod')
= SQLCOMMIT(gnConnHandle) && Graba los cambios.
se le micursor
skip
enddo
*Subo los items autorizados (estado)
sele * from solisinauto, estado where solisinauto.nro_soli= estado.nro_soli and solisinauto.cod_area= estado.cod_area and estado.estado='A' into cursor micursor
sele micursor
go top
do while !eof()
minro=micursor.nro_soli_a
micod=micursor.cod_area_a
mitem=micursor.nro_item
mides=micursor.descrip
mican=micursor.cantidad
micon=micursor.cod_concep
mipru=micursor.precio_uni
miprt=micursor.precio_tot
xconn=SQLEXEC( gnConnHandle,'INSERT INTO soliauto (nro_soli, cod_area, nro_item, cantidad, descrip, cod_concepto, precio_uni, precio_tot)'+;
'VALUES ('+'?minro'+','+'?micod'+','+'?mitem'+','+'?mican'+','+'?mides'+','+'?micon'+','+'?mipru'+','+'?miprt'+')')
= SQLCOMMIT(gnConnHandle) && Graba los cambios.
Se le micursor
skip
enddo
if xconn<0
= MESSAGEBOX('Error en Conexión de Reemplazo', 48, 'Mensaje de conexión SQL')
else
= SQLCOMMIT(gnConnHandle) && Graba los cambios.
*= MESSAGEBOX('Bases Access Actualizadas', 48, 'Mensaje de conexión SQL')
Endif
* Marco estado.dbf de autorizado a pendiente
UPDATE Estado SET Estado.estado ='P' WHERE Estado.estado ='A'
= MESSAGEBOX('Bases Access Actualizadas - Autorizado', 48, 'Mensaje de conexión SQL')
= SQLDISCONNECT(gnConnHandle)
Endif
Bueno, si bien el código se puede mejorar, es un muy buen ejemplo de como manejar una conexión DSN; espero te sirva de ayuda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas