UNIDAD 7: INTRODUCION A LAS BASES DE DATOS

TEMA LINUX GCC 7: CONSULTA O DESPLIEGUE O SELECCION

Existen una serie de operaciones y procesos que son muy comunes contra una tabla en una base de datos en disco, la mas común es desplegar todos los renglones de la tabla que estan almacenados en disco, a este proceso le llamaremos SELECCION, consulta o despliegue.

Como se indico anteriormente la comunicación con la base de datos se tendran que dar usando el lenguaje especializado de bases de datos llamado SQL(structured query language), la instrucción sql que se usa para resolver este problema tiene el siguiente formato:

SELECT [listacampos, * o ALL] FROM TABLA;

El procedimiento que se intenta seguir cuando se construya un programa asp.net que tenga que manipular una tabla en disco debera seguir los siguientes pasos:

1.- Crear una conección o enlace a la base de datos.

2.- Abrir la conección a la base de datos.

3.- Crear el enlace y cargarlo con la instruccion sql

4.- Crear el resultset y cargarlo

5.- Cargar un objeto table de html con el dataset

6.- Procesar el table de html (editar un renglon, agregar un renglon, modificar un renglon, etc)

7.- Cerrar la conección

prog37.cpp

lo ejecutaremos directamente con:

http://192.168.1.251/~lauro/cgi-bin/prog37.cgi

#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>
using namespace std;
#include <mysql.h>
int main()
{
// crando variables globales
MYSQL coneccion;
MYSQL_RES *resultset;
MYSQL_ROW renglon;
// construyendo pagina y tabla salida
cout << "Content-type: text/html\n\n";
cout << "<html>" << endl;
cout << "<TABLE Border=10 CellPadding=5><TR>" << endl ;
cout << "<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th>" << endl;
cout << "<th bgcolor=Red>EDAD</th><th bgcolor=Blue>ESTATURA</th> </TR>"<< endl;
// inicializando y conectando
if ( mysql_init(&coneccion) == NULL)
cout << "error inicializando" << endl;
if ( mysql_real_connect(&coneccion,"localhost","USUARIO","PASWSWORD","mibase",0,NULL,0) == NULL )
cout << "error conectando" << endl;
// construyendo y enviando query
char q[100];
strcpy(q,"select * from mitabla") ;
if ( mysql_query(&coneccion,q) !=0) cout << "error en query" << endl;
// cargando el resultset con la tabla en disco
resultset = mysql_store_result(&coneccion);
if ( resultset==NULL) cout << "error en resultset" << endl;
// construyendo tabla html de despliegue
// y usando algunas funciones de mysql_
for(int r=1; r <= mysql_num_rows(resultset); r++)
{ renglon = mysql_fetch_row(resultset);
cout << "<TR>" << endl ;
cout << "<TD>" << renglon[0] << "</TD>" << endl;
cout << "<TD>" << renglon[1] << "</TD>" << endl;
cout << "<TD>" << renglon[2] << "</TD>" << endl;
cout << "<TD>" << renglon[3] << "</TD>" << endl;
cout << "</TR>"<< endl ;
};
// liberando la memoria del servidor del resultset
cout << "</table> </html>" << endl;
mysql_free_result(resultset);
mysql_close(&coneccion);
exit(0);
}

Atencion la manera de compilar debera cambiarse de la siguiente manera tal como lo muestra la pantalla de putty:

  1. g++ -I/usr/include/mysl prog.cpp
  2. g++ -o prog.cgi prog.o -L/usr/lib/mysql -lmysqlclient
  3. chmod 755 prog.cgi

La razon es porque estamos usando un monton de nuevas funciones (las de mysql) en nuestros programas y tenemos que incluirlas o enlazarlas de la manera descrita a la hora de compilar.

image114.jpg

corrida prog37.cgi

image115.jpg

notas:

1.- revisar con cuidado el programa, proque como todo buen programa lleva incluida mucha documentación o explicación.

2.- Se sigue el procedimiento generico para procesar tablas

3.- Observar y siempre incluir los headers(.h) y namespaces indicados.

4.- Se empieza creando los objetos globales a ocupar e inicializando y abriendo la conección a la base de datos.

5.- Se crea una string q con la instrucción sql y se manda via una instruccion mysql_query() con la coneccion y la string q.

6.- Luego se carga el resultset con mysqel_store_result() y recordar de nuevo que esta instrucción mysql_store_resultset() solo se empleara cuando se mande un select a la base de datos, no cuando se mande insert, update, delete.

7.- Posteriormente se carga el TABLE DE HTML con el dataset.

8.- Recordar que la tabla del resultset, empieza con el renglon 1 y empieza en la columna 0.

9.- Para visitar o procesar todos los renglones de la tabla del resultset se usa un ciclo for renglon hasta mysql_num_rows().

10.- Para extraer cada renglon del resultset se usa la instrucción mysql_fetch_row().

11.- Para procesar un dato, celda o columna de un renglon cualesquiera se usarara el objeto renglon derivado de MYSQL_ROW; que en realidad es un arreglo con el siguiente formato :

renglon[numcolumna].

12.- No olvidar liberar el resultset con mysql_free_result() y cerrar la conección o enlaze con Mysql_close().

TAREAS PROGRAMACION LINUX GCC PROGRAMACION LINUX GCC

1.- construir y desplegar una primera base de datos que contenga la primera tabla que diseñarón en el TEMA LINUX GCC de tablas.

2.- Construir una segunda base de datos que contenga cuando menos tres de las tablas ya diseñadas y desplegar cualquiera de ellas usando una sola forma html, donde el usuario selecciona cual quiere desplegar.

Politica de Privacidad