Documentos de Académico
Documentos de Profesional
Documentos de Cultura
La forma más común de usar datos que no son directamente manejados desde
VFP es usando el proveedor OLE DB (se utiliza ADO para su manejoA). Este
proveedor te permite conectarte con datos con el formato de otros programas
(MS Access, MS SQL Server, MySQL, etc.) ejecutando sentencias SQL estándar.
Así por ejemplo si estas manejando un proveedor de datos para MS Access y
quieres cambiar a MS SQL solo basta con cambiar pequeñas parte de tu “cadena
de conexión” (que es una propiedad de la conexión) y es todo, ya has migrado a
MS SQL sin modificar las sentencias SQL estándar.
Los argumentos dependen del proveedor que vayamos a utilizar como ejemplo
en MS Access una cadena de conexión (con la información mínima necesaria)
sería:
“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Archivos
de programa\Microsoft Office\Office10\Samples\Neptuno.mdb”
donde:
Argumento Descripción
Provider Proveedor de datos (algo así como el
traductor entre aplicaciones)
Data Source Base de datos
Veamos el siguiente ejemplo que muestra como realizar una conexión con la
base de datos MS Access Neptuno (en español), y ejecuta una consulta a la tabla
de clientes y muestra todos los nombres de clientes en la pantalla
LOCAL cConnectionString, oCnx
*"Abrimos" la conexión
oCnx.Open
rs.close
oCnx.Close
ELSE
? "Error no se logró entablar la conexión...."
ENDIF
Como ven es muy sencillo utilizar el OLE DB con ADO, existen otros argumentos
importantes dentro de la cadena de conexión pero los valores predeterminados
normalmente son los más comunes, como la localización de recordset, el tiempo
de espera para la conexión entre otros.
Esto da pie a utilizar las características de OOP de VFP para crear una clase para
el manejo de conexiones que nos facilite aún más el manejo de éstas.
*"Abrimos" la conexión
oCnx.Open
rs.close
oCnx.Close
ELSE
? "Error no se logró entablar la conexión...."
ENDIF
PROCEDURE Open
Local lRet
lRet = .F.
With This
*Checamos que se haya asignado un valor a la propiedad DBFile
If !Empty(.DBFile) Then
*Checamos que el archivo exista
If File(.DBFile) Then
*Generamos la cadena de conexión y la asignamos a la
*propiedad ConnectionString
This.ConnectionString = “Provider=Microsoft.Jet.OLEDB.4.0;" +;
"User ID=" + AllTrim(.UserName) + ";" +;
"Data Source=" + AllTrim(.DBFile) +;
";Persist Security Info=False;" + ;
"Jet OLEDB:Database Password=" + AllTrim(.DBPassWord)
*Ejecutamos el procedimiento definido en la clase base
lRet = DoDefault()
EndIf
EndIf
EndWith
Return lRet
ENDPROC
ENDDEFINE
lcCnx.Close()
Por cierto se dieron cuenta que también estamos viendo reutilización de código
existente.
Argumento Valor
Provider MySQLProv.3.0 -> el proveedor de
datos específico para MySQL
Data Source Nombre de la base de datos a
conectarnos
Integrated Security Seguridad
Password Clave de acceso del usuario
User ID Nombre de usuario
Location IP del servidor donde se encuentra el
servidor MySQL
Extended Properties Propiedades extendidas
Cuando bajen MyOLEDB (el que yo bajé), tiene un archivo de ayuda en el cual
explica a detalle cada una de las propiedades del proveedor de datos.
La clase para esta conexión deriva de la clase base MDADOConexion, verán que
resulta muy sencillo cuando ya tenemos la base para las conexiones:
PROCEDURE Open
Local lRet
lRet = .F.
With This
*Generamos la cadena de conexión y la asignamos a la
*propiedad ConnectionString
This.ConnectionString = 'Provider=MySqlProv.3.0;' + ;
'Data Source=vfpsample;' + ;
'Integrated Security="";' +;
'Password=' + ALLTRIM(This.password) +;
';User ID=' + ALLTRIM(This.username) +;
';Location=' + ALLTRIM(This.host) +;
';Extended Properties=""'
*Ejecutamos el procedimiento definido en la clase base
*Estamos viendo reutilización de clases sin querer :o)
lRet = DoDefault()
EndWith
Return lRet
ENDPROC
ENDDEFINE
Y es todo, ya tenemos una clase para la conexión con MySQL a través utilizando
ADO; solamente queda por hacer un ejemplo de cómo utilizar la clase:
Pues bien, espero que les sea de utilizad, si tiene algún comentario pueden
hacérmelo llegar a denny_infante@hotmail.com
Saludos a todos
dij. ..