Mensaje    Asunto: Conectarse a MySQL utilizando la api directamente. Responder citando

No encontre nada en el foro sobre este tema y tras buscar un poco por internet conseguí enlazar con el servidor MySQL con el Builder.

Creo que puede servir de ayuda a la gente y por eso muestro los pasos necesarios para hacer esto posible.

1º - Antes de nada copiamos la dll de MySQL libmysql.dll donde tengamos almacenados los fuentes del programa.

2º - Creamos la libreria ayudandonos de la herramienta de borland implib. Su uso es muy sencillo; desde la línea de comando escribimos implib libmysql.lib libmysql.dll. Haremos lo mismo pero usando otra herramienta de borland llamada impdef, su uso es igual de sencillo: impdef libmysql.def libmysql.dll.

3º - Una vez hecho esto añadimos ambos archivos resultantes (libmysql.lib y libmysql.def) al proyecto.

4º - Ahora nos metemos con los archivos de cabeza de MySQL. En concreto tenemos que tratar mysql.h. Debemos reemplazar el código de esta manera:

Código:

#ifdef __LCC__
#include <winsock.h> /* For windows */
#endif


por esto

Código:

#if ( defined(__LCC__) || defined(__WIN__) )
#include <winsock.h> /* For windows */
#endif


Allí donde vayamos a trabajar con la base de datos tendremos que escribir lo siguiente:

Código:

#define __WIN__
#include "mysql.h"


5º - Bueno, ahora solo queda inicializar la dll,

Código:

MYSQL *mySQL;

mySQL = mysql_init(NULL);


6º - Finalmente pongo un ejemplo para que veais el modo de trabajo:

Código:

MYSQL  *conn;
MYSQL_RES *myRES;
MYSQL_ROW myROW;
AnsiString aStr;

conn = mysql_init (NULL);

if (conn == NULL)
     ShowMessage("mysql_init() ha fallado (seguramente fuera de  memoria)");
if(mysql_real_connect
(
      conn,             /* puntero de conexión al handler */
      "171.0.0.1",    /* nombre del servidor a conectarse */
      "usuario",       /* nombre de usuario */
      "contrasena",  /* contraseña */
      "basedatos",   /* base de datos a usar */
      0,                  /* puerto (usar por defecto) */
      NULL,             /* socket (usar por defecto) */
      0)                  /* flags (ninguno) */
== NULL)
{
      ShowMessage(mysql_error(conn));
}
else ShowMessage("Conectado");

myRES = mysql_list_tables(conn, NULL);
if(myRES)
{
                for(unsigned int i = 0; i < myRES->row_count; i++)
                {
                        myROW = mysql_fetch_row(myRES);
                        for(unsigned int j = 0; j < mysql_num_fields(myRES); j++)
                        {
                                aStr.sprintf("%s", myROW[j]);
                                ComboBox1->Items->Add(aStr);
                        }
                }
                mysql_free_result(myRES);
        }

mysql_close(conn);


Bueno eso es todo, espero que le sirva a alguien, saludo.