Вы находитесь на странице: 1из 7

Que es DBVFP

Es una librera PRG que nos permite manejar de forma fcil y rpida el manejo de datos de
VFP con Mysql con tablas Innodb, incluso se pueden hacer las pruebas desde la ventana de
comandos de VFP lo que ahorra horas en depurar un error, ya que de manera directa podemos
probar las instrucciones SQL que estamos enviando al servidor MYSQL y detectar rpidamente el
error.
Con DBVFP ya no tienes que preocuparte de los comandos TableUpdate, TableRevert, SET
MULTILOCKS, CURSORSETPROP, BEGIN TRANSACTION, END TRANSACTION, SQLEXEC,
SQLSTRINGCONNECT, SQLDISCONNECT, y otros muchos ms, ahora usaras procedimientos que
encapsulan de manera fcil estas instrucciones.
DBVFP. Tambin controla los CURSORES devueltos por SQLEXEC, cosa que otras clases no
lo hacen por ti, y te permite adems, generarte la o las instrucciones INSERT, UPDATE, DELETE
correspondientes, por lo que tu tiempo en programar el acceso a datos ser ms rpido.

Un ejemplo rpido de cmo usar la clase DBVFP, para trabajar con MySql.
1.- Abrir el archivo DBVFP.PRG y en el procedimiento INIT, editar las opciones
correspondientes a su conexin.
* Iniciar Init
PROCEDURE init
this.red
= .t. && Conexin a la Red Permanente
this.verifica = .f. && Verificar estado de la conexin en cada consulta
this.reconexion
= .f. && Intentar Reconectar
this.errores_mostrar = .t. && Mostrar Errores SQL
*
this.driver
= this.mysql_driver3.51
&& Driver Odbc
this.driver
= this.mysql_driver51
&& Driver Odbc
this.servidor = "localhost"
&& Ip del servidor
this.usuario
= "root"
&& Usuario del Servidor
this.password = "contrasea"
&& Password del servidor
this.basededatos = "basededatos"
&& Base de datos
this.puerto
= this.mysql_puerto
&& Puerto del Servidor 3006
SET DATE BRITISH
SET CENTURY ON
SET DELETED ON
ENDPROC

This.red = Sirve para siempre est conectado al servidor, si lo ponemos en .F. cada vez que se
ejecute un SQLEXEC se desconectara del servidor, por lo que this.reconexion debe ser igual
a .T. para que al enviar otra instruccin SQLEXEC automticamente se reconecte. De esta forma si
nos gusta estar conectados siempre usamos this.red = .t. y si nos gusta conectar y
desconectarnos simplemente this.red = .f. acompaado de this.reconectar =
.t. para que se reconecte automticamente cuando sea necesario.
This.verifica = Sirve para que antes de ejecutar una instruccin SQLEXEC, se verifique si est
conectado al servidor realmente, por lo que enva a pedir la fecha del servidor Mysql si devuelve
.T. continua si no marca el error correspondiente. No lo recomiendo habilitar cuando this.red
= .t. y es una red local, pero para internet podra ser til.

2.- Cargar la librera en Memoria para trabajar con ella.

Hay infinidad de formas de trabajar con la librera, la podemos asignar a una variable
pblica, al _screen, a una propiedad del formulario (recomendado) pero para las pruebas desde la
lnea de comandos usaremos una variable pblica, de la siguiente forma.
Nota: My puede ser cualquier nombre de variable, el segundo parmetro dbvfp.prg debe ir la ruta
donde est la clase, en este caso la estoy abriendo directamente desde la carpeta donde la copie.
Public My
My = NEWOBJECT("dbvfp","dbvfp.prg")

3.- Conectarse al servidor, Una vez definidos los valores de la propiedades


