Vous êtes sur la page 1sur 7

Manual de VFP y MysQL

I - Conexin con MySQL utilizando MyODBC

INTRODUCCIN Hoy Marzo 3 del 2004 no se me ocurre nada ya veremos ms adelante HERRAMIENTAS UTILIZADAS: A excepcin del VFP, el software utilizado se puede encontrar en www.mysql.org VFP 7.0 MySQL 4.0.17 MySQL Connector / ODBC 3.51

COMO INSTALAR MYSQL SERVER Y MYSQL CONNECTOR (DRIVER ODBC) Existe una gran cantidad de documentacin acerca del tema por lo que no lo tocar. EMPEZANDO POR EL PRINCIPIO, LA CONEXIN Crear un Data Source Name (DSN) Para crearlo de forma manual pueden consultar el sitio de Ral Licona (no recuerdo el link, pero en el foro de VFP lo pueden obtener). A m me interesa mostrar cmo crearlo por medio de cdigo, por lo que entrando en materiapara crear DSN se usa la funcin del API SQLConfigDataSource que es usada para agregar, modificar o borrar un DSN dinmicamente. La sintaxis de la funcin en C: BOOL SQLConfigDataSource( HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes); Los parmetros mostrar la ventana de dilogo, pero como queremos hacerlo transparente al usuario el valor de este parmetro ser 0 (cero). Denny Infante Jurez denny_infante@hotmail.com

hwndParent: es el handle de la ventana pariente, si se pasa un valor no nulo entonces

Manual de VFP y MysQL


I - Conexin con MySQL utilizando MyODBC

Dependiendo del valor pasado a la funcin ser la accin que realizar la funcin, los posibles valores pueden ser uno de los siguientes: Valor ODBC_ADD_DSN ODBC_CONFIG_DSN ODBC_REMOVE_DSN ODBC_ADD_SYS_DSN ODBC_CONFIG_SYS_DSN ODBC_REMOVE_SYS_DSN Descripcin Agrega un nuevo DSN de usuario Configura (modifica) un DSN de usuario existente Elimina un DSN de usuario existente Agrega un nuevo DSN de sistema Configura (modifica) un DSN de sistema existente Elimina un DSN de sistema existente

fRequest: este parmetro indica a la funcin que es lo que queremos hacer.

la conexin con la base de datos.

lpszDriver: Este parmetro indica cual es el driver de ODBC que se utilizar para realizar

En nuestro caso para indicarle que utilice el ODBC para MySQL el valor del parmetro ser MySQL ODBC 3.51 Driver, recuerden que el valor de la cadena de texto depende del driver instalado. son el nombre del servidor, la base de datos con la que se desea conectar, nombre de usuario etc; cada una de las palabras claves debe ser separada por un CHR(0).

lpszAttributes: este parmetro define los atributos (o propiedades) de la conexin, como

De las palabras claves utilizadas en el parmetro la nica requerida es SERVER, que es el Host o IP del servidor. Las palabras claves necesarias para definir completamente una conexin con MySQL mediante ODBC son: Palabra clave DSN Description DATABASE SERVER UID PWD Descripcin Nombre del DSN Descripcin del DSN Nombre de la base de datos a conectarse en el servidor Host/IP del servidor Nombre de usuario Password del usuario

Denny Infante Jurez denny_infante@hotmail.com

Manual de VFP y MysQL


I - Conexin con MySQL utilizando MyODBC La cadena mnima vlida sera, segn la documentacin es: SERVER=localhost pero tengo una duda, cmo voy a identificar el DSN, pienso que adems de la palabra clave SERVER debemos utilizar tambin DSN. En conclusin, los valores de los parmetros para crear un DSN de usuario seran:
hwndParent = 0 fRequest = ODBC_ADD_DSN lpszDriver = MySQL ODBC 3.51 Driver lpszAttributes = SERVER=localhost

Una cadena de atributos que defina completamente la conexin:


lpszAttributes = DSN=ConexionVFPMySQL + CHR(0) +; Description=Conexin con MySQL usando ODBC + CHR(0) +; DATABASE=test + CHR(0) +; SERVER=localhost + CHR(0) +; UID=root + CHR(0) +; PWD=password

Un ejemplo completo para crear un DSN de usuario


DECLARE Integer SQLConfigDataSource in odbccp32.dll; Integer, Integer, String, String #DEFINE ODBC_ADD_DSN 1 hwndParent = 0 fRequest = ODBC_ADD_DSN lpszDriver = MySQL ODBC 3.51 Driver lpszAttributes = DSN=ConexionVFPMySQL + CHR(0) +; Description=Conexin con MySQL usando ODBC + CHR(0) +; DATABASE=mysql + CHR(0) +; SERVER=localhost + CHR(0) +; UID=root + CHR(0) +; PWD=password LOCAL lRet lRet = SQLConfigDataSource(hwndParent, fRequest,; lpszDriver, lpszAttributes) IF lRet > 0 THEN ?DSN creado!! ELSE ?Error al crear ENDIF

Y para borrar un DSN; en este caso el los parmetros que cambian seran fRequest (la accin) y lpszAttributes, ste ltimo porque slo necesitamos el nombre del DSN en el caso de que se quiera borrar, si se va a modificar slo se pasa el nombre del DSN y los parmetros a cambiar. Denny Infante Jurez denny_infante@hotmail.com

Manual de VFP y MysQL


I - Conexin con MySQL utilizando MyODBC

#DEFINE ODBC_REMOVE_DSN 3 fRequest = ODBC_REMOVE_DSN lpszAttributes = DSN=ConexionVFPMySQL LOCAL lRet lRet = SQLConfigDataSource(hwndParent, fRequest,; lpszDriver, lpszAttributes) IF lRet > 0 THEN ?DSN borrado!! ELSE ?Error al borrar ENDIF

Hasta ahora todo muy sencillo, pero Cmo saber si est instalado algn driver ODBC para MySQL? Tambin esto es sencillo, necesitamos listar los driver instalados y eso se hace con el siguiente cdigo (es un ejemplo que me encontr, no recuerdo si en la MSDN o por algn lugar de internet):
LOCAL oReg,regfile,nErrNum,lDrivers PUBLIC aODBCData CLEAR regfile = HOME(2)+"classes\registry.prg" SET PROCEDURE TO (m.regfile) ADDITIVE oReg = CreateObject("ODBCReg") DIMENSION aODBCData(1) m.nErrNum = oReg.GetODBCDrvrs(@aODBCData)

con el cdigo la lista de los driver de ODBC se coloca en un arreglo, lo nico que faltara sera buscar en el arreglo si exista la palabra MySQL y listo
local iDriver iDriver = ASCAN(aODBCData, MySQL) IF iDriver > 0 THEN ?Si est instalado algn driver de ODBC para MySQL ELSE ?No se encontr driver para MySQL ENDIF

Les dejo que hagan el procedimiento para verificar si existe ms de un driver para MySQL. Con esto definimos el parmetro lpszDriver de la funcin SQLConfigDataSource. Denny Infante Jurez denny_infante@hotmail.com

Manual de VFP y MysQL


I - Conexin con MySQL utilizando MyODBC

lpszDriver = aODBCData(iDriver)

Ok, con esto se supone que ya dimos el primer paso, creamos el DSN (de usuario o sistema) para poder crear conexiones dentro de VFP para utilizar la conexin por lo que es tiempo de CONECTANDONOS CON MySQL Para la conexin con MySQL utilizaremos en el manual la tecnologa SQL Pass-Through. Para establecer una conexin con MySQL utilizamos la funcin SQLConnect cuya sintaxis es la siguiente:
SQLCONNECT([DataSourceName, cUserID, cPassword | cConnectionName])

Parmetro DataSourceName cUserID cPassword cConnectionName

Descripcin Nombre del origen de datos (DSN) Nombre de usuario Clave del usuario Nombre de la conexin creada con CREATE CONNECTION, esta opcin no la veremos en este manual ya que utilizaremos la tecnologa SQL Pass-Through

