Necesito abrir tablas de fox con ADO pero me dice Microsoft OLE DB Provider for ODBC Drivers (0x80004005) [Microsoft][ODBC Visual FoxPro Driver]El archivo 'tabla.dbf' no existe. Esta tabla esta en un sitio web y tengo acceso y permisos suficientes. Gracias por su ayuda.
1 respuesta
Respuesta de Cesar RalFito
0
0
Cesar RalFito, Ing. de Sistemas Jefe de Automatizacion Registro Civil...
Trabajando VFP con SQL Server vía ADO Muchas veces hemos deseado trabajar con vía ADO desde VFP. He realizado este pequeño tema esperando sea del agrado de todos ustedes. Objetos Utilizados: Recordset, Connection, vfpcom.comutil. Clear && lcServidor = Servidor SQL Server && lcUsuario = Usuario && lcClave = Clave del Usuario && lcDb = Base de Datos a Conectar Ejemplo "Northwind" PUBLIC rs,Conn,oCom as Object LOCAL lcServidor,lcUsuario,lcClave lcServidor = "desarrollo10" lcUsuario = "sa" lcClave = "123456" lcDb = "Northwind" && Creando los Objetos Conn = CREATEOBJECT("ADODB.Connection") && Objeto Contenedor de la Conexión oCom = CREATEOBJECT("vfpcom.comutil") && Objeto COM para Trabajar con ADO Recordset desde VFP rs = CREATEOBJECT("ADODB.Recordset") && Objeto Recordset && Creamos el Strings de Conexión strconn = "Provider=sqloledb;Data Source=&lcServidor ;Initial Catalog=&lcDb;User Id=&lcUsuario;Password=&lcClave;" && Abriendo la Conexión pasandole el String al Objeto "ADODB.Connection" Conn.Open (strconn) && Conn.Execute ("use com;") && Si deseamos cambiar de base de datos && Abriendo el "ADODB.Recordset". Pasamos la Sentencia SQL a Ejecutar, && El objeto contenedor de la Conexión y el modo de apertura. rs.Open ("select * from Orders", Conn, 3) LOCAL lnReg && Contamos los campos que nos devuelve el Recordset y a su vez && imprimimos todo el registro donde estamos parados lnReg = rs.Fields.Count FOR i = 1 TO lnReg ? "CAMPO: " + RS.FIELDS(I - 1).Name + " VALOR: " + TRANSFORM(RS.FIELDS(I - 1).VALUE) ENDFOR && Creamos un Cursor nativo de VFP y vamos a volcar todos los registros && que contiene el Recordset en el Campo shipcountry a el campo del cursor temporal && Podemos llamar a los campos en el Recordset asi rs.Fields('shipcountry').Value 0 RS.FIELDS(3).VALUE CREATE CURSOR foxjose(shipcountry C(50)) && Nos paramos en el Primer Registro del Recordset rs.MoveFirst DO WHILE NOT rs.EOF && Evaluamos si no es un Fin del Archivo SELECT foxjose APPEND BLANK REPLACE shipcountry WITH rs.Fields('shipcountry').Value rs.MoveNext && Nos movemos al Siguiente Registro ENDDO && Presentamos Resultados SELECT foxjose BROWSE RS.CLOSE && Cerramos el Recordset && Conn.Execute ("use SICA;") && Abrimos el Recordset Con otra Sentencia, Otra Conexion y parametros de Actualizacion en el mismo rs.Open ("select * from invoices", Conn, 1, 3) && Convertimos con el Objeto "vfpcom.comutil" De un Recordset a un Cursor nativo de VFP oCom.RSToCursor(RS,"prueb") && Mostramos Resultados SELECT prueb BROWSE && Agregamos en la tabla de SQL Server llamada Region un nuevo Registro a traves de && el Objeto Conexión Directamente Conn.Execute ("insert into Region(regionid,regiondescription) values ('5','Táchira')") rs.close && Cerramos el Recordset && Abrimos para efectuar otra prueba rs.Open ("select * from Region", Conn, 1, 3) && Agregamos un nuevo Registro a traves de el Recordset rs.AddNew rs.fields('regionid').value = '6' rs.fields('regiondescription').value = 'Vargas' Rs.update && Actualizamos el Recordset para que surta efecto el cambio oCom. RSToCursor(RS,"Resultado") && Volvemos a Volcar el Recordset a un Cursor de VFP && Resultados SELECT Resultado BROWSE rs.close && Destruimos los objeto que utilizamos rs = .NULL. Conn = .NULL. oCom = .NULL. Referencia: Visual FoxPro VFPCOM Utility This utility is a COM server that provides additional functionality when you use ADO and access COM events with your Visual FoxPro 9.0 applications.