Bases de Datos II Práctica 5, curso 2001-2002 Creación de una aplicación de acceso a Base de Datos mediante ODBC Introducción En esta práctica nos proponemos realizar una aplicación que permita la conexión con una Base de Datos mediante ODBC (open database conectivity) estándar. El principal objetivo es el aprendizaje de lo que es un ODBC y cómo su utilización facilita la programación con BD. ODBC proporciona medios de comunicación con el SGBD utilizando una aplicación estándar que programa la interfaz y sintaxis SQL. Una aplicación que utiliza ODBC puede conectarse a cualquier SGBD si existe un controlador ODBC para ese sistema. Esto significa que el uso de un determinado SGBD (Oracle, Access….) es transparente para el programador. Configurar ODBC ODBC proporciona una utilidad llamada ODBC Data Source Administrador que se utiliza para configurar ODBC. Este programa, al que se puede acceder vía el Control Panel, prepara la configuración de los controladores. Utilización de clases MFC de Bases de Datos Visual C++ proporciona algunas clases orientadas a la programación de Bases de Datos. En esta sección veremos la utilización de 2 de ellas: CDatabase y CRecordSet. Clase CDatabase La clase CDatabase representa una conexión a un origen de datos. Un objeto CDatabase se suele utilizar cuando nuestra aplicación necesita emitir una instrucción SQL que no devuelve ningún dato. La función CDatabase::ExecuteSQL() existe sólo para este propósito. Ejemplo de utilización de este objeto: try{ CDatabase db; if (db.Open( “origendatos”) ) { db.ExeciteSQL(“insert into mitabla VALUES (“NADA”,1,0)”); db.Close(); } } catch(CDBException* pe) { AfxMessageBox(pe->m_strError); pe->Delete(); } 1 Bases de Datos II Práctica 5, curso 2001-2002 Todas las funciones miembro de la clase CDatabase lanzan una excepción de tipo CDBException si ocurre una condición anormal. Las 3 variables clave de esta clase que nos permitirán identificar el error son las siguientes: • m_strError- Cadena que describe el error que causó la exceptción que va a ser lanzada. • m_strStateNativeOrigin –Cadena que describe el error que causó la excepción que va a ser lanzada en términos de códigos de error de la ODBC. Otro conjunto de funciones útiles de la clase CDatabase son las funciones compatibles con las transacciones: CDatabase::BeginTrans() CDatabase::CommitTrans() CDatabase::Rollback() CDatabase::CanTransact() Clase CRecordSet Mientras que el objeto CDatabase representa una conexión a un origen de datos, un objeto CRecordSet (conjunto de registros) representa un conjunto de registros recuperados desde le origen de datos. La manera más sencilla de utilizar este objeto es configurándolo desde el asistente de clases del visual. En este asistente lo que se hace es relacionar el conjunto de registros con los datos de una tabla determinada existente en el origen de datos. Una vez que hemos creado la clase derivada mediante el asistente de clases, podemos utilizarla para realizar cualquiera de las siguientes tareas: • • • • • • • construir un conjunto de registros. Abrir un conjunto de registros. Filtrar los datos Ordenar los registros devueltos mediante una instrucción SQL. Navegar a través de un grupo de resultados. Salvar registros Eliminar registros. A continuación se muestran algunas funciones miembro de interés para trabajar con registros: Open() Close() MoveNext() MovePrev() MoveFirst() MoveLast() AddNew() Update() Delete() 2 Bases de Datos II Práctica 5, curso 2001-2002 Aquí se muestra un ejemplo de utilización de la clase CRecordSet. Suponemos que se ha creado una clase derivada llamada, ‘CRegistroSocios’ y que se declara una variable de este tipo dentro de la clase dónde se utilizará. Además se crea otra variable tipo CDatabase como miembro de la misma clase: try{ //Abro la BD prestamos.mdb if ( db.Open("prestamos") ) { ActualRegistroSocio =new CRegistrsSocios(); //Abro el conjunto de registros ActualRegistroSocio->Open(); //Escribo en los cuadros de dialogo del //formulario los valores leidos de la BD >m_idsocio); m_idsocio.Format("%d",ActualRegistroSociom_nombre= ActualRegistroSocio->m_nombre; m_ciudad=ActualRegistroSocio->m_ciudad; m_tiposocio=ActualRegistroSocio->m_tiposocio; //Para que se actualice la pantalla UpdateData(FALSE); } } catch(CDBException *pe) { AfxMessageBox(pe->m_strError); pe->Delete(); } Gestión de socios y libros de una biblioteca Vamos a desarrollar una aplicación que utilice las clases antes mencionadas para gestionar los prestamos de una biblioteca. Para estar en condiciones de realizar esta práctica, en primer lugar, debemos crear una BD Acces (BD con tres tablas tal como se mostraba en la primera práctica). Es importante destacar que la programación es equivalente si tratara de cualquier otra BD. Nota: La BD prestamos.mdb os la facilitará la profesora. Es equivalente a la que utilizábamos en el resto de las prácticas. La aplicación debe permitir mostrar los socios actuales de la biblioteca, insertar nuevos socios y borrar socios. También debe permitir borrar e insertar nuevos libros. Se trata, pues de realizar un formulario para la tabla libros y socios. Además debe permitir visualizar los libros que tiene un determinado usuario. A continuación se muestra un ejemplo de cómo debe quedar la aplicación: 3 Bases de Datos II Práctica 5, curso 2001-2002 Este es el dialogo principal, en el que aparecen 3 botones que lanzan los diálogos que gestionan los socios, los libros y los prestamos. El diálogo de socios podría tener el siguiente aspecto: Ese diálogo que representa un formulario permite movernos por el conjunto de registros que componen la tabla socios, insertar un nuevo registro, borrar uno ya existente y realizar búsquedas sobre un campo especificado. 4 Bases de Datos II Práctica 5, curso 2001-2002 Puesto que realizar todo esto aunque sencillo es bastante laborioso, el profesor os facilitará algunos cuadros de diálogo ejemplos ya diseñados. Puesto que el diálogo de los libros es exactamente igual que el de los socios, bastará con entregar al profesor la aplicación que tenga un formulario para los socios completo (tal como aparece en la imagen anterior) y otro formulario para préstamos. 5