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 Respuesta
Respuesta de piraton
1
1
piraton, Desarrollo de Aplicaciones Visual Fox, ADO/ODBC Programador ASP...
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.