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 clave=@CLAVE, nombre=@NOMBRE, edad=@EDAD where clave=@CLAVE";
// 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)
prog24.html
forma dinamica que construye el prog24.exe
prog25.exe respondiendo
otra vez prog18.exe para ver como quedo la tabla original
no fue raton fue batman!!
1.- TAREAS PROGRAMACION VISUAL C++ construir programas de edicion para sus tablas y bases de datos