Está en la página 1de 38

IV UNIDAD C++BUILDER INT A LAS BASES DE DATOS

1.- INTRODUCCION C++BUILDER



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.

//-----------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Edit1->Text=DBEdit3->Text.ToDouble()+DBEdit6 Text.ToDouble();

}

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&trade;
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. 1) CTE-->FACTURA ; PROD-->DETFAC ; DETFACT-->FACT

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

//---------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{ // En esta parte se oculta la ventana de factura

// y se llama la ventana de cliente

}

//--------------------------------------------------

void __fastcall TForm1::DBEdit3Exit(TObject *Sender)

{ Table3->Refresh();

}

//---------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Table4->Insert();

}

//---------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

// operaciones y terminar con:

Table4->Refresh();

}

//---------------------------------------------------

PANTALLA DE EJECUCION

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

También podría gustarte