Académique Documents
Professionnel Documents
Culture Documents
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
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
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).
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
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
#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
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])
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:
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