del punto 1, solo hay que ejecutar la siguiente funcin.
? My.Conectar()
Si devuelve .T. es que ya est conectado al servidor Mysql, si devuelve .F. es porque algo no quedo
bien configurado y deben revisar el error.
Para Desconectarse del servidor ejecutamos la siguiente instruccin
? My.Conectar(.f.)
Para reconectarnos al servidor
? My.Conectar(.t.)
Nota: DBVFP tiene un pequeo control de errores, es decir despus de ejecutar cualquier
comando (funcin, procedimiento) de la librera podemos saber ms detalles que fue lo que paso
exactamente, para ellos tenemos la propiedad .errores_no que nos dar ms detalles del
error o de lo que realizo la funcin.
Si ejecutamos my.conectar() y devolvi .t., entonces my.errores_no devolver 1, y si volvemos a
ejecutar my.conectar() devolver .t. pero my.errores_no devolver 0, lo que indica que ya est
conectado y no es necesario conectarse nuevamente. De esta forma cada funcin de la librera
modifica el valor de my.errores_no cuando se ejecuta.

4.- Enviar comandos SQL al servidor Mysql, para ello hay 3 formas de
hacerlo.

a) my.Sql(comando,cursor)
Con my.Sql podemos enviar toda clase de comandos, es el sustituto de la instruccin
SQLEXEC, en la cual ya no tenemos que especificar la conexin, solo la instruccin SQL y si va a
devolver un cursor especificar su nombre, si envan un UPDATE por ejemplo no es necesario
especificar el cursor. Ejemplo:
? My.sql(Select * from usuarios)
browse
Deben usar el nombre de una tabla que tengan en su base de datos para que funcione este
comando, si omiten el nombre del cursor como en este ejemplo por default VFP crea un cursor
llamado Sqlresult, para evitar eso la instruccin completa seria as:
? My.sql(Select * from usuarios, usuarios)
browse
? My.sql(Select * from usuarios, Lista_usuarios)
browse
b) my.Abrir(comando)
my.Abrir a diferencia de my.Sql es que va enfocado al manejo de cursores, es decir,
my.Abrir encapsula a my.Sql, para dotarlo de propiedades para el manejos de los cursores
devueltos, por lo tanto, my.Abrir no se puede ni debe usar para enviar instrucciones Update,
Delete, Insert, etc, solo se debe usar para obtener cursores de datos, ejemplos
? My.AbrirSelect * from usuarios)
En este ejemplo vemos que no se especific el nombre del cursor como se hizo en el
ejemplo de arriba usando my.sql, pero como my.Abrir tiene ms propiedades que no tiene my.sql,
este devolver el nombre del cursor especificado en el From usuarios, es decir devolver un
cursor Usuarios, si usamos my.sql obtendramos SqlResult, pero my.abrir busca el nombre de la
tabla que estamos especificando dentro de la instruccin Select para ponerlo por nosotros, o
podemos especificar uno diferente as:
? My.AbrirSelect * from usuarios,lista_usuarios)
NOTA: DBVFP como les comente en un inicio a diferencia de otras clases, nos permite
manejar los cursores, por ello es importante usar my.Abrir para obtener los cursores y no usar
my.Sql. Cuando me refiero a manejar los cursores es que la librera DBCFP es capaz de evitarnos
usar los comando tableUpdate, tableReverte, que normalmente debemos usar con otras clases,
adems del uso de las transacciones y otras ms instrucciones un poco complicadas para la
mayora que usamos tablas DBF y que estamos migrando a un servidor Mysql.

c) my.Nuevo(comando)
my.Nuevo es la combinacin de my.sql y my.abrir, es decir encapsula a ambas funciones
para obtener un cursor listo para guardar registros nuevos, ya que abre un cursor en el cual
podemos usar comandos de vfp como APPEND BLANK o Insert Into, el inconveniente de my.nuevo
es que se debe especificar la tabla real de mysql a la que se va a devolver el cursor, no se puede
enviar una instruccin SELECT, si queremos hacer eso debemos usar my.abrir, porque my.nuevo
est limitado, ya que fue pensado solo para catlogos por ejemplo donde abrirnos una tabla y
queremos agregar un registro.
? My.Nuevo(usuarios)
? My.Nuevo(usuarios,lista_usuarios)
browse

Esto devolver un cursor vaco, en el cual podemos agregar un Append Blank o un simple
insert into para agregar un registro, ms abajo veremos cmo guardar los cambios.

5.- Editando Cursores


