UNIDAD 7: INTRODUCION A LAS BASES DE DATOS

TEMA LINUX GCC 11: OPERACIONES CON CAMPOS

Este es tambien un caso comun con elementos de una tabla, sin embargo es tambien facil de resolver.

Es necesario recordar primero algunas cosas elementales:

1.- Recordar que el numero de columna en una tabla empieza en 0, esto es que para realizar alguna operación por ejemplo la columna edad del ejemplo que estamos siguiendo, su numero de columna es la 2.

2.- La operación que se plantee se puede realizar con todos los renglones de la tabla o con un solo renglon de la tabla(del resultset) para procesar todos los renglones se usara un ciclo for, si solo se quiere procesar un solo renglon o una celda o columna no se usar el for.

3.- Para realizar aritmetica con toda una columna, solo usar el renlon[columna] que puede ser leido directamente, solo recordar que renglon[[columna] contiene un dato de tipo string y se debera convertir a dato numerico usando las funciones de conversion de C apropiadas, en este ejemplo se uso atoi(string), pero tambien se pueden usar atof(), atol().

4.- En el ejemplo se realiza la operación con todos los renglones de la tabla y no olvidar que se tiene que usar la instruccion sql Update para que la nueva información se actualize en disco, recordar que los cambios que se hacen a la tabla, es realmente al dataset, que a su vez es una tabla o base de datos en la memoria de la maquina del cliente o usuario, y estos cambios hay que actualizarlos o pasarlos o UPDATE a la base de datos en disco.

5.- Como UPDATE ocupa la nueva edad en string y mejor dicho como arreglo de caracteres se uso la funcion sprintf(varchar,”codigoformato”,varentera); que convierte la variable entera a un arreglo de chars, los codigos de formato que se pueden usar son:

CODIGO TIPO DE DATO SALIDA

%d entero enteros con signo

%u Unsignedint enteros sin signo

%f Float y double pte entera y decimal

%e Float y double notacion exponencial usando e minuscula

%E Float y double notacion exponencial usando E mayuscula

%g ” ” el compilador decide si usa f o e

%G ” ” el compilador decide si usa f o E

%c Char un solo caracter

%s var string conjunto de caracteres

El siguiente programa le aumenta 50 a todas las edades.

Prog41.html

<HTML>
<FORM ACTION=http://192.168.1.251/~tusitio/cgi-bin/prog41.cgi METHOD=POST>
<INPUT TYPE=submit VALUE="EDAD + 50">
</FORM></HTML>

corrida prog41.html

image126.jpg

prog41.cpp

#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <lcnet.h>
#include <mysql.h>
using namespace std;
int main()
{
// crando variables globales
MYSQL coneccion;
MYSQL_RES *resultset;
MYSQL_ROW renglon;
// inicializando y conectando
if ( mysql_init(&coneccion) == NULL) cout << "error inicializando" << endl;
if ( mysql_real_connect(&coneccion,"localhost","USUARIO","PASSWORD","mibase",0,NULL,0) == NULL )
cout << "error conectando" <<endl;
// construyendo y enviando un select normal
char q[200];
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;
for(int r = 1; r <= mysql_num_rows(resultset); r++)
{
renglon = mysql_fetch_row(resultset);
//cargando y cambiando edad del arreglo
int edad = atoi(renglon[2]);
edad = edad + 50;
// y ahora regresando edad a una string para el query
char edadtemp[20];
// sprintf tambien sirve para todos los tipos numericos
sprintf(edadtemp,"%d",edad);
// construyendo el update
strcpy(q,"UPDATE mitabla SET edad = ");
strcat(q, edadtemp );
strcat(q," where clave = ");
strcat(q,renglon[0] );
mysql_query(&coneccion,q);
};
// avisando que ya se termino
cout << "Content-type: text/html\n\n";
cout << "<html>" << endl;
cout << "registros operados </html>" << endl;
// liberando la memoria del servidor del resultset
mysql_free_result(resultset);
mysql_close(&coneccion);
exit(0);
}

Corrida prog41.cgi

image127.jpg

usando prog37.cgi para ver la tabla

image128.jpg

como que lo animalitos ya estan viejitos

problema sugerido:

1.- construir una tabla en access que traiga matricula, nombre, calif1, calif2, calif3 y promedio, cargar en access unos 5 renglones de alumnos, no cargar promedio, el promedio lo deberan calcular con un programa.

Politica de Privacidad