MySql - ¿Cómo construir la interfase para acceder a MySql?
Previous topic  First topic  Next topic


Los compiladores [x]Harbour proveen una capa de acceso a la base de datos MySql mediante un set de funciones provistas como Contribución.

Esta capa de acceso se compone de una librería estandard con las funciones antes mencionadas (MySql.lib en [x]Harbour para BCC32 y Pelles C y LibMySql.a en [x]Harbour para MinGW) y de una Librería de Interfase (ver tópico: ¿Cómo crear una Librería de Interfase para acceso a DLL's?) para acceso a las funciones de la DLL que provee MySql (LibMySql.lib en [x]Harbour para BCC32 y Pelles C y LibMySqlDll.a en [x]Harbour para MinGW)

La DLL de MySql se llama LibMySql.dll y generalmente se encuentra en el directorio \Lib\opt y en el directorio \Bin de la instalacion de MySql.

Algunas distribuciones de minigui o de [x]Harbour traen compiladas estas dos librerías listas para su uso. El problema radica en que ambas librerias deben ser creadas con elementos provistos por la version de MySql que querramos acceder, es decir, que esta capa de acceso a MySql pudo haber sido creada con una versión mas vieja de MySql y que nos traiga problemas al momento de usarla, es por eso que a continuacion vamos a explicar como se hace para construir esta capa de acceso desde cero basandonos en los fuentes aqui provistos: MySql.zip

Los fuentes fueron extraídos de las contribuciones de Harbour y xHarbour y tienen unas pequeñas adaptaciones para poder ser compilados desde QPM

Nota: Esta librería fue testeada con MySql 5.00.24a, con otras versiones podrian presentarse errores en los procesos de generacion de la libreria.


  • Generación de la capa de Acceso para librerias minigui que usen BCC32 y Pelles C
  • :

    En este ejemplo usaremos oohg (Object Oriented Harbour Gui) como MiniGui, los compilador xHarbour, BCC32 y llamaremos de la siguiente forma a las dos librerías que construiremos:
    Librería de Funciones: FunMySql.lib
    Librería de Interfase: DllMySql.lib

    Asumiremos que la instalación de MySql esta en el directorio c:\MySql

    Para construir la libreria FunMySql.lib hay que crear un proyecto de tipo LIB, seleccionar oohg como MiniGui y xHarbour como compilador.
    Renombrar la libreria como FunMySql (mediante la opcion Rename de Project Options)
    Tambien es interesante utilizar la opcion de agregar un sufijo a la libreria resultante. Haga click aqui para aprender más sobre sufijos
    Luego hay que incluir los siguientes fuentes:
    MySql.c
    TSqlBrw.prg
    TMySql.prg

    desde el subdirectorio \xHarbourSource
    En la pestaña de Headers (H & CH) es necesario incluir los siguientes encabezados:
    MySql.ch (desde \xHarbourSource)
    MySql.h (desde c:\MySql\include,
    esta es una de las dependencias de la version de MySql ya que se distribuye directamente con la base de datos)



    En este momento estamos en condiciones de hacer build de nuestro proyecto:



    El resultado de esta generacion lo podemos observar en la pestaña de Output Error/Module:



    Una vez que hayamos contruido la libreria de funciones propias de xHarbour para la capa de acceso a MySql sólo nos falta construir la Librería de Interfase para poder utilizar las funciones de la DLL que nos provee MySql.

    Para ello crearemos un proyecto de tipo Interface Library y seleccionaremos la minigui con la cual se usará la librería, y luego elegimos el compilador C (BCC32 o Pelles C).
    Esta librería de Interfase la llamaremos DllMySql.lib, para ello usaremos la opcion de Rename de QPM.



    Luego se elige la DLL que nos servirá de entrada en el proceso de construccion de la librería de interfase. La DLL en cuestión es la distribuida con la instalación de MySql, se llama LibMySql.dll, se encuentra en el subdirectorio \lib\opt de la instalación de MySql (en nuestro ejemplo c:\MySql\lib\opt)
    y es la segunda de las restricciones por la cual podría no funcionarnos la capa de acceso a MySql que viene contruida con nuestro compilador [x]Harbour.
    Note que QPM listará automaticamente el contenido de la DLL.

    En el caso de Pelles C tildamos la opción Add '_' alias



    Luego se hace Build del proyecto y se genera la Librería de Interfase.

    Nota: El archivo con extension def que se elimina al final del proceso es un archivo temporal.



    El resultado del proceso, es decir, el contenido de la Librería de Interfase que acabamos de crear se puede ver en Output Error/Module mediante el botón List Output File (or ReList)




  • Generación de la capa de Acceso para librerias minigui que usen MinGW
  • :

    En este ejemplo usaremos Oficial Minigui 3.x, el compilador Harbour y llamaremos de la siguiente forma a las dos librerías que construiremos:
    Librería de Funciones: LibFunMySql.a
    Librería de Interfase: LibDllMySql.a

    Nota: Recordar que MinGW agrega automaticamente el prefijo Lib a las librerías

    Asumiremos que la instalación de MySql esta en el directorio c:\MySql

    Para construir la libreria LibFunMySql.a hay que crear un proyecto de tipo LIB, seleccionar Oficial MiniGui 3.x y Harbour como compilador.
    Renombrar la libreria como FunMySql (mediante la opcion Rename de Project Options) (QPM agregará el prefijo Lib automaticamente)
    Tambien es interesante utilizar la opcion de agregar un sufijo a la libreria resultante. Haga click aqui para aprender más sobre sufijos
    Luego hay que incluir los siguientes fuentes:
    MySql.c
    TSqlBrw.prg
    TMySql.prg

    desde el subdirectorio \HarbourSource
    En la pestaña de Headers (H & CH) es necesario incluir los siguientes encabezados:
    MySql.ch (desde \HarbourSource)
    MySql.h (desde c:\MySql\include,
    esta es una de las dependencias de la version de MySql ya que se distribuye directamente con la base de datos)



    En este momento estamos en condiciones de hacer build de nuestro proyecto:



    El resultado de esta generacion lo podemos observar en la pestaña de Output Error/Module:



    Una vez que hayamos contruido la libreria de funciones propias de Harbour para la capa de acceso a MySql sólo nos falta construir la Librería de Interfase para poder utilizar las funciones de la DLL que nos provee MySql.

    Para ello crearemos un proyecto de tipo Interface Library y seleccionaremos la minigui con la cual se usará la librería (OOHG 3.x u Oficial MiniGui 3.x), y luego elegimos el compilador C (MinGW).
    Esta librería de Interfase la llamaremos LibDllMySql.a, para ello usaremos la opcion de Rename de QPM.

    Nota: Recordar que bastará con codificar DllMySql ya que QPM agregará el prefijo Lib en forma automática



    Luego se elige la DLL que nos servirá de entrada en el proceso de construccion de la librería de interfase. La DLL en cuestión es la distribuida con la instalación de MySql, se llama LibMySql.dll, se encuentra en el subdirectorio \lib\opt de la instalación de MySql (en nuestro ejemplo c:\MySql\lib\opt)
    y es la segunda de las restricciones por la cual podría no funcionarnos la capa de acceso a MySql que viene contruida con nuestro compilador [x]Harbour.
    Note que QPM listará automaticamente el contenido de la DLL.



    Para este caso en particular (me refiero a MySql) usaremos el método alternativo de construcción de la libreria de interfase que consiste en tomar como guia para la obtencion de la lista de funciones de la DLL (reimportar) a otra librería de interfase contruida para BCC32 y provista por MySql.
    Esto se hace tildando la opcion "Reimport from .Lib library" y eligiendo como libreria la que se encuentra en el mismo directorio de la DLL llamada LibMySql.lib



    Luego se hace Build del proyecto y se genera la librería de interfase.

    Nota: El archivo con extension def que se elimina al final del proceso es un archivo temporal.





    El resultado del proceso, es decir, el contenido de la librería de interfase que acabamos de crear se puede ver en Output Error/Module mediante el botón List Output File (or ReList)




  • ¿Cómo compilar el sample de MySql?
  • :

    El sample que se encuentra en los fuentes que se adjuntan en este help son válidos tanto para las minigui que usan BCC32, Pelles C, como para las que usan MinGW aunque en este tutorial usaremos oohg, xHarbour y BCC32 (solo se hace mencion a MinGW para mostrar la diferencia que hay en los nombres de librerias a Incluir/Excluir, el resto es similar).

    Para compilar dicho demo es necesario crear un proyecto de tipo EXE y elegir la minigui oohg junto con xHarbour.

    Luego agregamos el fuente llamado Demo_1.prg

    En la pestaña de Librerias hay que incluir las dos librerias que acabamos de construir:

    Es conveniente EXCLUIR las originales librerias que venian con el compilador xHarbour agregandolas en la lista de exclude:


    MySql.lib y LibMySql.lib en [x]Harbour para BCC32 y LibMySql.a y LibMySqlDll.a en [x]Harbour para MinGW

    Para BCC32 y Pelles C:



    Para MinGW:



    Luego hacemos build de nuestro proyecto y si todo sale bien y MySql esta bien instalado y funcionando correctamente, ya estamos en condiciones de usar el demo

    En algunos casos, cuando se compila con Harbour, la linkedicion del Sample va a requerir de dos funciones de OLE:
    TOLEAUTO() y OLE2TXTERROR()
    Para solucionar este tema ver el topico
    ¿Cómo construir la librería de enlace dinámico?
    En las nuevas versiones de xHarbour no sucede porque la libreria OLE paso a formar parte de la distribucion oficial.



    Para el caso de Harbour y para mas seguridad de que se estan usando nuestras librerias, tambien es aconsejable eliminar o renombrar las librerias de mySql que trae la minigui (usualmente en el directorio \LIB de Harbour)


    Nota: Tambien he notado que en algunos casos la capa de acceso a MySql tiene coliciones con funciones que se encuentran dentro de la librería hbodbc.lib (Libhbodbc.a para MinGW), y esto provoca que nuestra aplicacion cancele abruptamente en el momento de conectarse con MySql, por lo tanto, si se encuentra concatenada en la linkedicion es preferible excluirla.
    Si no fuera posible excluirla, se aconseja concatenarla despues de las dos librerias de MySql que hemos creado, ya sea mediante el atributo *First* para nuestras librerias como excluyendo la libreria hbodbc y luego incluyendola detras de nuestras dos librerias.


    QPM (QAC Based Project Manager) Version 05.05.0016

    Compilación Incremental con las tres versiones de librerías mas populares de la familia MiniGui: HMG, HMG Extended y OOHG.

    Lista de usuarios    Donar vía PayPal    Sitio del proyecto


    Powered by QPM  

    Previous topic  First topic  Next topic