Un pequeo repaso, ya vimos como conectarnos y desconectarnos al servidor Mysql,
vimos la diferencia entre usar my.Sql y my.Abrir, el primero para enviar todo tipo de instruccin al
servidor Mysql, y el segundo para obtener cursores y que la librera pueda manejarlos y my.Nuevo
que solo lo podemos usar para abrir una tabla con todos sus campos y poder agregarle registros
pero que ya tiene incluido el comando my.editar que vemos a continuacin.
Para editar un cursor es necesario obtenerlo como hemos venido comentndolo con el
comando my.abrir, ya que est abierto si queremos agregar, eliminar o editar registros debemos
prepararlo para ello con el comando my.editar de la siguiente formar.
? My.Abrir(Select * from usuarios, Lista_usuarios)
? My.Editar(Lista_usuarios)
browse
Como pueden observar en el ejemplo, se obtiene un cursor llamado Lista_Usuarios, el
cual mostrara todos los usuarios contenidos en la tabla y todos sus campos, si queremos mostrar
algunos campos en especfico solo es cuestin de editar el SELECT * por un SELECT usuario,
nombre, clave, etc. Incluso combinar con otra tabla.
Para DBVFP pueda ayudarnos al manejo de cursores, usamos el comando my.Editar el cual
prepara el cursor de este ejemplo Lista_Usuarios para que se puedan realizar cambios en el y
poder administrarlos de una forma transparente para el programador, el comando my.nuevo
como lo mencione lneas arriba ya lleva incluida la instruccin my.editar por lo que no es necesario
ejecutarla, pero para el caso de my.abrir solo si queremos que el cursor vaya a tener
modificaciones lo editarnos si no posiblemente sea para mostrar un catlogo.

6.- Guardando datos en Mysql.


Ya sabemos que podemos obtener un cursor y realizar cambios en el de dos formas, 1
usando my.nuevo, la otra usando my.abrir ms my.editar.
Sin importar cual forma usemos de las dos anteriores, solo recordar usar una para evitar
errores, ahora vamos a ver como enviar esos cambios a Mysql, es decir vamos a usar la magia de la
librera de ahorrarnos los costosos dolores de cabeza de generar esas instrucciones SQL como
Insert, Update y Delete que requerimos y otras ms que hemos visto ya nos ayud.
My.actualizar(cursor) es el comando que nos ayudara a determinar que instruccin o
que instrucciones SQL se deben enviar a Mysql para aplicar los cambios que hicimos de forma local
en el cursor.
En el ejemplo anterior del punto 5, agreguen registros, eliminen registros, modifiquen
registros, pero apunten bien los cambios que realizaron y luego simplemente ejecutemos esta
instruccin
? My.actualizar(Lista_usuarios)
Si usamos phpmyadmin u otro programa para ver los datos del servidor mysql, veremos
que an no se ven visibles los cambios. Porque? Sencillo porque si tenemos ms tablas en las
cuales necesitamos enviar a actualizar los cambios debemos efectuar la misma instruccin
my.actualizar con el nombre del cursor correspondiente, y ya que realizamos la actualizacin de
los cursores a Mysql, si todo sali correcto es decir que cada instruccin my.actualizar devolvi .t.
o verdadero, entonces aplicamos el siguiente comando:
? My.Guardar()
Este comando aplica el commit en Mysql para finalizar los cambios, o si hubo un error en
algn my.actualizar debemos aplicar:
? my.Deshacer()
Este comando aplicara un Rollback en Mysql para deshacer los cambios y que podamos ver
que error fue y nuevamente intentar realizar el my.guardar()

Como he comentado anteriormente. DBVFP nos permite manejar los cursores a diferencia
de otras libreras que existen, por lo tanto los comandos my.guardar(), my.deshacer() tambin
contiene los comandos necesarios para manipular los cursores en memoria de VFP.
Aqu no acaban todas las bondades que tiene la librera, tambin permite obtener
nmeros consecutivos nicos, pero eso ya lo veremos en otra segunda parte, lo que me interesa
es que me apoyen usando la librera y puedan detectar algn error para corregirla y mejorarla, as
como me puedan dar concejos y opiniones para un mejor uso.

Parte de la ayuda est dentro de cada procedimiento, sin embargo algunos no estn
actualizados que he masificado, con ms tiempo los actualizare. Para que alguien me ayude con la
documentacin si es posible.

Saludos
Antonio Meza Prez

Вам также может понравиться