Академический Документы
Профессиональный Документы
Культура Документы
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.
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")
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.
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