Base de Datos Oracle: desarrollo de aplicaciones ADO con VC++ 6.0 Alberto M.F.A. [email protected] Modelo de objetos ADO Interfaces principales Colleciones jul-04 Connection Command Recordset Properties Parameters Fields Errors Alberto M.F.A. [email protected] 2 Modelo de objetos ADO Otras Interfaces Field Error Parameter jul-04 Alberto M.F.A. [email protected] 3 Diagrama ADO Connection Errors Error Command Properties Parameters Properties Recordset Fields Parameter Properties Field jul-04 Alberto M.F.A. [email protected] 4 Pasos en la aplicación Inicializar librerías COM Crear conexión Procesamiento con ADO Cerrar conexión Cerrar librerías COM jul-04 Alberto M.F.A. [email protected] 5 Procesamiento con ADO jul-04 Conexión a un origen de datos (Connection). Opcionalmente, comenzar una transacción. Crear un objeto para representar un comando SQL (Command) Especificar valores en el comando SQL como parámetros variables (Parameter) Alberto M.F.A. [email protected] 6 Procesamiento con ADO Ejecutar comando SQL (Command, Connection o Recordset) Almacenar las filas en una caché (Recordset) Ordenar, filtrar y explorar datos (Recordset) Modificar datos (Recordset) Grabar datos de la caché en BDD (Recordset) COMMIT o ROLLBACK Transacción (Connection) jul-04 Alberto M.F.A. [email protected] 7 Interfaz Connection Abrir una conexión Cerrar conexión Ejecutar comando SQL sencillo (sin parameters). Genera RecorSet. Controlar transacciones jul-04 BeginTrans, CommitTrans, RollBackTrans Acceso al esquema de BBDD Alberto M.F.A. [email protected] 8 Interfaz Command jul-04 Factoria para crear objetos Parameter Ejecuta comandos SQL complejos (con parámetros) Invocar a procedimientos almacenados “Bind y Define” de datos antes y después de execute Alberto M.F.A. [email protected] 9 Interfaz Recordset jul-04 Añadir, borrar y modificar registros Recorrer el recorset en cualquier dirección Ordenar, filtrar y localizar Records Sincronizar caché Actualizaciones en lotes Alberto M.F.A. [email protected] 10 Interfaz Field Cargar y descargar LOB Recuperar y establecer valores de campo en un Recordset Están contenidos en la Collection Fields jul-04 Alberto M.F.A. [email protected] 11 Interfaz Parameter Permite hacer Bind de datos para una consulta SQL o llamada a procedimiento Soporta Bind de LOB’s Permite establecer: jul-04 Tipo de dato Sentido (IN, OUT, IN/OUT, ReturnValue) Localizados en la Collection Parameters de Command Alberto M.F.A. [email protected] 12 Interfaz Error Cualquier operación ADO puede generar un error La Collection Error de Connection los almacena todos Cada Error especifica: jul-04 Descripción Número de error Objeto que lo provocó Propiedades SQLState y NativeError Alberto M.F.A. [email protected] 13 Inicializar y cerrar COM if(FAILED(::CoInitialize(NULL))) return -1; try {... Proceso ... } catch (TipoExcepcion e){ Tratar error ... } ::CoUninitialize(); jul-04 Alberto M.F.A. [email protected] 14 Abrir conexión Alternativas: jul-04 Connection.Open(“strConexion”, ...) Recordset.Open(“strConexion”, ...) Connection crea una conexión disponible para la aplicación. Recordset la crea internamente. Se puede recuperar con ActiveConnection() Alberto M.F.A. [email protected] 15 Ejecutar SQL sin Parámetros Connection.Execute(SQL, ... ) Command.ActiveConnection = conn... Command.CommandText = SQL Command.Execute(... ) Command.Execute(SQL, ... ) jul-04 Alberto M.F.A. [email protected] 16 Ejecutar SQL con Parámetros SQL con placeholders “SELECT name FROM tabla WHERE id = ?” Solo con Command.Execute(...) Antes: Command.CreateParameter() para cada placeholder Ajustes en el parameter Command.Parameters.Append(parameter) jul-04 Alberto M.F.A. [email protected] 17 Ejecutar stored proc/fun Con Command.Execute(...) Sintaxis Escape de ODBC “{? = call stored_fun(? ?) }” Para cada placeholder un parameter jul-04 CreateParameter Parameters.Append Ojo con los tipos de dato: NO BOOLEAN Alberto M.F.A. [email protected] 18 Métodos Execute jul-04 Alberto M.F.A. [email protected] 19 Actualización de datos A través de sentencias SQL (INSERT, UPDATE, DELETE) Para una sola tabla también a través de un Recordset Recordset.AddNew() jul-04 Redorset.Fields.Item().Value = ... Recordset.Update() Recordset.CancelUpdate() Alberto M.F.A. [email protected] 20 Transacciones Controladas desde Connection BeginTrans(...) CommitTrans(...) RollbackTrans(...) Transacciones anidadas BeginTrans(...) jul-04 BeginTrans(...) CommitTrans(...) CommitTrans(...) Alberto M.F.A. [email protected] 21