UNIDAD 5: VISUAL C++ INTRODUCION A LAS BASES DE DATOS

TEMA 13: EDICION REGISTROS VISUAL C++

Editar registros significa cambiar el contenido de algunos de los campos o columnas por nueva informacion o para corregir algun error de captura original o para agregar alguna columna que no existia por modificacion de la tabla o la base de datos.

En general se tiene otro problema de sql UPDATE, sin embargo ahora se tendran que construir varios programas, estos son:

1.- prog24.html: una forma normal de busqueda por clave

2.- prog24.cpp: el mismo programa de busqueda por clave, pero ahora debera construir una forma.html dinamica( es decir un monton de system.console.writeline), que contendra un form action apuntando o ejecutando al prog25.cpp o exe, ademas tendra todos los input text necesarios para cargar cada celda del renglon de busqueda.

3.- prog25.cpp: recoje los datos ya modificados de la forma.html dinamica y realiza directamente un sql update en la base de datos

prog24.html

<HTML>
<FORM ACTION=/cgi-bin/tusitio/prog24.exe METHOD=get>
CLAVE A MODIFICAR.:<INPUT TYPE=text NAME=CLAVE><BR>
<INPUT TYPE=submit VALUE=BUSCAR>
</FORM></HTML>

prog24.cpp

#using <mscorlib.dll>
#using <System.dll>
#using <System.Data.dll>
#using <System.Xml.dll>
#using <lcnet.dll>
using namespace System;
using namespace System::Data;
using namespace System::Xml;
using namespace System::Data::OleDb;
void main(){
// declarando variables globales
OleDbConnection *coneccion;
OleDbDataAdapter *canal;
DataSet *tabla;
//creando objetos necesarios
coneccion=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\progfacil\\lauro\\mibase.mdb");
tabla = new DataSet();
//capturando clave a buscar
String *clave=lcnet::getparametro("CLAVE");
// terminando de encadenar la string q
String *q=String::Concat("select * from mitabla where clave = ",clave);
canal = new OleDbDataAdapter(q, coneccion);
canal->Fill(tabla, "mitabla");
// CONSTRUYENDO LA FORMA DINAMICA
Console::WriteLine("Content-Type:text/html\n");
Console::WriteLine("<HTML><FORM ACTION=/CGI-BIN/LAURO/PROG25.EXE METHOD=GET>");
// sacando la clave del renglon del dataset y no se declara porque ya se creo y uso arriba
clave=tabla->Tables->Item["mitabla"]->Rows->Item[0]->Item[0]->ToString();
Console::WriteLine(String::Concat("CLAVE:<INPUT TYPE=TEXT NAME=CLAVE VALUE=",clave));
Console::WriteLine("><BR>");
// sacando el nombre del renglon del dataset
String *nombre=tabla->Tables->Item["mitabla"]->Rows->Item[0]->Item[1]->ToString();
Console::WriteLine(String::Concat("NOMBRE:<INPUT TYPE=TEXT NAME=NOMBRE VALUE=",nombre));
Console::WriteLine("><BR>");
//sacando la edad del renglon del dataset
String *edad=tabla->Tables->Item["mitabla"]->Rows->Item[0]->Item[2]->ToString();
Console::WriteLine(String::Concat("EDAD:<INPUT TYPE=TEXT NAME=EDAD VALUE=",edad));
Console::WriteLine("><BR>");
Console::WriteLine("<INPUT TYPE=SUBMIT VALUE=MODIFICAR>");
Console::WriteLine("</FORM></HTML>");
} // fin main

Recordar que los parametros se pueden agregar a un adapter(canal) o a un command(orden) todo depende de si se quiere trabajar con el dataset(este caso es canal) o directemente con la coneccion(este caso es command).

Es mas facil este ultimo caso, pero si se quiere desplegar la tabla que se tiene en memoria, entonces se tendria que volver a cargar el canal=dataset, pero si solo se quiere hacer un cambio directamente en la tabla en disco, es mejor usar directamente el objeto command.

En este ejemplo usamos canal-dataset porque se quieren pasar los valores del dataset una forma html.

Prog25.cpp

#using <mscorlib.dll>
#using <System.dll>
#using <System.Data.dll>
#using <System.Xml.dll>
#using <lcnet.dll>
using namespace System;
using namespace System::Data;
using namespace System::Xml;
using namespace System::Data::OleDb;
void main(){
// declarando variables globales
OleDbConnection *coneccion;
OleDbCommand *orden;
//creando objetos necesarios
coneccion=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\progfacil\\lauro\\mibase.mdb");
// capturando
String *clave=lcnet::getparametro("CLAVE");
String *nombre=lcnet::getparametro("NOMBRE");
String *edad=lcnet::getparametro("EDAD");
// construir una string q con la instruccion sql apropiada
String *q="update mitabla set [email protected], [email protected], [email protected] where [email protected]";
// ahora se crea y carga un objeto OLEDBCOMMAND
orden= new OleDbCommand(q, coneccion);
// antes de mandar la string q al objeto coneccion, se deben cargar las variables
// parametros con el dato y el tipo de dato apropiado
orden->Parameters->Add(new OleDbParameter("@CLAVE", OleDbType::Integer));
orden->Parameters->Item["@CLAVE"]->Value = clave;
orden->Parameters->Add(new OleDbParameter("@NOMBRE", OleDbType::VarWChar, 20));
orden->Parameters->Item["@NOMBRE"]->Value = nombre;
orden->Parameters->Add(new OleDbParameter("@EDAD", OleDbType::Integer));
orden->Parameters->Item["@EDAD"]->Value = edad;
// observar que la variables parametros se cargan con strings
// es el OLEDBTYPE quien la convierte al tipo de dato de ACCESS
// ver el apendice de oledbtype's para tener la correspondencia access=oledbtype
// mandando la inserccion a la base de datos
orden->Connection->Open();
orden->ExecuteNonQuery();
orden->Connection->Close();
//avisando
Console::WriteLine("Content-Type:text/html\n");
Console::WriteLine("<HTML>EDITADO usar prog18.html para desplegar</HTML>");
} //fin main

Aqui mejor se trabajo directamente un objeto COMMAND con el CONECCTION porque solo se quiere hacer el cambio en la tabla en disco y solo avisarle a usuario que ya se realizo (si funciona bien el programa).

Veamos la corrida completa:

Prog18.exe (tabla original)

image456.jpg

prog24.html

image325.jpg

forma dinamica que construye el prog24.exe

image457.jpg

prog25.exe respondiendo

image458.jpg

otra vez prog18.exe para ver como quedo la tabla original

image459.jpg

no fue raton fue batman!!

1.- TAREAS PROGRAMACION VISUAL C++ construir programas de edicion para sus tablas y bases de datos

Politica de Privacidad