- Conexión a servidores mediante ODBC.
- Uso nativo de la base de datos de Visual FoxPro (DBC)
- Creación de cursores actualizables (Vistas Nativas) y de solo lectura.
La librería consiste en un único PRG por lo tanto asegurate de incluirla en tu proyecto primero.
Luego en algún punto de tu PRG principal deberás cargar la clase en memoria.
SET PROCEDURE TO "VFP_ODBC" ADDITIVE
Como la librería trabaja con string de conexiones entonces no es mala idea que te crees una variable y almacenes tu string de conexión con los parámetros de acceso a tus datos.
LOCAL lcStringConnect
lcStringConnect = "Driver={MariaDB ODBC 3.1 Driver};Server=localhost;User=root;Password=1234;DATABASE=nation;PORT=3307;"
Es importante que especifiques la base de datos con la que piensas trabajar, esto es con la finalidad de crear la base de datos DBC en tu disco que únicamente servirá de contenedor para las conexiones y las vistas remotas.
El ejemplo anterior es para el caso concreto de MariaDB pero también tiene soporte para MySQL y SQL Server; la librería internamente tiene implementadas las subclases para FireBird, PostGreSQL y SQLite pero por ahora se encuentran sin soporte.
Una vez que hayas creado tu variable con el string de conexión entonces ya es posible conectarte a tu servidor de base de datos con la siguiente línea de código:
LOCAL oCon
oCon = CREATEOBJECT("odbc", lcStringConnect)
Si todo marcha bien oCon
ya debería contener la referencia a tu conexión, por lo tanto solo te queda abrir una tabla y jugar con ella.
Puedes abrir una tabla de modo lectura o escritura. La diferencia no tengo porque explicartela así que te muestro la línea de código más simple para abrir una tabla en modo escritura.
oCon.Use("clientes")
¿Bastante fácil verdad?, hemos abierto una tabla en modo escritura lo cual quiere decir que desde ya puedes hacer cualquier mantenimiento sobre dicha tabla y tras un TABLEUPDATE()
o TABLEREVERT()
podrás afectar sus filas hacia el servidor.
Muy bien, ahora estudiemos a fondo los parámetros del método Use()
.
Con tan solo ejecutar oCon.Use("clientes")
estamos omitiendo una lista de parámetros que la librería asume por defecto, la lista completa de parámetros son:
- tcTableName: este es el único parámetro requerido ya que sin él no es posible saber qué tabla quieres abrir.
- tcAlias: es opcional e indica el alias de tu tabla, en caso de estar vacío asume el nombre de la tabla.
- tcMode: pasa una 'r' para readonly o solo lectura y una 'w' o vacío para modo escritura.
- tcWhere: ¿tu tabla necesita abrirse con una condición o filtro? entonces envía tu filtro por aquí.
- tnDataSession: ¿trabajas con sesiones privadas? pues especifícala aquí.
- tcNoData: ¿quieres solo la estructura de la tabla? entonces envía 'no data' en este parámetro.
Los parámetros que te he mostrado no tienen por que ser enviados en el mismo orden. VFP_ODBC te permite ser holgazán y enviar solo los parámetros que necesites.
Veamos algunos ejemplos:
oCon.Use("clientes")
Ahí tienes tu tabla en modo escritura y con el mismo ALIAS()
.
oCon.Use("clientes", "r")
Ahí tienes tu tabla en modo lectura y con el mismo ALIAS()
.
oCon.Use("clientes", "misClientes")
Ahí la tienes, una tabla actualizable cuyo ALIAS()
es 'misClientes'
oCon.Use("clientes", "numeroCuenta = ?thisform.codigo_cliente")
Ahí la tienes, la tabla 'clientes' filtrada por el número de cuenta. Aquí asumo que la estás llamando desde un formulario en cuya propiedad 'codigo_cliente' tienes almacenado temporalmente el código del cliente que tienes en pantalla.
NOTA: si cambias tu propiedad 'codigo_cliente' y quieres actualizar tu vista solo haz un REQUERY()
¿Fácil verdad? :)
Quiero abrir una tabla de solo lectura con un alias particular y en una sesión privada de mi formulario
oCon.Use("clientes", "miListaDeClientes", "r", thisform.datasessionid)
Ahí la tienes, la tabla 'clientes' con el ALIAS()
'miListaDeClientes' en modo lectura y abierta solo para la sesión de tu formulario :)
oCon.Use("clientes", "no data")
En fin, ya vez que el orden de los parámetros NO IMPORTA, solo envía los que necesites y deja que la librería haga el trabajo sucio por ti.
Con esta librería serás tan productivo como lo eres con un cursor nativo actualizable, es decir, solo tienes que preocuparte de darle el tratamiento a tu vista o cursor con los comandos que conoces de toda la vida: LOCATE FOR, SELECT, GO TOP, RECNO(), REPLACE, APPEND BLANK, TABLEUPDATE(), TABLEREVERT(), REQUERY(), etc
Siempre tuve en mente tu productividad y por eso la he desarrollado de esta manera para que no tengas que estar escribiendo tus consultas en la forma que te lo pide tu servidor porque eso a la larga te traerá problemas de PORTABILIDAD.
NOTA: esta documentación seguirá creciendo así que te recomiendo que le pegues un ojo de vez en cuando ya que la librería apenas está naciendo.