No es un bug, es una característica no documentada

17/12/14

Entornos de desarrollo. PHPMyAdmin

9:24 Posted by Inazio No comments
Entramos en el servidor PHPMyAdmin y creamos una base de datos por cada alumno.

Vamos a crear las tablas que usaremos para almacenar los movimientos del Conecta4, con la siguiente estructura:


Que visto de otra forma sería

Partida
     id: int autoincremental. Clave primaria
     jugador1: varchar(1)
     jugador2: varchar(1)
     fecha: datetime

Movimientos
     id: int autoincremental. Clave primaria
     turno: varchar(1)
     fila: int
     columna: int
     id_partida: int. Clave ajena de partida.id

Para ello, nos conectaremos al servidor de PHPMyAdmin (192.168.2.25/phpmyadmin) y nos logueamos como dam1:dam1mysql.

Creamos una nueva base de datos, cada alumno una distinta


Accedemos a nuestra base de datos, la mia es dam1_inazio, y una vez dentro nos vamos a Estructura, donde creamos la tabla movimientos, con 5 columnas (aunque en la imagen ponga 4, que se tuvo que corregir a posteriori)


Añadimos los campos pertinentes, con sus correspondientes características vistas antes, y pulsamos Guardar


Vamos a poder ver la nueva tabla creada


Si pulsamos en examinar nos dirá que MySQL ha devuelto valores vacios, esto es porque aún no tenemos columnas dentro


Y si pulsamos en estructura veremos la configuración de nuestros campos, que podemos modificarla a posteriori


A continuación vamos a crear la tabla partida. Mismo procedimiento, con cuatro columnas, que las definiremos de la siguiente manera


Quedando los campos tal que así


Lo que haremos a continuación será insertar los datos para crear dos nuevas partidas. Para ello, sobre la tabla partida, en el menú superior nos vamos a Insertar


Veremos una nueva ventana, en la que indicaremos el valor para los movimientos del jugador1 (X por la estructura del programa en C) y del jugador2 (O). Además, en el campo fecha usaremos la función NOW, que almacena día y hora actual en el que se crea. Posteriormente pulsamos continuar y repetimos pasos para crear otra partida. El campo id es autoincremental, así que lo ignoramos


Quedará tal que así


Y ahora ha llegado el turno de los movimientos, pero estos debemos enlazarlos previamente a la partida correspondiente.

Para ello nos vamos a la tabla movimientos, en la sección Estructura, y pulsamos sobre Vista de relaciones


Lo que veremos aquí es como se interrelacionan las tablas, creando dichas conexiones nosotros. Escogemos el campo id_partida y le indicamos que se relacionará con el campo id de la tabla partida, es decir, en mi caso, dam1_inazio.partida.id. Y guardamos


Ahora ya podemos crear los movimientos pertinentes. En turno indicamos quien moverá, la fila y la columna en la que se posicionará el movimiento, y en el último campo, seleccionamos de la lista desplegable la partida a la que corresponde este movimiento. Nuevamente creamos dos movimientos, uno para cada jugador, y pulsamos en continuar.


Si se han añadido correctamente veremos el siguiente mensaje




El siguiente paso será modificar nuestro programa para conectarnos a esta base de datos y visualizar los movmientos.

Es decir, cambiaremos estos parámetros en main.c


El código de la conexión a la base de datos, después de los parámetros modificados, sería el siguiente

#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>

int main()
{

    //char *consulta="SELECT * FROM persona;";

    char *servidor="192.168.2.25";
    char *usuario="dam1";
    char *password="dam1mysql";
    char *bd="dam1_inazio";

    MYSQL *conexion=mysql_init(NULL);
    MYSQL_RES *resultado;
    MYSQL_ROW registro;
    unsigned int num_campos;
    int i;

    char *consulta="SELECT * FROM movimientos;";
    /*
    Inicializamos la estructura
    */
    if ( conexion == NULL ){
        fprintf(stderr,"La inicialización de la estructura MYSQL* ha fallado. Posible falta de memoria.\n");
        return 0;
    }

    /*
    Ejecutamos la conexión.
    Los parámetros necesarios se guardan en la estructura MYSQL
    */

    if ( mysql_real_connect( conexion, servidor, usuario, password, bd, 0, NULL, 0 ) == NULL ){
        /*Si la función falla devuelve null*/
         fprintf(stderr,"La conexión con el servidor ha fallado con el siguiente error: %s.\n", mysql_error(conexion));
        return 0;
    }

    //Ejecutamos la consulta
    if ( mysql_query(conexion,consulta) != 0 ){
        //Si la consulta falla devuelve un valor distinto de 0
        fprintf(stderr, "La consulta ha fallado\n");
        return 0;
    }
    //Obtenemos el resultado de la consulta
    if ( (resultado=mysql_use_result(conexion)) == NULL ){
        //Si la obtención falla devuelve null
        fprintf(stderr, "La obtención del resultado ha fallado\n");
        return 0;
    }
    //Obtenemos el número de campos de cada registro
    //que ha obtenido la consulta
    num_campos=mysql_num_fields(resultado);
    //Obtenemos uno a uno todos los registros
    //hasta que sale la función mysql_fetch_row devuelve null
    while ( ( registro=mysql_fetch_row(resultado) ) != NULL){

        //recorremos todo el registro obtenido
        //gracias al número de campos obtenido antes.
        for(i=0;i<num_campos;i++){
            //imprimimos uno por uno todos los datos/campos del registro
            fprintf(stdout, "%s | ", registro[i]);
        }
        fprintf(stdout, "\n");

    }
    //Liberamos la memoria de resultado
    mysql_free_result(resultado);
    //Cerramos la conexión
    mysql_close(conexion);
    return 0;
}

Con lo que ya podríamos visualizar nuestra tabla. Recordar que este código está pensado para Linux, es posible que en Windows no funcione correctamente.

Lo que haremos será instalar el mysql-connector-c-6.1.5-win32, es decir, el connector de 32 bits (puedes descargarlo desde aquí), ya que el de 64 bits da problemas en nuestro ordenador

Una vez instalado, nos vamos a comprobar que en C:\Program Files (x86)\MySQL existe la carpeta include


y dentro de esta carpeta los archivos include\mysql.h y lib\libmysql.lib

Nos vamos de nuevo al CodeBlocks, Build Options y en Debug - Search directories - Compiler añadimos la ruta por C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\include


En Search directories - Linker escribimos el directorio C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\lib


y en la sección Linker settings modificamos la ruta por C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\lib\libmysql.lib



Si ahora probamos a compilar veremos que lo hace perfectamente



0 comments:

Publicar un comentario