Ejemplo, estableciendo la conexin con MySQL Global hCnxMySQL hCnxMySQL = SQLConnect(ConexionVFPMySQL) Porque definimos la variable hCnxMySQL como global, pus para poder tener acceso a la conexin desde cualquier punto de la aplicacin; como comentario: esto no es vlido en programacin orientada a objetos (POO), pero como este no es el tema en el manual entonces si es vlido. El parmetro pasado es el nombre del DSN creado con anterioridad, si se defini de forma completa el DSN cuando se cre ste es el nico parmetro necesario para establecer la conexin; por el contrario si no se defini el nombre de usuario y su password (recomendable para tener algo de seguridad), se pasan esos parmetros de la siguiente forma:

Denny Infante Jurez denny_infante@hotmail.com

Manual de VFP y MysQL


I - Conexin con MySQL utilizando MyODBC Global hCnxMySQL Local lcDSN, lcUserID, lcUserPwd lcDSN = ConexionVFPMySQL lcUserID = root lcUserPwd = hCnxMySQL = SQLConnect(lcDSN, lcUserID, lcUserPwd) Si el valor de hCnxMySQL es mayor que 0 (cero) la conexin se ha establecido, ver ayuda para ms detalle. CREANDO NUESTRAS BASES DE DATOS Y TABLAS Definitivamente no utilizar todas las opciones con que cuenta MySQL para tal efecto, pero pueden consultar el manual de MySQL para detalles. Primero, la base de datos Esto si que es sencillo, para crear una base de datos la sintaxis es: CREATE DATABASE [IF NOT EXISTS] db_name De acuerdo a la sintaxis tenemos dos formas de crear una base de datos: Crendola sin verificar que exista, lo que causara un error en caso de que exista. CREATE DATABASE VFP_DB La segunda forma, verificando su existencia esto evitar que ocurra un error en caso de que la base de datos ya exista. CREATE DATABASE IF NOR EXISTS VFP_DB Cualquiera de las dos sentencias anteriores crea una base de datos con nombre VFP_DB. Ahora, las tablas No voy a poner la sintaxis para crear tablas, es muy larga, si requieren mayor informacin vean el manual de MySQL.

Denny Infante Jurez denny_infante@hotmail.com

Manual de VFP y MysQL


I - Conexin con MySQL utilizando MyODBC Vamos a crear primero una tabla de clientes con las siguientes caractersticas: Nombre del campo IDCliente Nombre Tipos Caractersticas Entero Autonumrico, llave primaria Varchar(250)

Por el momento estos son los campos que necesitamos para entretenernos :-). Sintaxis para crear la tabla Clientes (toda la instruccin debe ir en una sola lnea, se pone en varias lneas para facilitar su entendimiento) CREATE TABLE IF NOT EXISTS Clientes (IDCliente INT NOT NULL AUTO_INCREMENT PRIMARY KEY, Nombre VARCHAR(250) NOT NULL) Suponiendo que ya se est conectado con la base de datos, entonces ejecutaramos el siguiente cdigo:
LOCAL lRet =SQLExec(hCnxMySQL, USE VFP_DB) && Para asegurarnos que la tabla se crea && en la base de datos que creamos lRet = SQLExec(hCnxMySQL, CREATE TABLE IF NOT EXISTS Clientes IDCliente) IF lRet > 0 THEN ?Tabla Clientes creada ELSE ?Error al crear la tabla clients ENDIF

Ahora agregamos unos registros a la tabla


?SQLExec(hCnxMySQL, INSERT INTO Clientes (Nombre) VALUES ('Maricela') )
?SQLExec(hCnxMySQL, INSERT INTO Clientes (Nombre) VALUES ('Ana Fernanda') )

?SQLExec(hCnxMySQL, INSERT INTO Clientes (Nombre) VALUES ('Ana Sofia') )

Consultamos la tabla ?SQLExec(hCnxMySQL, SELECT * FROM Clientes) BROWSE

Denny Infante Jurez denny_infante@hotmail.com

Vous aimerez peut-être aussi