En este capitulo se analizan en general dos problemas: Variables que permitan almacenar conjuntos de datos como los arreglos pero de distintos tipos de datos, este primer problema se resolva en la antigedad usando las llamadas variables registro, o tipo struct en C. Permanencia de los datos, hasta ahora todos los datos capturados, calculados, creados, etc. al terminar o cerrarse el programa se pierden y es necesario volver a capturarlos, etc., en la siguiente ejecucin o corrida del programa. Tradicionalmente en programacin antigua este segundo problema se resolva usando el concepto de archivos, que son medios permanentes de almacenamiento de datos en los dispositivos o perifricos apropiados, generalmente disco, cinta magntica, etc. 2.- MODELOS DE ALMACENAMIENTO DE DATOS C++BUILDER
En general existen dos modelos de almacenamiento de datos en los sistemas de informacin. El modelo tradicional de archivos que se construye con los siguientes elementos: a.1) Variables Registros, como ya se indico son variables que permiten almacenar conjuntos de datos de diverso tipo. Tambin se pueden definir como representaciones simblicas y programaticas de entidades lgicas de informacin, ejemplos de variables registros son alumnos, empleados, clientes, proveedores, productos, autos, etc. Esta variables registros, tambin ocupan programas o rutinas de programas para procesarlas, por ejemplo un procedimiento, modulo o subrutina, se encargara de capturar los datos que contendr la variable registro, otro procedimiento para corregir los datos que ya contiene, otro procedimiento para desplegarlos en pantalla ya cuando ha sido capturada y as sucesivamente. a.2) Archivos, que en principio pueden entenderse como una especie de almacenes o bodegas para almacenamiento de datos en forma permanente en disco, es decir un archivo de empleados en disco contiene todos los datos de todos los empleados de una empresa. Igualmente los archivos ocupan su propios programas o subrutinas o procedimientos especializados por ejemplo, procedimientos para crear los archivos, para almacenar o dar de altas los registros en el archivo, procedimientos para buscar un registro determinado, procedimiento para dar de baja un registro, etc. a.3) Una aplicacin, que es un programa que se encarga de coordinar todos los programas descritos y presentrselos a los usuarios de manera clara, fcil y accesible y entendible. Salta a la vista que construir un sistema de informacin por ejemplo para una tienda de vdeo o para un refaccionara, etc. involucra un gran cantidad de trabajo de programacin, puesto que hay que programar muchas variables registros, muchos archivos en disco, y una o varias aplicaciones. Este modelo se usa todava en la actualidad, pero es obvio que mejores maneras, mas rpidas, seguras y eficientes existen en la actualidad para resolver estos problemas, y esto nos lleva al segundo modelo de datos. Modelo de Bases de Datos Relacinales, este modelo intenta simplificar la construccin de sistemas de informacin como los antes descritos, este modelo solo incluye en forma simple los siguientes elementos: Tablas, es una combinacin de las variables registro y de los archivos del modelo anterior. Es decir cuando un programador moderno define o declara una tabla en un programa, realmente esta haciendo dos cosas por el precio de una, es decir crea una variable registro en memoria que almacenara los datos y al mismo tiempo ya esta creando un archivo en disco que se llamara igual que la tabla o variable registro y que automticamente se convertir en un espejo de la tabla en memoria, es decir cuando se cargan los datos en la tabla en memoria, tambin se estarn cargando ala vez en disco. Otra vez cuando el programador escribe cdigo para capturar los datos y mandarlos a la tabla en pantalla-memoria, realmente tambin lo esta haciendo para darlos de alta en disco. Aplicacin, que tiene la misma funcin que en el modelo anterior. No confundir este concepto de tablas en base de datos con el concepto de tablas, vistos en el capitulo de arreglos, aunque en la practica se parecen mucho, la diferencia es que los datos no se van a disco. Como se observa en este modelo, es mas sencillo construir sistemas de informacin con el, puesto que la parte programatica se reduce ampliamente. 3.- TABLAS C++BUILDER
Una Tabla simple, representa una UNIDAD de informacin de una entidad lgica de informacin:
Tabla Empleado: * Clave Empleado * Nombre Empleado * Direccin Empleado * Edad Empleado * Telfono Empleado * etc. Empleado
Tabla Proveedor: * Clave Proveedor * Nombre Proveedor * Empresa Proveedor * Telfono Proveedor * Fax Proveedor * Celular Proveedor * etc. Proveedor
Tabla Autos: * Numero de Serie * Modelo * Marca * Tipo * Color * Capacidad * etc.
Observar que cada tabla, empieza con una clave generalmente detipo numrica. Todos los elementos de la tabla, solo hacen referencia hacia el mismo ente o sujeto de informacin. Cada elemento solo representa o debe contener un solo dato de informacin. No se respetan o siguen al pie de la letra estos tres postulados y empiezan los problemas al tiempo de programacin. Existe una segunda forma o manera de representar las tablas, ejemplo:
Tabla: Camisas NumCamisa Marca Estilo Medida Color Material 1 Jeans Manga Corta Grande Azul Algodn 2 Volis Camiseta Mediana Negra Poliester 3 Genrica Manga Larga Chica Morado Rayn etc. etc. etc. etc. etc. etc.
Tabla: Clientes NumCliente NomCliente DirCliente TelCliente 1 Juan Prez Av. aba 121212 2 Luis Prez calle zeta 898989 3 Jos Prez cjon sss 000000 etc. etc. etc. etc.
Recordar siempre, una tabla almacena o representa un conjunto de datos relacionados entre si, la tabla de alumnos es para almacenar y manipular muchos alumnos, la tabla de productos es para almacenar y manipular muchos alumnos, en resumen si en un problema de informacin solo se presenta una instancia o rengln de una entidad lgica, entonces no es tabla, es un encabezado. TAREAS PROGRAMACION C++BUILDER 1.- CONSTRUIR EN CUADERNO LAS SIGUIENTES TABLAS, LA MITAD DE ELLAS CON EL PRIMER FORMATO Y LA SEGUNDA MITAD CON EL SEGUNDO FORMATO. 4.- C++BUILDER TABLAS (CONTINUACION)
El trabajo correcto con bases de datos relacinales, se divide en dos grandes pasos o etapas bien diferenciadas entre si: En la primera etapa se disea la tabla , con sus campos, llaves y condiciones especiales, luego se usa un paquete o programa de software especializado en la construccin, mantenimiento y administracin de la base de datos, este software se usa para convertir la tabla o tablas ya bien diseadas en un archivo en disco. Estos paquetes, o software reciben el nombre de DBMS(DATA BASE MANAGEMENT SYSTEM) o sistema administrador de bases de datos. Este software se especializa en la creacin, mantenimiento, seguridad, privacidad, etc. de un conjunto de tablas o mejor dicho una base de datos, los DBMS mas comunes son Oracle, SqlServer, Informix, Sysbase, etc. Borland la compaa que fabrica C++Builder, proporciona junto con el C++Builder, un miniDBMS llamado DataBase Desktop, mismo que se encuentra en el mismo folder o subdirectorio que el C++Builder, y que tambin se usara para construir las tablas y/o archivos fsicos. La segunda etapa consiste en construir la aplicacin o aplicaciones que ya tendrn acceso o podrn manipular los datos contenidos en la tabla, estas aplicaciones se escriben usando ya sea lenguajes clsicos de programacin como BASIC, PASCAL, COBOL, CBUILDER, DELPHI, etc o tambin se pueden accesar paquetes comunes de manipulacin de archivos o bases de datos como DBASE, CLIPPER, VISUALFOX, ACCESS, etc. DISEO Y CREACION DE UNA TABLA El primer paso antes de usar el paquete correspondiente a esta tarea, es disear la tabla completamente, esto exige: 1. Nombre apropiado y determinacin de atributos y campos correspondientes 2. Seleccionar y determinar el atributo principal o campo clave o llave primaria que se utiliza como el identificador nico que permite diferenciar cada instancia o rengln diferente dentro de la tabla. 3. Tambin se puede seleccionar otros campos que puedan servir mas adelante para ordenar de manera diferente la tabla, es decir una tabla en principio ya est ordenada por el campo clave, por ejemplo, la matricula de un alumno, el numero de empleado, etc., pero existirn muchas ocasiones mas adelante donde se puede pedir un orden diferente, por ejemplo, por ciudad, por carrera, por nombre, por edad, etc., la buena ingeniera de una base de datos exige tomar en cuenta estos y otros muchos problemas y detalles. 4. Escribir restricciones y condiciones apropiadas para ciertos atributos , por ejemplo el nmero de empleado deben comenzar en 500, la edad no debe ser mayor de 150 aos, etc. Ya listo el diseo de la tabla, se pasa a el programa correspondiente para su creacin y almacenamiento, dicho programa que se encuentra dentro de el folder o subdirectorio de CBuilder y como ya se dijo es: 5.- DATABASE DESKTOP C++BUILDER
No es un componente de la barra de herramientas, es el icono de un programa que se encuentra en el mismo folder o directorio que el C++Builder. El procedimiento completo para construir la tabla, es:
b) Crear una nueva con file, new, table, DD pregunta cual formato de tabla se va a usar;
c) El formato a seleccionar es Paradox 7,(Borland es la compaa propietaria de los arriba mencionados, otras versiones de C++Builder ya traen licencias para nuevos tipos, como Access, etc.), ya hecha la seleccin entramos a el siguiente editor de tablas:
Tomar nota de las dos reas del editor, la primera de ellas es el field roster y la segunda rea es la de propiedades de la tabla. d) Se usa ahora la primera rea, para escribir los campos o atributos de la tabla, la segunda columna es el tipo de dato del atributo, para asignar un tipo de dato a un atributo, pulsar dos veces la barra espaciadora en el teclado para que salga la siguiente lista de tipos de datos:
Como se observa existen muchos e interesantes tipos de datos, de momento solo usar los mas comunes, enteros, short, numricos, y alpha para el caso de strings. La opcin size(tamao) solo se usa cuando el campo es de tipo string ( ALPHA) y se tiene que dar el tamao de la string, por ejemplo en campo Direccin el size o tamao es 30. La opcin Key, es para marcar un atributo o campo, como llave primaria, o llave principal de las instancias o renglones u objetos diferentes de la tabla, para marcar un campo como llave primaria, solo dobleclick en esta opcin Key. e) La segunda rea de la tabla, son las propiedades de la tabla, todas las propiedades de la tabla estn dentro del siguiente combobox.
Todas y cada una de las propiedades, se definen abajo en la parte de propiedades del editor de tablas, es decir la propiedad validity check tiene como elementos:
La propiedad siguiente tiene sus propios elementos y as sucesivamente. De momento solamente dejar las propiedades o sus partes en blanco. f) No olvidar usar la opcin SAVE abajo para guardar la tabla, en esta parte sale la ventana normal de Windows para grabacin, esa ventana donde se puede crear un nuevo folder, etc., solo buscar el directorio que se creo al principio de la sesin con my computer, abrirlo(OPEN) y escribir un nombre apropiado para la tabla. Ya creada la tabla, es conveniente cargarle unos cuantos renglones registros o datos para pruebas, esto se hace con: c.1) Usar el icono de OPEN tabla y seleccionar la tabla a cargar. c.2) Entrar al modo de edicin usando el icono de Edit y ya se puede empezar a capturar los datos en cada rengln. c.3) Para terminar solo click en la X arriba en la tabla respectiva. Ejemplo de una tabla;
Recordar que todos los cambios hechos a una, aadir, insertar, eliminar, modificar, etc. quedan grabados automticamente en disco, este hecho es la razn por lo que no existe una opcin de grabar un rengln o registro cualesquiera. Ahora si, ya creada, declarada o definida la tabla, es tiempo ahora de construir la aplicacin, para esto se usara nuevamente el C++Builder . 6.- APLICACIONES O PROGRAMAS CON TABLAS C++BUILDER
Bsicamente una aplicacin consiste de un programa o forma que permite accesar, manipular, editar, procesar, etctera, los datos, registros, o renglones de una tabla, es decir es la aplicacin la que constituye, la vista sobre la que trabaja el usuario del programa. Como ya se explico en el modelo tradicional de almacenamiento de datos, existan muchos procesos, tanto para la manipulacin de registros en memoria, capturas, modificaciones, etc., como para el almacenamiento de todos ellos en archivos en disco, el famoso ABC de un sistema de archivos (altas, bajas, consultas, modificaciones, etc.) y todos ellos haba que construirlos programarlos a mano, era terrible la situacin de los programadores de antao. En el modelo relacional-visual de datos, mucho de este trabajo no existe, solo se construye una forma, y se pegan unos cuantos componentes para que aparezcan las propias tablas y componentes para que se procesen los datos que contendrn la tablas. Recordar tambin que la aplicacin ya no deber preocuparse, donde se almacenan los datos, de validar las condiciones y restricciones impuestas en ellos, etc., todo este trabajo ahora es responsabilidad del miniDBMS que usado, el DataBase Desktop. Existen dos maneras sencillas de construir aplicaciones, la primera de ellas es presentarle al usuario un solo rengln de informacin para su proceso y manipulacin y la segunda es presentarle toda la tabla a la vez, tambin para su manipulacin y proceso. 7.- APLICACIONES POR RENGLON C++BUILDER
Para construir una aplicacin, presentndole un solo rengln al usuario para su procesamiento en C++Builder, solo se ocupa una forma (Form1) y solocuatro componentes diferentes de acceso y manipulacin de tablas, estos cuatro componentes son: PROCEDIMIENTO Y COMPONENTES 1.- Colocar un componente Table (Data Access ) en algn lugar de la forma donde no estorbe( este componente quedara flotando y no aparece al momento de ejecucin del programa). Este componente Table, sirve de enlace fsico entre la tabla real que se creo con el DataBase Desktop y el resto de los componentes que se usaran para la construccin de la aplicacin. Sus tres propiedades mas importantes son: * Propiedad DataBaseName = Solo escribir el directorio donde se encuentra la tabla real, por ejemplo c:\datos * Propiedad TableName = Solo click a un lado de esta propiedad y seleccionar la tabla a usar, por ejemplo seleccionar la tabla de clientes. * Propiedad Active = Ponerlo en valor True. 2.- Colocar un componente DataSource (Data Access) tambin en algn lugar en la forma donde no estorbe. Este Componente acta como el enlace fsico entre el Componente Table y el resto de componentes que procesan los datos de la tabla, es decir el componente Table apunta a la tabla real en disco, el componente DataSource apunta al componente Table, y el resto de los componentes apuntan a DataSource. Su nica propiedad a modificar es: Propiedad DataSet = Click a un lado y seleccionar el componente Table al que se quiere enlazar, por ejemplo Table1. 3.- Componente DBEdit (Data Controls) . Este componente permite presentar y manipular un dato de la tabla a la vez. Es un componente muy similar al componente Edit y comparte muchas de las propiedades y mtodos de este ultimo, su diferencia principal es que Edit, carga sus datos desde el usuario y DBEdit los carga desde la tabla almacenada en disco. De este componente se deben colocar tantos de ellos en la forma, como columnas existan en la tabla a procesar. Sus dos propiedades mas importantes y en el orden abajo descrito son: Propiedad DataSource = Click a un lado y seleccionar el DataSource al que se quiere enlazar, por ejemplo DataSource1. Propiedad DataField = Click a un lado y seleccionar el campo o atributo o columna que se quiere representar o enlazar por ejemplo ClaveCliente, NomCliente, etc. Recordar que se deben colocar tantos DBEdit en la forma, como columnas existan en la tabla, o como columnas se quieran presentar al usuario para su manipulacin. Recordar poner unos cuantos componentes Label, arriba del componente DBEdit y cargarlos en su propiedad caption con el nombre del campo o columna respectivo. 4.- Componente DBNavigator (Data Controls) .
Button Significado
First Regreso al primer registro o rengln de la tabla. Prior Regreso a registro o rengln anterior. Next Avanza al siguiente rengln. Last Avanza a el ultimo rengln. Insert Inserta un nuevo rengln en la tabla. Delete Borra o elimina el rengln o registro actual. Edit Pone el registro actual en estado de edicin para su modificacin Post Graba el registro o rengln actual en la tabla en disco. Cancel Cancela modo edicin y restaura los datos anteriores que tenia el rengln. Refresh Refresca o regraba toda la informacin.
Recordar poner unos cuantos componentes Label arriba de los botones del navegador para su aclaracin, uso y manejo al usuario. Sus dos propiedades mas importantes son: Propiedad DataSource = Click a un lado y seleccionar el DataSource al que se quiere enlazar, por ejemplo DataSource1. Propiedad +VisibleButtons = Click en el signo +, para activar(True) o desactivar(False) los botones de proceso de renglones de la tabla, que se quieran mostrar u ocultar al usuario. Con estos cuatro componentes ya se construye una aplicacin, ejemplo; Pantalla de Diseo:
Pantalla de ejecucin:
TAREAS PROGRAMACION C++BUILDER 1.- Construir aplicaciones para la mitad de las tablas hechas en el DataBase Desktop. 8.- APLICACION POR TABLA C++BUILDER
En este tipo de aplicacin, al usuario se le presenta toda la tabla completa a la vez para su procesamiento y manipulacin. Para construir esta tipo de aplicacin, solo se ocupan tres componentes y dos de ellos ya son conocidos, estos componentes son: Componente Table ( Data Access) * propiedad DataBaseName = c:\datos * propiedad TableName = Clientes.db * propiedad Active = True Componente DataSource ( Data Access) * propiedad Dataset = Table1 Componente DBGrid ( Data Controls) * DataSource = Click a un lado de la propiedad, para seleccionar el DataSource respectivo a enlazar, por ejemplo DataSource1. Una caracterstica interesante, es que este componente DBGrid, trae asociado un editor de columnas, solo poner el componente DBGrid en la forma, enlazarlo al DataSource y luego doble click dentro del DBGrid y aparece el siguiente editor: Primero usar el botn Add All Fields para cargar todos los campos columnas a la primera ventana y de esta ventana ir seleccionando el campo o columna a procesar, observar que se pueden agregar nuevas columnas, o eliminar columnas existentes y para cada columna que se vaya seleccionando ya funciona la segunda parte del editor. Componente DBNavigator( Data Access) * propiedad DataSource = DataSource1 * propiedad +VisibleButtons = activar o desactivar los botones apropiados Aunque este componente no se ocupa en este tipo de aplicacin, puesto que el usuario puede realizar todos los procesos bsicos directamente dentro de la tabla, es conveniente poner un navegador para darle una segunda opcin o manera de realizar los procesos bsicos. Un ejemplo de aplicacin con esta estructura es: Pantalla de Diseo
Pantalla de ejecucin:
TAREAS PROGRAMACION C++BUILDER 1.- CONSTRUIR APLICACIONES CON ESTE FORMATO PARA LA SEGUNDA MITAD DE LAS TABLAS CREADAS CON EL DATABASE DESKTOP. 9.- PROCESOS BASICOS C++BUILDER
Analizaremos ahora algunos procesos tambin bsicos que pueden realizarse con los dos tipos de aplicaciones y que adems no estn contemplados en algunos de los botones del navegador. OPERACIONES CON CAMPOS Para el caso de aplicaciones construidas con componentes DBEdit, recordar que comparte muchas propiedades y mtodos con el componente edit, as que es valido por ejemplo en una aplicacin donde la tabla productos tiene el campo costounitario(DBEdit3) y el campo o columna utilidad(DBEdit6), poner un componente edit1 para el precio de venta y realizar la siguiente operacin en el onclick de un botn apropiado.
Como se observa se puede accesar y manipular los componentes DBEdit usando la propiedad Text, tanto para leerlos como para cargarlos. Problemas sugeridos: 1.- Una tabla de productos con campos costounitario, margen de utilidad y tasa de iva, calcular el precio de venta. a.2) Para el caso de aplicaciones con DBGrid, se pueden accesar sus celdas para su lectura y proceso usando cdigo como en el siguiente ejemplo, en algn botn o evento apropiado: Edit3Text = DBGrid1Fields[2]AsInteger * 5; Observar la propiedad Fields[col], es para indicar la columna deseada y adems comienza en la 0(cero), recordar adems que este acceso ser realizado solamente sobre el rengln seleccionado en la tabla (aquel que esta seleccionado con un *). Tambin se esta usando el mtodo AsInteger para leerlo como entero. Es conveniente usar la ayuda del C++Builder para el componente DBGrid para conocer todas sus propiedades y mtodos. Para cargar una celda con un nuevo valor, usar cdigo como el siguiente en algn botn o evento apropiado. Onclickbutton5(){ DBGrid1Edit(); DBGrid1Fields[3]Value = 300; } 1.- Observar que son dos pasos, en el primero se pone todo el DBGrid en modo de edicin y en el segundo se carga ya la celda seleccionada con el nuevo valor. 2.- Recordar que el cambio es en una celda de un solo rengln, y es el rengln seleccionado. 3.- Como primera nota interesante, esta propiedad Edit() es tambin la del navegador, es decir es valido DBGrid1First, etc. 4.- Para la modificacin de la celda, se usaron otra vez la propiedad Fields[col] y mtodo Vale, recordar nuevamente estudiar propiedades y mtodos de DBGrid. Problema sugerido: TAREAS PROGRAMACION C++BUILDER 1.- La misma tarea anterior, pero ahora con tabla.
10.- BUSQUEDAS C++BUILDER
Un problema muy comn en los sistemas de informacin basados en bases de datos es el de bsquedas, en estos casos el usuario proporciona un dato, generalmente la clave del registro, para que se localice toda la informacin pertinente. Para resolver este problema, solo se ocupa: 1. Un botn de ordenes (OK) con el siguiente cdigo: Los parmetros del mtodo Locate(), son; Locate(Columna de bsqueda ,Dato a buscar , opcin de bsqueda); cuando opcin = 0; ignora diferencia entre maysculas y minsculas cuando opcin = 1; resultado parcial, ejemplo si se busca ju se posesiona en el primer rengln donde ese campo empiece con ju, ejemplo Juan, juvenal, etc. TAREAS PROGRAMACION C++BUILDER 1.- CONSTRUIR UNA APLICACION DE BUSQUEDAS PARA UNA TABLA DE AUTOS, CON OPCIONES DE BUSQUEDA POR CLAVE, MODELO, COLOR, PRECIO. 11.- FILTROS C++BUILDER
Un filtro es una condicin que permite desplegar solo determinada informacin de una tabla. Es decir, en ocasiones solo se quiere desplegar informacin condicionada al usuario, por ejemplo de la tabla de clientes solo desplegar aquellos que sean de la ciudad de Tijuana, de la tabla de autos, solo desplegar aquellos de modelo 1990 en adelante. Como se observa, filtrar una tabla, es condicionar uno o mas campos o columnas. Formar condiciones simples o compuestas ya no debe ser problema, el real problema es que la librera de VCL que contiene los componentes visuales, fue portada a C++Builder por parte de la Compaa Borland usando la librera VCL de Delphi( y este Delphi es Pascal), en otras palabras los filtros o condiciones se tendrn que programar tomando en cuenta a como Pascal maneja las constantes strings, los operadores relacinales y los operadores lgicos. Existen dos maneras de poner filtros o condiciones para una tabla, ellas son: 1.- Interna, debe haber un DBGrid en la aplicacin y para el componente Table, modificar las siguientes propiedades: * propiedad Filter = condicin, ejemplos para la tabla de clientes: = ClaveCliente < 3 = Ciudad <> 'Tijuana' = ClaveCliente > 2 and Ciudad = 'Tijuana' * propiedad Filtered = true 2,- Externa, es el usuario quien construye el filtro o condicin, usando un componente Edit para el filtro y un botn de ordenes (OK) para que se ejecute y despliegue la tabla filtrada, el cdigo en dicho botn es; onclickbutton1() { Table1Filter = Edit1Text; Table1Filtered = true; } TAREAS PROGRAMACION C++BUILDER 1.- UNA TABLA DE AUTOS FILTRADA INTERNAMENTE POR COLOR AZUL Y MODELO DE 1990 EN ADELANTE. 2.- UNA TABLA DE PROVEEDORES Y QUE SEA EL USUARIO QUIEN CONSTRUYA EL FILTRO O CONDICION. GRAFICOS O IMAGENES C++BUILDER
Campos de grficos o de imgenes, se han convertido en una de las grandes atracciones y caractersticas de las bases de datos modernas. En C++Builder, el manejo de dichos campos es muy fcil solo: 1.- Cuando se crea la tabla en el DataBase Desktop, incluir un campo de tipo de dato Graphics, por ejemplo en la tabla de clientes, incluir el campo foto de tipo Graphics. 2.- En aplicaciones por renglones , no usar un DBEdit para este campo, sino usar un componente DBImage (Data Controls) . Si el rengln o registro ya esta cargado con su imagen respectiva, al hacer la navegacin entre renglones, este componente DBImage las va desplegando. 3.- En aplicaciones por tablas, usar el editor del DBGrid para ocultar el campo de tipo Graphics y poner a un lado del DBGrid un componente DBImage, esto hace la misma funcin, es decir al momento que el usuario navega entre los renglones de la tabla, este componente va desplegando la imagen del rengln donde se encuentra el cursor. 4.- El problema, es como cargar las imgenes, la respuesta es sencilla, las imgenes solo pueden cargarse, capturarse o provenir de solo dos fuentes o lugares distintos: 4.1) Un archivo de tipo *.BMP( u otros formatos similares) 4.2) Del Clipboard de Windows 5.- Cualquier dispositivo o perifrico de este tipo (scaners, cmaras digitales, etc.) o programas de imgenes ( paintbrush, paint, corel, etc.) tienen estas dos capacidades, es decir pueden mandar sus imgenes ya sea al Clipboard o ya sea a un archivo en disco. 6.- Para capturar una imagen en una aplicacin ya sea por rengln o por tabla, recordar no usar un campo DBEdit para este campo, sino un campo DBImage, para usar el Clipboard para capturar se tienen dos maneras sencillas: 6.1- Colocado el cursor dentro de este campo DBImage, pedirle al usuario, usando un Label por ejemplo que solo teclee, CTRL V, ( observar el paste en el edit de cualquier ventana de Windows). 6.2.- Usar adems del componente DBImage un componente Button de ordenes(OK) con el siguiente cdigo: { DBImage1PasteFromClipboard(); } Recordar que para usar estos mtodos, el Clipboard de Windows ya debe estar cargado con la imagen, para pruebas sencillas, minimizar la aplicacin, cargar el PaintBrush o Paint, cargar un archivo .BMP, seleccionarlo luego Edit Copy, cerrar el Paint o PaintBrush y maximizar la aplicacin y aplicar cualquiera de los dos mtodos. Es evidente que tambin se pueden usar CTRL C, CTRL X, CTRL Del(ver edit de cualquier ventana), CopyToClipboard() (ver ayuda de DBImage), etc., para diferentes procesos. Recordar adems que la tabla fsica no actualiza el campo correspondiente con su imagen, si no se avanza de rengln, o se usan los botones Next, Refresh, Update del navegador. 7.- Para cargar o capturar una imagen directamente desde un archivo en disco de extensin .BMP (u otros similares) solo usar un componente DBImage ya sea en aplicaciones por rengln o por tabla, un componente Button de ordenes y el siguiente cdigo; OnClickButton1() { DBImagePictureLoadFromFile(C:\datos\mifoto.bmp); } Ya debe estar en el directorio o folder datos dicho archivo .BMP y adems otra vez recordar, que aunque la imagen ya esta en la pantalla, todava no se manda a la tabla a disco si no se ejecuta un avance de rengln o un Next, etc. 8.- La propiedad Stretch en DBImage, la amplia, otro mtodo es ponerlas en Clipboard o archivo ya con el tamao apropiado. TAREAS PROGRAMACION C++BUILDER 1.- UNA TABLA DE MAMIFEROS COMPLETA INCLUYENDO IMAGENES 2.- UNA TABLA DE PRODUCTOS O MERCANCIAS INCLUYENDO SU FOTO 13.- IMPRESION O REPORTES QREPORT C++BUILDER
Imprimir tablas o construir reportes sobre las mismas, es tambin una tarea comn en los sistemas de informacin basados en bases de datos. Lo bueno es que se tiene un folder o pestaa llamada QReport cargada de componentes visuales especializados en la impresin de reportes, esta librera de componentes, no es hecha por Borland, es hecha por una compaa llamada QSOFT™ QReport Practica para construir un reporte que contiene la cdula de un y solamente un cliente de la tabla de clientes. Los componentes y propiedades a usar son: 1.- Table1 * DataBaseName = c:\datos * TableName = Clientes.db * Active = true * Filter = ClaveCliente = 2 (observar que aqu es donde se determina cual cliente se imprime) * Filtered = true 2.- QuickRep1, se encuentra en pestaa QReport. Es el componente principal para impresin. Toma la forma y tamao de una hoja de impresora dentro de Form1. Sus propiedades a usar son: * Dataset = Table1 * Zoom = 50 3.- QRShape1 Se usara para crear un rectngulo para encabezados de la cdula de un cliente. Son varios tipos o formas las que existen de QRShape, rectngulos, lneas, crculos, etc., rectngulo es default, y la propiedad para cambiar de forma es Shape. Acomodarlo y expanderlo en la parte superior de la hoja de impresin (QickRep1). Sus propiedades a usar son: - +Pen = Click en signo + y poner: Color = clgreen Width = 5 4.- QRLabel1 Similar a label, contienen textos o mensajes estticos. Colocarlo dentro del rectngulo o seccin de encabezado. Propiedades: +Font = dar color y tamao de font 5.- QRSysData1 Componente especiales que contienen datos fijos de impresin, tales como numero de pagina, fecha, hora, etc. Colocarlo tambin dentro de la seccin o banda de encabezado. propiedades: 6.- QRSysData2 Otro del anterior, colocarlo dentro de la banda de encabezado, propiedad 7.- QRShape2 Con este se forma ahora un seccin, rectngulo o banda principal. Cuando un reporte, imprime mas de un rengln, por ejemplo todos los clientes, esta parte de la hoja recibe el nombre de banda de detalle. Propiedades: - +Pen = darle color y tamao(Width) apropiados. 8.- QRLabel### Colocar varios dentro de la banda de detalle, con caption apropiado, ejemplo, clave, nombre, foto, etc. 9.- QRDBText1 Componente para desplegar cada dato de una celda o campo o columna de una tabla, es similar a DBEdit pero es esttico, es decir solo despliega. Se debern poner tantos componentes QRDBText en esta banda o seccin de detalle, como columnas de datos existan o se quieran desplegar de la tabla. Propiedades: * Dataset = Table1 * DataField = seleccionar columna apropiada * Font = color, tamao, etc. que se quieran 10 .-QRDBImage Componente para desplegar e imprimir campos de tipo Graphics ( BMP, ICO, WFW). Propiedades: * Dataset = Table1 * DataField = Seleccionar una columna de tipo Graphics * Stretch = true Notas: 1.- El componente QuickRep, tiene la propiedad +Frame, para que tambin pueda desplegar e imprimir un marco apropiado. 2.- Para ir desplegando un Preview de impresin al tiempo del diseo del reporte, solo dobleclick dentro de la hoja de impresin (QuickRep) para que aparezca una ventana de Preview de impresin. 3.- La CIA Qsoft, ya tiene a la venta QReport V3.0 que ya trae incorporado WYSWYNG. 4.- Para Preview o impresin en tiempo de ejecucin, solo aadir un botn de ordenes OK, y usar solo una de las siguientes instrucciones: OnClickButton1() { QuickRep1Preview(); o QuickRep1Print(); solo una de las dos } ejemplo: a)Pantalla de diseo b)Program a: void __fastcall TForm1::Button1Click(TObject *Sender) { QuickRep1Preview(); } c)Pantalla de corrida: Como ya se indico la versin 3 de QReport ya trae incorporado WYSYNG. d)Pantalla de Preview durante ejecucin: T AREAS PROGRAMACION C++BUILDER 1.- REPORTE CON UN AUTO DE LA TABLA DE AUTOS 2.- REPORTE DE UN PROVEEDOR, DE LA TABLA DE PROVEEDORES, PERO EL USUARIO SELECCIONA EL FILTRO O LA CLAVE DEL PROVEEDOR ( CONSTRUIR DOS PANTALLAS, UNA CON EL FILTRO Y BOTON DE IMPRESION O PREVIEW Y LA SEGUNDA CON EL REPORTE). 14.- IMPRESION DE TODA LA TABLA C++BUILDER
Imprimir toda la tabla significa muchas hojas de impresora. Primero se deber quitar el filtro en la tabla y segundo entender lo que tienen en comn todas las hojas de impresora que se ocupan para imprimir la tabla. Primero todas las hojas ocupan un mismo encabezado o un mismo pie de pagina, donde puede ir por ejemplo la fecha o el numero de pagina. La primera hoja de todo el reporte, cuando menos debe llevar una banda de titulo, con el nombre de la compaa, el titulo y propsito de la tabla, la fecha, etc. Todo los renglones de la tabla, ocuparan muchas hojas de impresora para desplegarse, incluyendo un encabezado para todas las columnas que estn en la hoja, repito necesitamos un encabezado para columnas y que aparezca en todas las paginas. Probablemente, en la hoja final, seria conveniente aadir algunos contadores y acumuladores, por ejemplo la cantidad de renglones, algn acumulado de alguna columna numrica en especial, etc. QReport, usa este modelo de bandas para la construccin de reportes, es decir, en la practica anterior se uso un componente QRShape, para dividir el reporte en dos partes, secciones o bandas, pero QReport trae incorporado un componente llamado QRBand que permite dividir en partes, secciones o bandas todo el reporte. Este componente QRBand, en su propiedad BandType, permite construir los siguientes seis tipos importantes de banda. BANDA NOTAS
PAGE HEADER Banda de encabezados de paginas. Aparece en todas las hojas impresas. Poner dentro componentes para numero de pagina, etc. TITLE Banda de Titulo o encabezados del Reporte. Solo aparece en la primera hoja impresa. Poner componentes qrlabel con el nombre de la compaa, el propsito de la tabla, fecha, etc. COLUMM HEADER Banda de o para encabezados de columnas. Aparece en todas las hojas impresas. Poner dentro componentes qrlabel con el encabezado que lleva cada columna de la tabla. DETAIL Banda de detalle. Es la mas importante, porque es la que contiene los datos de los renglones de la tabla. Es la que constituye el grueso de las hojas impresas. Solo colocar dentro de esta banda los componentes de datos impresos, QRDBText y QRDBImage SUMMARY Banda de resumen. Solo aparece en la hoja final de impresin. Poner dentro de ella componentes de operaciones como es QRExpr y estudiarlo en la ayuda, para conocer sus mtodos (funciones) y aplicarlas. PAGE FOOTER Banda de pie de pagina. Aparece en todas las hojas impresas. Su funcin es similar a la banda de encabezado. De hecho, en un reporte solo se usa la b banda de encabezado o la banda de pie de pagina, pero no las dos. Solo poner dentro de esta banda, componentes de numero de pagina, o de fechas, o de hora, etc.
Lo mas importante a tomar en cuenta es cada componente QRBand que se ponga dentro de un reporte, se deber definir usando su propiedad BandType, como una cualquiera de los seis tipos de bandas, es decir, En general el procedimiento completo es: 1.-Poner un componente Table en la forma y nadamas cargarle sus tres propiedades bsicas( no usar filtros). 2.-Poner un Componente QuickRep( es la hoja de impresin) y cargarle las propiedades ya descritas en procedimiento de impresin anterior. 3.- Colocar y expandir un primer componente QRBand dentro del componente QuickRep y primero asociarle el tipo de banda que representa, por ejemplo de encabezado o de titulo, recordar que un reporte no necesariamente tiene que llevar las seis bandas. A este componente QRBand, cambiarle propiedades de font, frame, color, etc. 4.- Colocar dentro del componente QRBand1, los componentes necesarios y apropiados como se indico en el cuadro anterior de bandas y significados, por ejemplo QRLabel, etc. 5.-Colocar otro componente QRBand en la hoja de impresin, expanderlo y definirlo como banda de titulo o banda de encabezado de columnas, etc. 6.-Repetir los pasos anteriores, hasta completar todas las bandas. 7.- Colocar un botn de ordenes OK, y asociarle el cdigo de Preview o de impresin. TAREAS PROGRAMACION C++BUILDER 1.- Desplegar la tabla de Productos, y agregar un botn de impresin de tabla ( son dos formas una con la tabla y su navegador y la segunda es la forma de reporte) no olvidar Include File Unit. 15.- MODELO RELACIONAL DE DATOS C++BUILDER
Entre dos tablas bsicas o tablas simples cualesquiera, se debe y puede buscar, identificar y establecer una o varias relaciones entre ellas, ejemplo; tabla Clientes tabla Productos tabla Autos tabla TALLERES MECANICOS R1= El auto ingresa al taller R2= El auto es diagnosticado en el taller R3= El auto es reparado en el taller R4= El auto sale del taller Una relacin simple es la unin o combinacin de dos tablas bsicas mediante una y solo una accin, hecho o conducta especifica. Entindase de otra manera, como una frase que relaciona las dos tablas y un y solo un verbo que las une. Si se analizan detenidamente las relaciones de los ejemplo, es tambin posible deducir que un conjunto de relaciones forman o constituyen un proceso administrativo, contable, fiscal, o de otro tipo cualesquiera, en el primer ejemplo el proceso es el ventas, en el segundo es el proceso de reparacin de un auto. Debe ser obvio que un proceso cualesquiera no se podr describir completamente, con tres o cuatro relaciones simples nadamas. Aun mas, en un sistema de informacin cualesquiera cada una de las relaciones genera una tabla especial llamada de relacin, pero tambin genera en muchos casos un documento especifico, por ejemplo el cliente compra al contado productos genera la tabla de relacin y el documento llamado Factura, en la relacin el auto ingresa al taller se genera la tabla de relacin y/o documento llamado ORDEN DE ENTRADA, en la relacin el cliente aparta productos se genera la tabla de relacin y/o documento llamado NOTA O RECIBO DE APARTADO, etc. Existirn casos o relaciones donde ser casi imposible identificar o nombrar el documento o relacin existente, para resolver este problema, existen dos soluciones bsicas, la primera de ellas es crear por nuestra cuenta el documento, es decir si en un modelo practico no existe un documento para esta parte del proceso lo mas sencillo es crearlo en la empresa, documentarlo y pedir a la empresa que lo ponga en practica, en algunos casos es tambin posible no crear documento alguno, solo llamar a esta relacin con el nombre de las dos tablas, por ejemplo rel perros/gatos, rel clientes/productos, etc. ( aunque no es recomendable o muy explicativo). Igualmente es muy recomendable,, al describir un proceso cualquiera y su conjunto de relaciones, no usar o buscar relaciones muy abstractas, porque ser casi imposible pasarlas a un modelo de informacin implementado en computadora, por ejemplo la relacin al cliente le gustan los autos, por ejemplo los perros corretean gatos, etctera. En resumen las relaciones y en general el proceso deben de ser simples, y documentales. Para terminar de complicar las cosas un modelo completo de informacin, no se construye con dos tablas bsicas, un par de procesos y una cuantas relaciones o documentos, el modelo completo incluye un montn de tablas bsicas, otro montn de procesos diferentes entre ellas, y cada proceso contiene un conjunto amplio de relaciones. Por ejemplo en una Empresa de AUTOREFACCIONES, fcilmente se encuentran las tablas bsicas, de clientes, mecnicos, proveedores, partes, proceso de ventas al publico, proceso de compras a proveedores, etctera y cada proceso con su propio conjunto de relaciones y o documentos. TAREAS PROGRAMACION C++BUILDER 1.- PARA UNA EMPRESA DE VIDEO, IDENTIFICAR SUS TRES TABLAS MAS BASICAS , SUS DOS PROCESOS MAS IMPORTANTES Y CUANDO MENOS CINCO RELACIONES EN CADA PROCESO. 2.- CONSTRUIR UN MODELO DE TRES TABLAS BASICAS, DOS PROCESOS Y CUATRO RELACIONES PARA UNA CASA DE EMPEO. 3.- UN EMPRESARIO DE EXITO, TIENE VARIOS LOTES PARA LA VENTA DE AUTOS, VARIOS TALLERES MECANICOS PARA SU REPARACION, VENDE LOS AUTOS A CREDITO Y AL CONTADO, CONSTRUIR UN MODELO SIMPLE DE BASE DE DATOS RELACINALES PARA SU IMPLEMENTACION. 16.- TIPOS DE RELACIONES C++BUILDER
Analizando a fondo, la mayora de las relaciones y sus documentos son del tipo llamado 1:M ( uno a muchos), es decir cada tabla de relacin o documento contiene un rengln de la primera tabla y muchos renglones de la segunda tabla, por ejemplo en una factura solo hay o se encuentra, un cliente y muchos productos, en una receta por ejemplo solo hay un paciente pero hay muchas medicinas, en una orden de compra o de pedido hay un solo proveedor pero hay muchos productos y as sucesivamente. En general existen los siguientes tipos de relaciones: Repitiendo el caso mas comn de relaciones, son las de 1:M, en este caso, solamente la tabla de relacin no permite resolver el problema de informacin, en casos de relaciones 1:M se ocupara una segunda tabla llamada detalle-relacin. El modelo completo de tablas para una y solamente una relacin de tipo 1:M es; tabla de 1(uno) tabla de M(muchos) - Clave de uno - Clave de muchos - otros campos - otros campos tabla de R(relacin) tabla detallerelacion - Clave de relacin - Clave de relacin - Clave de uno - Clave de muchos - otros campos - otros campos Este es el modelo principal de una base de datos relacional y se deber siempre aplicar cuando se tenga que construir una base de datos que tenga una relacin 1:M. Ejemplo; Clientes(1) Productos (M) Facturas(relacin) DetalleFactura (detallerelacin) Clave Factura Clave Factura Clave Cliente Clave Producto Fecha Factura Cantidad Producto etctera Factura Etctera ejemplo; Pacientes (1) Medicinas (muchos) Recetas (relacin) DetalleReceta Como se observa en los dos ejemplos, las tres claves ( la de uno, la de muchos y la de relacin) solo se repiten una sola vez en otra tabla. De nuevo un problema o sistema de informacin, que descansa en una base de datos de tipo relacional, y solo contiene una relacin de tipo 1:M ocupa cuatro tablas ( la de uno, la de muchos, la de relacin y la de detalle-relacion). Si el problema incluye una segunda relacin 1:M por ejemplo NotaDeVentaque se deriva de las mismas dos tablas bsicas, entonces el modelo completo se resuelve con seis tablas ( las dos bsicas, las dos de relacin y las dos de detalle) y as sucesivamente. Como se dijo anteriormente un problema sencillo de informacin por ejemplo el de una tienda de vdeo, ocupa unas cuatro o cinco tablas bsicas, unos dos o tres procesos y cada proceso dos o tres relaciones mnimo, entonces el sistema se resuelve con 20 o mas tablas, las quejas sobre este modelo a Codd (creador del modelo relacional de bases de datos). El caso de relaciones 1:1 se resuelve con solo tres tablas, solo agregar tambin en la tabla de relacin la clave de muchos. El caso de relaciones 1:Cte tambin se resuelve con tres tablas, solo agregar en la tabla de relaciones tantas claves de la tabla de constantes como constantes existan en la relacin, por ejemplo si la relacin es boleta de calificaciones y solo contiene tres materias, entonces se ocupan la tabla de alumnos, la de materias y la tabla de boleta, esta ultima tendra clave alumno, clave materia1, clave materia2, clave materia3. El caso de relaciones M:M solo se resuelve localizando o identificando o de plano construyendo, la dos relaciones 1:M originales de donde sali este documento, por ejemplo en el informe al gobierno de todos los distribuidores de equipo de computo y todos los equipos que compraron en el mes, es probable que este informe se construya con las tablas de relaciones de facturas y notas de ventas. TAREAS PROGRAMACION C++BUILDER 1.- CONSTRUIR EL MODELO DE LAS CUATRO TABLAS PARA LA RELACION EL CLIENTE COMPRA A CREDITO PARTES O REFACCIONES EN LA REFACCIONARA. 2.- CONSTRUIR EL MODELO DEL CLIENTE APARTA JOYAS EN UNA JOYERIA. 3.- CONSTRUIR EL MODELO COMPLETO DE CLIENTES Y PELICULAS CON LAS RELACIONES, RENTA PELICULAS, DEVUELVE PELICULAS, DAA PELICULAS, COMPRA PELICULAS. 4.- CONSIDERANDO EL PROBLEMA DE LOTES DE AUTOS, AUTOS, CLIENTES, TALLERES CONSTRUIR MODELO PARA LOS PROCESOS DE COMPRA DE AUTOS, Y RESTAURACION DE AUTOS( ES CUANDO EL LOTE COMPRA LOS AUTOS Y LES DA UNA ARREGLADA PARA SU VENTA). 17.- C++BUILDER MODELO RELACIONAL Y DATABASE DESKTOP
El modelo relacional completo, antes de traspasarlo al DataBase DESKTOP, debe incluir todo lo siguiente: tabla de uno * Clave de Uno S, P* (S = ISuno ) * otros tabla de muchos * Clave de Muchos S, P* (S = ISmuchos) * otros tabla de relacin * Clave Relacin S, P* (S = ISrelacion) * Clave de Uno S, IR (S = ISReluno) * otros tabla de detalle * Clave Relacin C*,S,IR (S = Isdetrel IR = IRDetrel) * Clave Muchos C*,S,IR (S = ISDetmuchos IR = IRDetmuchos) * otros notas: P* , significa que dicho campo es una clave o llave primaria, en DataBase Desktop, recordar que solo se ocupa un click en la columna llamada KEY para que aparezca la * C* , se conocen como claves o llaves compuestas, para crear una clave o llave compuesta solo marcar con *, los dos campos involucrados S, es un llamado ndice secundario ( secondary ndex), se usa para dar un orden o clasificacin alterno a la tabla indicada, por ejemplo en la tabla clientes, se puede marcar ciudad como ndice secundario, para que de ser necesario en lugar de desplegarse ordenada por clave o numero de cliente, se despliegue ordenadas por ciudades, o por nombres, o por telfonos, etc. El (S = ISuno ) es el nombre que va a recibir el ndice secundario, por ejemplo si la tabla es clientes el ndice secundario se llamara Isclientes, otra vez en el caso (S = ISmuchos ) si la tabla es productos al ndice secundario se le pondr el nombre de Isproductos. Prrafos mas adelante, se muestra el procedimiento para crearlos dentro del Database Desktop. IR, se conocen como integridad referencial ( integrity referential), se utiliza para garantizar que nuevos elementos en una tabla ya existan en la otra tabla, por ejemplo de IR entre la tabla de relacin y la tabla de uno, en el caso de Facturas y Clientes, garantiza que no se pueda capturar la clave de un cliente cualesquiera, si este cliente no existe o esta dado de alta en la tabla de clientes. Otra vez la IR entre la tabla de detalle y la tabla de muchos, en el caso de DETALLEFACTURA y PRODUCTOS, garantiza que no se pueda capturar la clave de un producto, en la tabla de detalle, si este producto no existe, en la tabla de relacin y as sucesivamente. (IR = IRReluno) es el nombre que se le va a asignar a la relacin, para el ejemplo que se esta siguiendo se llamara IRFacturaCliente, y as sucesivamente. El procedimiento para crear un ndice secundario (S) dentro del DataBase Desktop es: A)Tools, Utilities, Restructure y seleccionar tabla a indexar. B)Click en ComboBox de la derecha, hasta que aparezca y seleccionar la opcin Secondary Indexes. C)Click abajo en botn Define. D)Aparece ahora el siguiente editor de ndices:
E)Solo seleccionar el campo o atributo a indexar y luego click en flecha negra ADD para que pase a la segunda ventana, luego click en OK. F)DD pregunta ahora por el nombre del ndice mediante la siguiente ventana:
G)Escribir el nombre ya propuesto por ejemplo ISNomProducto y click en OK. H)DD regresa ahora ala tabla principal, click en botn SAVE para grabarla con los nuevos cambios. I) Cerrar la tabla, con click en X arriba. J) Repetir los pasos desde inciso A, para construir los ndices de las otras tablas. El Procedimiento para crear las integridades referenciales es: 1.- Tools, Utilities, Restructure y seleccionar tabla a construirle la integridad referencial. 2.- Click en ComboBox de la derecha, hasta que aparezca y seleccionar la opcin Referential Integrity. 3.- Click abajo en botn Define. 4.- Aparece ahora el siguiente editor:
5.- En la primera ventana estn todos los campos de la tabla a enlazar (factura) solo doble click en el campo de enlace (Clave Cliente) y observar que se pase a la ventana chica. 6.- En la segunda ventana estn todas las tablas del directorio, solo doble click en la tabla a enlazar (clientes), con eso el campo de enlace (Clave Cliente) de dicha tabla tambin pasa a la ventanilla izquierda, como se observa en la grfica anterior. 7.- En resumen la integridad referencial permite el enlace entre las dos tablas, su efecto practico, como ya se indic es que tablas unidas de esta manera no permiten altas o captura de un rengln, si dicho rengln de informacin, no existe en la tabla enlazada. 8.- Para terminar este proceso solo click en el botn OK. 9.- DD pregunta ahora por el nombre que tendr, esta integridad referencial o enlace usando la siguiente ventana:
10.-Escribir el nombre ya propuesto por ejemplo IRFacturaCliente, en este ejemplo, se esta simbolizando un enlace de la tabla de factura hacia la tabla de cliente, usando el campo comn en ambas de Clave Cliente. 11.-DD regresa ahora a la tabla principal, click en botn SAVE para grabarla con los nuevos cambios. 12.-Cerrar la tabla, con click en X arriba. 13.-Repetir los pasos desde inciso A, para construir los enlaces o integridad referencial con las otras tablas. Como una nota u observacin importante, recordar que es muy simple el proceso de que enlazar o de a que construirle las integridades referenciales, en este ejemplo es de Factura hacia Cliente con Clave Cliente, luego es de DETALLEFACTURA a Factura con Clave Factura y al final es de DETALLEFACTURA hacia Producto con Clave Producto. Otra vez, siempre es lo mismo, de Receta hacia Paciente con Clave Paciente, es de DetalleReceta hacia Receta con Clave Receta y al final de DetalleReceta hacia Medicina con Clave Medicina. Recordar que solo son tres campos claves y solo estn repetidos dos veces, y dos de ellos siempre estn en Detalle, por eso solo son tres enlaces o IR y dos de ellos se encuentran en Detalle. El procedimiento general para crear las cuatro tablas, en DataBase Desktop y en el siguiente y estricto orden es: 1.- Crear un directorio o folder especifico para almacenar las cuatro tablas, con explorer o my computer de Windows. 2.- Crear las cuatro tablas, solo marcando las llaves primarias y llaves compuestas, ( estrellitas). 3.- Ir cargando las cuatro tablas para aplicarles el procedimiento que se dio para ndices secundarios. 4.- Hasta al final ir cargando las dos tablas que solo se ocupan para crear los enlaces o Integridad Referencial ( observar las notas, solo se crean enlaces con la tabla de relacin y dos veces con la tabla de detalle). 5.- Abrir e ir cargando las tablas tambin en orden (1,M,R,D) para capturarles unos cuantos renglones de pruebas. TAREAS PROGRAMACION C++BUILDER 1.- CONSTRUIR Y CARGAR EN DATABASE DESKTOP LA RELACION RECETA(SON CUATRO TABLAS). 2.- CONSTRUIR Y CARGAR EN DATABASE DESKTOP LA RELACION ORDEN DE COMPRA. 3.- CONSTRUIR EN DATABASE DESKTOP LA RELACION DE LA NOTA DE RENTA DE PELICULA. 4.- CONSTRUIR EN DATABASE DESKTOP LA RELACION RECIBO DE RENTA( AQUI SOLO SON TRES TABLAS Y EXISTE TAMBIEN UNA IR O ENLACE DE RECIBO A DEPARTAMENTOS). 18.- APLICACIONES CON TABLA DE RELACION C++BUILDER
Es tiempo ahora de construir la aplicacin final con las tablas construidas con el modelo relacional de bases de datos. Recordar primero que en general, el usuario solo tendr acceso y podr manipular tres de ellas, la tabla de uno, la tabla de muchos y la tabla de relacin, las dos primeras de ellas son construidas usando aplicaciones normales por rengln y por tabla, como se realizo en los primeros temas del capitulo, es recomendacin y sugerencia que la tabla de uno se construya usando el formato de rengln y la tabla de muchos se construya usando el formato de tabla(DBGrid). En cuanto a la aplicacin a construir con la tabla de relacin, tambin dentro de C++Builder se debe construir los enlaces con las tablas ya descritas, con los siguientes considerandos ; T1-->TR ; TM-->TDET ; TDET-->TREL
ej. 2) PAC-->RECETA ; MED-->DETREC ; DETREC-->RECETA OBSERVAR Y TOMAR EN CUENTA COMO Y DE DONDE HACIA DONDE SE GENERAN LOS TRES ENLACES DENTRO de C++BUILDER. Tomar nota de las diferencias entre los enlaces en DD y en C++Builder. Estos enlaces se hacen usando dos propiedades extras en los componentes Table dentro del C++Builder, propiedades que se explican y demuestran mas adelante. Recordar ademas, que es en la primera tabla de cada uno de estos tres tipos de enlaces. donde se establece la relacin de enlace o donde se manipula la propiedad correspondiente. Para construir una aplicacin para la tabla de relacin: 1.- Aunque es solo la tabla de relacion, la que est aparentemente a la vista del usuario, la forma debera contener los cuatro componentes Table, puesto que esta relacin, descansa y ocupa las cuatro tablas. 2.- Estos cuatro componentes Table se colocaran y usaran en el siquiente orden para el ejercicio de aplicacin: Table1 Tabla de uno (ej. clientes) Table2 Tabla de muchos (ej. productos) Table3 Tabla de relacin (ej. facturas) Table4 Tabla de detalle (ej. detallefactura) 3) Igualmente se ocupan cuatro componentes DataSource en el mismo orden, es decir DataSource1 apunta a Table1, DS2 a T2, y as sucesivamente. 4.- La Forma que contiene la tabla de relacin se organiza usando tres componentes Panel para su mejor distribucin, estos componentes Panel, se construyen y contienen:
DBNav1(DS3) Nva Fact DBEdit(DS3)
Panel de uno Cve Cte Nom Cte Dir Cte etc.Cte NVO Cte DBEdit DBEdit DBEdit DBEdit Buttonl (DS3) (DS1) (DS1) (DS1)
Panel de detalle NUM Prod. Nom Prod. etc. Prod. DBEdit DBEdit DBEdit (DS4) (DS2) (DS2) DDBNav2(DS4)
Notas: 1.- Es muy importante que se respete el tipo de componente que va dentro de cada panel y mas importante an que dichos componentes apunten a el DataSource indicado entre parntesis. 2.- Igualmente es muy importante, el siguiente cdigo que se deber poner en el evento OnExit del ultimo DBEdit que se tenga en pantalla y que se cargue o capture por parte del usuario de la tabla de relacin y su DataSource3 correspondiente, generalmente es la clave relacin o fecha, en particular seria el ultimo componente que se tenga apuntado a DS3, es en este componente, donde se debe usar: OnExitDBEdit#() { Table3Refresh();} Esta instruccin actualiza los datos o rengln de la tabla de relacin, antes que la tabla de detalle, haga una bsqueda, dentro de la tabla de relacin. 3.- El cdigo de los tres botones de ordenes, es el siguiente:
OnClickButton1(){
//ocultar la pantalla de factura y desplegar o llamar la pantalla de clientes
}
OnClickButton2(){
Table4->Insert();
// para insertar un nuevo rengln en tabla de detalle
}
OnClickButton3(){
// primero operaciones pertinentes si es que existen y
// al final cerrar con la instruccin
Table4->Refresh();
// para cargar en disco el ultimo rengln de la tabla
// de detalle
} \ 4.- Como se observa los mtodos Insert() y Refresh(), usados se derivan y se pueden sustituir con DDBnavegadores y sus botones visibles correspondientes, pero se debe buscar que el usuario los presione en el momento indicado. 5.- Este esquema se puede aplicar a cualquier tabla relacional(recetas, ordenes de compra, solicitudes de servicios, etc.) solo realizar los ajustes correspondientes. PROCEDIMIENTO PARA CONSTRUCCION DE TABLA RELACIONAL 1.- CARGAR C++Builder. 2.- PONER LOS CUATRO COMPONENTES TABLE EN LA FORMA, Y CARGARLES SUS TRES PROPIEDADES BASICAS(DATABASENAME, TableName, Active),RESPETANDO EL ORDEN SUGERIDO (Table1Tabla de uno, Table2Tabla de muchos, Table3Tabla de relacin, Table4Tabla de detalle). 3.- PONER LOS CUATRO COMPONENTES DataSource QUE SE OCUPAN Y APUNTARLOS A SU TABLA CORRESPONDIENTE EN ORDEN, ES DECIR DS1TABLE1, DS2Table2, DS3Table3, DS4Table4, USANDO LA PROPIEDAD DATASET DEL COMPONENTE DataSource. 4.- ARMAR Y CARGAR LOS TRES ENLACES ENTRE TABLAS YA SUGERIDOS, ESTO ES T1TR, 2) TM TDET, 3) TDETTREL, USANDO LAS PROPIEDADES MASTERSOURCE Y MASTERFIELD EN LA PRIMERA DE LAS DOS TABLAS EN CADA RELACION, COMO SE DEMUESTRA CON EL SIGUIENTE EJEMPLO DE LA PRIMERA RELACION ES DECIR, T1TR. 1. SELECCIONAR LA TABLA DE CLIENTES ( LA DE UNO) 2. CLICK A UN LADO DE LA PROPIEDAD MASTERSOURCE Y SELECCIONAR DATASOURCE3( QUE ES LA DE RELACION O FACTURA) CLICK A UN LADO EN LA PROPIEDAD MASTERFIELD (DONDE ESTAN LOS TRES PUNTILLOS) Y SALE EL SIGUIENTE EDITOR DE CAMPOS DE ENLACE: 3. 4. OBSERVAR QUE EN LA PRIMERA VENTANA ESTA EL CAMPO DE ENLACE DE LA TABLA DE UNO, Y EN LA SEGUNDA ESTAN TODOS LOS CAMPOS POSIBLES A ENLAZAR DE LA TABLA DE RELACION( FACTURA) 5. COMO SE VAN A ENLAZAR AMBAS USANDO EL MISMO CAMPO (CLAVE CLIENTE), SELECCIONAR (CLICK) ESTE MISMO CAMPO (CLAVE CLIENTE) EN LAS DOS VENTANAS Y LUEGO CLICK EN BOTON ADD, EL ENLACE DEBE APARECER EN LA VENTANA DE ABAJO, COMO SE MUESTRA EN LA SIGUIENTE GRAFICA: 6. 7. LUEGO CLICK EN BOTON OK PARA FINALIZAR EL PROCESO 5.- EL PROCEDIMIENTO ANTERIOR 4.1) A 4.6) SE DEBERA REPETIR PARA LOS DOS CASOS RESTANTES(TMTDET, TDETTREL). 6.- PONER LOS TRES COMPONENTES PANEL EN LA FORMA Y DENTRO DE CADA PANEL, PONER Y APUNTAR LOS COMPONENTES YA DESCRITOS EN EL MODELO ANTERIOR. 7.- RECORDAR PONER LOS TRES COMPONENTES BUTTON Y CARGARLOS CON EL CODIGO QUE TAMBIEN YA SE INDICO. EJEMPLO: 1. PANTALLA DE DISEO 1. CODIGO
TAREAS PROGRAMACION C++BUILDER 1.- CONSTRUIR UN MENU QUE CONTENGA Y LLAME LAS TABLAS CLIENTES, PELICULAS Y RECIBO DE RENTA DE UNA VIDEOTIENDA 2.- CONSTRUIR UN MENU QUE CONTENGA Y LLAME LAS TABLAS PACIENTES, MEDICINAS Y RECETAS DE UNA FARMACIA 3.- CONSTRUIR UN MENU QUE CONTENGA Y LLAME LAS TABLAS PROVEEDOR, PRODUCTOS Y ORDEN DE COMPRA DE UNA REFACCIONARIA