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