Documente Academic
Documente Profesional
Documente Cultură
CONEXIÓN DE
MySQL CON DEV-C++
1
MySQL con Dev-C++
2
TABLA DE CONTENIDOS
3
A. Descarga del Dev-C++
4
B. Instalación del Dev-C++
5
4) Seleccionamos el lugar donde debe ser instalado y le damos
Instalar:
5) Comienza la instalación
6
C. Proceso de Configuración Dev-C++
7
D. Instalación de MySQL
8
3) Selecciona para que tipo de Windows es (32 bits o 64 bits), y tiene
la posibilidad de descargar la versión .zip o .msi (esta última es la
que recomiendo que bajen):
9
5) Comienza la instalación, en esta ventana acepta el acuerdo de
licencia y le da Next:
10
7) En la pantalla de Instalación, presionamos Execute:
11
9) Le damos Next en esta pantalla:
12
11) Debemos ingresar una password y confirmarla, luego le
damos Next:
13
13) Seleccionamos Next en la siguiente pantalla:
14
15) Cuando finaliza con la configuración, le damos Finish:
15
17) En la pantalla de Instalación Completa, le damos Finish:
16
19) Abre la siguiente pantalla y ya esta la instalación completa:
17
E. Instalación de MySQL-Front
MySQL-Front (mysql-front.zip)
18
2. Ahora se nos presenta el Acuerdo de Licencia, seleccionamos
Acepto los términos del Acuerdo y click en Siguiente:
19
4. Aquí se nos muestra el nombre de la carpeta que tendrá los
accesos directos en el Menú Inicio, lo normal es dejarlo como está
y dar click en Siguiente:
20
6. Se nos presenta un resumen de las opciones de instalación y
damos click en Instalar para iniciar el proceso:
21
F. Configuración de MySQL Front
22
3. Ahora, en la pestaña Autenticación hay que ingresar los datos de
un usuario válido para conectarnos, en este caso ingresamos el
usuario root y la clave del mismo. (Esto fué especificado en el punto
11 sección Instalación de MySQL del paso anterior de este
manual)
23
5. Ahora nos pide que ingresemos nuevamente nuestra clave de
usuario, lo hacemos y de paso marcamos la opción Guardar
contraseña para que no nos la vuelva a pedir y click en Aceptar:
24
G. Instalación de la librería para interacción con
MySQL
25
2. Ahora se nos muestra el acuerdo de licencia, dando click en
Install se iniciará la instalación:
26
H. Creación de la base de prueba
Una vez que ingresemos damos click sobre el botón Editor SQL para que
se despliegue una ventana de comandos en la cual podamos ejecutar
instrucciones SQL.
27
En dicha ventana pegamos el siguiente código:
USE base_ejemplo;
) AUTO_INCREMENT=1 ;
28
Y se nos presenta la siguiente ventana:
Función
Descripción
Inicializa un objeto de tipo MYSQL y lo deja listo para ser usado con
mysql_real_connect y establecer una conexión. Si mysql es un
puntero NULL la función asigna la memoria, iniciliza y retorna un nuevo
objeto. En caso contrario el objeto es inicilizado y se retorna la dirección
del mismo. Si mysql_init asigna memoria a un nuevo objeto, esta será
liberada cuando se llame a mysql_close para cerra la conexión.
Valor de retorno
30
Ejemplo
Código:
MYSQL *objDatos;
Función
Descripción
31
7. Socket Unix, para conexiones locales colocar NULL.
8. Usualmente es 0.
Valor de retorno
Ejemplo
Código:
Función
Descripción
Valor de retorno
Ninguno
32
Ejemplo
Código:
mysql_close(objDatos);
Función
Descripción
Valor de retorno
Ejemplo
Código:
if(mysql_ping(objDatos)) {
cout << "Error: conexión imposible" << endl;
mysql_close(objDatos);
}
Función
33
const char *mysql_error(MYSQL *objDatos)
Descripción
Valor de retorno
Ejemplo
Código:
if(mysql_error(objDatos)[0] != '\0')
{
// Ocurrio un error
}
Función
Descripción
34
Valor de retorno
Ejemplo
Código:
if(mysql_select_db(objDatos, "base_ejemplo")) {
// Error al seleccionar base de datos.
cout << "ERROR: " << mysql_error(objDatos) << endl;
mysql_close(objDatos);
rewind(stdin);
getchar();
return 2;
}
Función
Descripción
Ejecuta una consulta SQL. Debe ser sólo una instrucción. No se puede
usar para consultas que tienen datos binarios. Se puede usar para
ejecutar instrucciones SELECT, INSERT o UPDATE
Valor de retorno
Ejemplo
Código:
35
if(mysql_query(objDatos, "SELECT * FROM personas")) {
// Error al realizar la consulta:
cout << "ERROR: " << mysql_error(objDatos) << endl;
mysql_close(objDatos);
rewind(stdin);
getchar();
return 2;
}
Función
Descripción
Valor de retorno
Ejemplo
Código:
36
// Liberar el resultado de la consulta:
mysql_free_result(res);
}
Función
Descripción
Valor de retorno
El número de filas
Ejemplo
Código:
if((res = mysql_store_result(objDatos))) {
// Numero de filas
int i = (int) mysql_num_rows(res);
// Liberar el resultado de la consulta:
mysql_free_result(res);
}
Función
Descripción
37
Valor de retorno
El número de columnas
Ejemplo
Código:
if((res = mysql_store_result(objDatos))) {
// Numero de columnas
int j = (int) mysql_num_fields(res);
// Liberar el resultado de la consulta:
mysql_free_result(res);
}
Ejemplo
Código:
i = (int) mysql_num_rows(res);
j = (int) mysql_num_fields(res);
// Mostrar el número de registros seleccionados:
cout << "Consulta: SELECT * FROM personas" << endl;
cout << "Numero de filas encontradas: " << i << endl;
cout << "Numero de columnas por fila: " << j << endl;
Función
38
Descripción
Valor de retorno
Ejemplo
Código:
Función
Descripción
Valor de retorno
39
Una estructura de tipo MYSQL_ROW o NULL si no hay filas o si ocurrió
algún error.
Ejemplo
Código:
Función
Descripción
Valor de retorno
Ejemplo
Código:
40
// Leer registro a registro y mostrar:
l=1;
for(l = 0; l < i; l++) {
row = mysql_fetch_row(res);
lon = mysql_fetch_lengths(res);
cout << "Registro no. " << l+1 << endl;
// Mostrar cada campo y su longitud:
for(k = 0 ; k < j ; k++) {
cout << ((row[k]==NULL) ? "NULL" : row[k]);
cout << " longitud: " << lon[k] << endl;
}
}
Función
Descripción
Valor de retorno
Ninguno.
Ejemplo
Código:
// 3ª fila:
mysql_data_seek(res, 2);
row = mysql_fetch_row(res);
41
cout << "Tercera fila" << endl;
for(k = 0 ; k < j ; k++) {
cout << ((row[k]==NULL) ? "NULL" : row[k]) << endl;
}
Función
Descripción
Valor de retorno
Ejemplo
Código:
42
cout << "ERROR: " << mysql_error(objDatos) << endl;
mysql_close(objDatos);
return 2;
}
if((res = mysql_use_result(objDatos))) {
j = (int) mysql_num_fields(res);
while(row = mysql_fetch_row(res)) {
for(k = 0 ; k < j ; k++)
cout << ((row[k]==NULL) ? "NULL" : row[k]) << endl;
}
43
J. EJERCICIO Nro. 1: Conexión MySQL con Dev-
C++
44
3)Luego seleccionamos el cuadro Directorie, y en la solapa Library
Directories, ponemos lo siguiente, y le damos adicionar: C:\Program
Files\MySQL\MySQL Server 5.7\lib
45
5)Copiamos del directorio mostrado en la siguiente imagen, el
objeto libmysql.dll en el directorio donde guardamos el proyecto:
// Includes...
#include <iostream>
#include <mysql.h>
#include <mysqld_error.h>
// Programa principal
int main()
MYSQL *obj;
46
// Verificar que se cree bien el objeto MySQL
if(!(obj = mysql_init(0)))
else{
return 0;
47
Tomar en cuenta que se debe reemplazar la palabra clave por la
contraseña real del usuario root.
48
K. EJERCICIO Nro. 2: Creación del proyecto
Lectura Base de Datos de MySQL con Dev-
C++
49
3)Luego seleccionamos el cuadro Directorie, y en la solapa
Library Directories, ponemos lo siguiente, y le damos adicionar:
C:\Program Files\MySQL\MySQL Server 5.7\lib
50
5)Copiamos del directorio mostrado en la siguiente imagen, el
objeto libmysql.dll en el directorio donde guardamos el
proyecto:
/*
Name: main.cpp
usando MySQL.
*/
// Includes...
#include <iostream>
#include <windows.h>
#include <mysql.h>
#include <mysqld_error.h>
#include <cstring>
#include <cstdio>
51
// Programa principal
int main()
// Variables
MYSQL *objDatos;
MYSQL_RES *res;
MYSQL_ROW row;
MYSQL_FIELD *columna;
int i, j, k, l;
MYSQL_ROW_OFFSET pos;
if(!(objDatos = mysql_init(0))) {
rewind(stdin);
getchar();
return 1;
52
cout << "Imposible conectar con servidor mysql en el puerto "
<< MYSQL_PORT << " Error: " << mysql_error(objDatos) << endl;
mysql_close(objDatos);
rewind(stdin);
getchar();
return 1;
if(mysql_select_db(objDatos, "base_ejemplo")) {
mysql_close(objDatos);
rewind(stdin);
getchar();
return 2;
mysql_close(objDatos);
rewind(stdin);
53
getchar();
return 2;
if((res = mysql_store_result(objDatos))) {
i = (int) mysql_num_rows(res);
j = (int) mysql_num_fields(res);
cout << "Numero de columnas por fila: " << j << endl;
columna = mysql_fetch_field(res);
cout << "Valor por defecto: " << (columna->def ? columna->def : "NULL") <<
endl;
54
cout << endl;
columna = mysql_fetch_fields(res);
cout << "Valor por defecto: " << (columna[l].def ? columna[l].def : "NULL") <<
endl;
cout << endl << "Informacion sobre columna 1:" << endl;
cout << "Valor por defecto: " << (columna->def ? columna->def : "NULL") <<
endl;
l=1;
55
row = mysql_fetch_row(res);
lon = mysql_fetch_lengths(res);
cout << endl << "Registro no. " << l+1 << endl;
mysql_data_seek(res, 2);
row = mysql_fetch_row(res);
mysql_free_result(res);
56
// El mismo proceso usando mysql_use_result:
mysql_close(objDatos);
rewind(stdin);
getchar();
return 2;
if((res = mysql_use_result(objDatos))) {
j = (int) mysql_num_fields(res);
cout << endl << endl << "Mostrando filas usando: mysql_use_result";
while(row = mysql_fetch_row(res)) {
mysql_free_result(res);
57
// Cerrar la conexión
mysql_close(objDatos);
rewind(stdin);
getchar();
return 0;
58
L. Ejercicio Nro.3: Inserción, Actualización y
eliminación de datos (Sistema de altas y
bajas)
#include <windows.h>
#include <mysql.h>
#include <mysqld_error.h>
class sql_db
{
private:
char *servidor, *usuario, *password, *database;
MYSQL *objDatos;
public:
sql_db(char *servidor, char *usuario, char *password, char *databas
e);
~sql_db();
void sql_close();
MYSQL_RES * ejecutar_sql(char *sql);
int numero_filas(MYSQL_RES *res);
int filas_afectadas();
int numero_columnas(MYSQL_RES *res);
const char *nombre_columna(MYSQL_RES *res, int indice);
int longitud_columna(MYSQL_RES *res, int indice);
const char *valor_defecto_columna(MYSQL_RES *res, int indice);
MYSQL_ROW obtener_fila(MYSQL_RES *res);
void fijar_fila(MYSQL_RES *res, int indice);
unsigned long ultimo_id();
59
};
Código:
sql_db :: ~sql_db()
{
60
this->sql_close();
}
if(mysql_query(objDatos, sql)) {
// Error al realizar la consulta:
cout << "ERROR: " << mysql_error(objDatos) << endl;
this->sql_close();
rewind(stdin);
getchar();
exit(2);
}
return mysql_store_result(objDatos);
}
61
}
62
) AUTO_INCREMENT=1 ;
struct persona{
int id;
char nombre[20];
char apellido[20];
int edad;
char direccion[40];
};
Fíjense que hemos definidos los mismos nombres tanto para los campos
en la tabla como para los elementos de la estructura, aunque esto no es
necesario.
Lo importante aquí es que los campos de la estructura sean lo más
parecidos posible a los campos de la tabla en cuanto a tipos de dato y
longitud, es decir si el campo en la tabla es int(3) en nuestra estructura
el elemento será int, si en la tabla es varchar(20), en la estructura
será char [20] y así sucesivamente.
Para poder trabajar en mejor forma vamos a definir un tipo de dato para
nuestra estructura con la línea siguiente:
63
Luego vamos a definir un objeto de tipo sql_db en el cual especificamos
los parametros de conexion a la base, estos son: servidor, usuario, clave
y base inicial:
Y su implementación es:
Código:
void ingresar()
{
Persona info;
64
edad, direccion) VALUES('%s', '%s', %d, '%s')";
obj_mysql.ejecutar_sql(consulta);
}
void buscar()
{
char nombre[20];
char *consulta;
char sentencia[] = "SELECT * FROM personas WHERE nombre='%s'";
MYSQL_RES *res;
MYSQL_ROW row;
if(obj_mysql.filas_afectadas()>0)
{
row = obj_mysql.obtener_fila(res);
cout << "Id: " << row[0] << endl;
cout << "Nombre: " << row[1] << endl;
cout << "Apellido: " << row[2] << endl;
cout << "Edad: " << row[3] << endl;
cout << "Direccion: " << row[4] << endl;
}
else
cout << "Persona no encontrada" << endl;
}
void modificar()
{
char nombre[20];
char *consulta;
char *temp;
char sentencia[] = "SELECT * FROM personas WHERE nombre='%s'";
MYSQL_RES *res;
65
MYSQL_ROW row;
Persona info;
if(obj_mysql.filas_afectadas()>0)
{
row = obj_mysql.obtener_fila(res);
sprintf(temp, "%s", row[0]);
info.id = atoi(temp);
cout << "Ingrese nombre: ";
cin >> info.nombre;
cout << "Ingrese apellido: ";
cin >> info.apellido;
cout << "Ingrese edad: ";
cin >> info.edad;
cout << "Ingrese direccion: ";
cin >> info.direccion;
actualizar(info);
cout << "Datos actualizados exitosamente" << endl;
}
else
cout << "Persona no encontrada" << endl;
}
void eliminar()
{
66
char nombre[20];
char *consulta;
char *temp;
char sentencia_buscar[] = "SELECT * FROM personas WHERE
nombre='%s'";
char sentencia_eliminar[] = "DELETE FROM personas WHERE id=%d";
MYSQL_RES *res;
MYSQL_ROW row;
Persona info;
if(obj_mysql.filas_afectadas()>0)
{
row = obj_mysql.obtener_fila(res);
sprintf(temp, "%s", row[0]);
int id = atoi(temp);
consulta = new
char[strlen(sentencia_eliminar)+sizeof(int)];
sprintf(consulta, sentencia_eliminar, id);
obj_mysql.ejecutar_sql(consulta);
cout << "Datos eliminados exitosamente" << endl;
}
else
cout << "Persona no encontrada" << endl;
}
void ordenar()
{
MYSQL_RES *res;
MYSQL_ROW row;
int filas, columnas;
cout << "--- Listado de personas (" << filas << ") ---" <<
67
endl;
while(row = obj_mysql.obtener_fila(res))
{
for(int j=0; j < columnas; j++)
{
cout << row[j] << ", ";
}
cout << endl;
}
cout << "Se han ordenado los registros por: nombre" << endl;
}
void mostrar()
{
MYSQL_RES *res;
MYSQL_ROW row;
int filas, columnas;
cout << "--- Listado de personas (" << filas << ") ---" <<
endl;
while(row = obj_mysql.obtener_fila(res))
{
for(int j=0; j < columnas; j++)
{
cout << row[j] << ", ";
}
cout << endl;
}
}
68
char menu(void)
{
char c;
cout << "(1)Ingresar, (2)Buscar, (3)Modificar, (4)Eliminar,
(5)Ordenar, (6)Mostrar lista, (7)Salir" << endl;
printf("Seleccion: ");
c=getchar();
cout << endl;
return(c);
}
void pausa()
{
cout << endl;
system("PAUSE");
cout << endl;
}
for( ; ; )
{
fflush(stdin);
switch(op=menu())
{
case '1':
ingresar();
pausa();
break;
case '2':
buscar();
pausa();
break;
case '3':
modificar();
69
pausa();
break;
case '4':
eliminar();
pausa();
break;
case '5':
ordenar();
pausa();
break;
case '6':
mostrar();
pausa();
break;
case '7':
break;
default :
cout << "Opcion no valida";
pausa();
break;
}
if(op=='7') break;
system("CLS");
}
return 0;
}
70