Está en la página 1de 89

2

I – INTRODUCCION

1.1 Introduccion

Suponga que sigue guardando algo en una hoja de cálculo de Excel clásica, como se muestra en Fig 1.

Figure 1.

Esto parecería suficiente para una contabilidad completa. Desafortunadamente, este enfoque tiene una
serie de problemas que analizaremos a continuación.
Suponga que es un empresario que ofrece el alquiler de equipos de construcción a otras empresas y
mantiene los registros en un tablero simple, como se muestra en Fig. 1.

Problema 1

Primero, ¿qué pasará si una empresa cambia su número de teléfono? Digamos que la empresa "KH Services"
tiene como nuevo número de teléfono 565-55-56. Para mantener la tabla actualizada, necesita hacer
cambios en tres líneas (¿y si ya hay 500?).
Si no lo hacemos, nuestros datos serán inconsistentes, después de lo cual no podremos determinar cuál de
los números de teléfono está actualizado.

Problema 2

Podemos cometer un error tipográfico en el nombre de la empresa y escribir accidentalmente KJ Service en


lugar de KH Service. Posteriormente, será difícil saber si se trata de un cliente nuevo o si se cometió un error
tipográfico. Tal error no podría haber ocurrido si hubiéramos elegido una empresa de una lista.

Problema 3

No puede lograr mantener registros con varias personas.


Por ejemplo, su contador tiene que administrar las facturas y los pagos, y los empleados de su empresa
quieren mantener registros de los pedidos y las reuniones con los clientes, pero, por ejemplo, la contabilidad
no querría que los empleados de alquiler tengan acceso a la información de pago.
3

Surgirán problemas más graves a la hora de analizar los datos acumulados, por ejemplo:
• Calcule los ingresos para un período de ubicación determinado.
• Calcular el número de equipos alquilados por una determinada empresa.
• Sepa qué tipo de equipo está disponible actualmente, etc.

Cuando se acumula mucha información en su tabla, necesariamente surgirán tales problemas, así como
otros, dependiendo de las especificidades de su actividad contable.

1.2 Base de datos

Ahora que tenemos problemas obvios para mantener los registros en una tabla, entenderemos cómo
organizar todo correctamente.

Para administrar una contabilidad completa, es necesario utilizar lo que se llama una "base de datos".

¿Que es una base de datos? Puede imaginarlo usted mismo en forma de varias hojas de cálculo de Excel
vinculadas entre sí de una manera particular. Además, cada tabla se crea para una entidad específica, pero
aprenderá más sobre ella en el próximo capítulo.

1.3 Identificación de las entidades


Como puede ver en la tabla de la Figura 1, todos los elementos están apilados, estos son:
• Cliente (columna: "Nombre de cliente", "Teléfono")
• Equipo que poseemos (columna: "Nombre del equipo", "Costo por día")
• Tiempo de alquiler (columna: "Fecha de inicio", "Fecha de finalización", "Costo")

IMPORTANTE !

Las entidades anteriores son independientes y cada entidad debe tener su propia tabla. Este proceso
también se llama normalización.
Como resultado, en lugar de una tabla, tendremos 3, como se muestra en la Fig. 2.

Figura 2.

Tabla de clientes: contiene todos nuestros clientes y sus números de teléfono.


Tabla de equipos: contiene los nombres de los equipos que poseemos, así como su costo por 1 día de
alquiler.
Tabla de alquiler: contiene información sobre los términos del equipo alquilado.

Ahora, los problemas descritos en el capítulo 1.1 están resueltos.:


4

1. Cuando una empresa cambia el número de teléfono, simplemente cámbielo a una sola línea en la
tabla llamada Cliente

2. No es necesario escribir manualmente el nombre de la empresa cada vez, evitando así errores
tipográficos. Simplemente elegimos la empresa necesaria de una lista.

3. Varios usuarios de bases de datos pueden acceder solo a determinadas tablas, por ejemplo, solo
un gerente puede agregar una nueva empresa como cliente en la tabla Cliente.

1.4 Enlaces entre tablas y claves externas


Como puede ver, ahora tenemos tres tablas separadas que no están conectadas entre sí y, mirándolas, no
está claro qué equipo ha alquilado una empresa de este tipo y durante cuánto tiempo. Para que esto sea
obvio, debe agregar enlaces a la tabla.

Los enlaces entre las tablas son quizás uno de los temas más importantes
en el campo de las bases de datos.

Después de agregar los enlaces necesarios, nuestras tablas se verán como la que se muestra en Fig. 3.

Figura 3.

Mirando la Fig.3, echemos un vistazo más de cerca a las conexiones:


5

Tenga en cuenta que ahora, cada tabla tiene una columna denominada id. Debido a esta columna, cada
registro de la tabla tiene un identificador único. Llamémoslo correctamente "Clave principal". Al agregar un
nuevo registro a la tabla, se le asignará automáticamente.

En la tabla Rent, también puede observar la aparición de las columnas id_Client e id_Equipment. Estas son
las "claves externas".

Es a través de las claves primaria y externa que se forman las relaciones entre las tablas.
Además, todo es simple, la clave externa id_Client of Rent table apunta a la clave principal de la tabla Client.

Por lo tanto, sabemos qué cliente procesar para cada entrada en la tabla de alquiler. Para ser más claro, echa
un vistazo a Fig. 4.

Figure 4.

Por ejemplo, en la tabla Rent, para el registro con ID 6, el cliente "euroasfalt" ha alquilado el equipo
"Bulldozer TM-10".
6

1.5 Tipos de datos


Antes de comenzar a crear nuestra primera aplicación de base de datos, debemos considerar otro tema.
Estos son los tipos de datos que se utilizan en las columnas.

A primera vista, todos los datos de las tablas parecen ser solo texto, pero ese no es el caso. Cada columna de
la tabla corresponde a un determinado tipo de datos, que enumeraremos:

● texto (cualquier texto, por ejemplo, el nombre o el nombre de la empresa)


● entero (sin parte fraccionaria, por ejemplo, la cantidad de algo)
● número de coma flotante (por ejemplo, el número 3,14)
● moneda (por ejemplo, $ 25,00)
● booleano (toma el valor de Sí o No)
● fecha (por ejemplo, 02/06/2016)
● hora (por ejemplo, 19:57:00)
● fecha y hora (por ejemplo, 02/06/2016 19:57:00)
● archivo (le permite guardar el archivo directamente en la base de datos)
● imagen (le permite guardar una foto en la base de datos)
● una clave externa (hablamos de ella en la sección 1.3)

Por lo tanto, cuando crea columnas en una tabla, debe seleccionar su tipo. ¿Por qué es necesario? Esto
permite almacenar datos de forma más racional y proporciona a la base de datos un mayor rendimiento.
También ayuda a evitar errores. Por ejemplo, si una columna es de tipo entero, el usuario no podrá guardar
texto.
7

2. Poner en práctica.

2.1 Creemos nuestra primera aplicación trabajando con una base


de datos.

Ahora conocemos suficiente teoría de bases de datos para crear su propia aplicación trabajando con ella. Un
lector más experimentado podría hablar sobre el lenguaje de búsqueda SQL que aún no se ha abordado,
pero afortunadamente las herramientas de desarrollo modernas nos permiten hacerlo por primera vez.

Pero si decide hacer un trabajo más ambicioso en bases de datos, probablemente tendrá que familiarizarse
con SQL.

Para nuestro trabajo práctico, elegí usar un entorno de desarrollo de base de datos bastante simple, en el
que todo se junta para comenzar inmediatamente a crear una estructura de base de datos y la aplicación
que funcionará con ella.

Visite http://myvisualdatabase.com/ para obtener la última versión de My Visual Database.


El programa, lamentablemente, no es gratuito, pero tiene un período de prueba, que será suficiente para
fines educativos. Pero puede encontrar una versión gratuita anterior a través de este enlace:
http://myvisualdatabase.com/download/myvisualdb1.44.exe

Veamos brevemente las posibilidades del programa:

● Creando la estructura de la base de datos


● Crear formularios para trabajar con la base de datos.
● Sistema de informes para impresión y análisis.
● Un lenguaje de secuencias de comandos que permite implementar cualquier funcionalidad no estándar.
● Admite DBMS SQLite y MySQL
● Capacidad para crear un acceso web simple a la base de datos.
● Cree una aplicación de Windows independiente

Una vez instalado, My Visual Database está inmediatamente listo para su uso, no se requiere configuración
adicional (Fig.5)
8

Figura 5. – Apariencia de My Visual Database

Ahora podemos empezar a crear nuestra primera aplicación. Como ejemplo, crearemos las cuentas de
equipos de construcción consideradas anteriormente.
9

Antes de comenzar a crear una aplicación, guarde el proyecto en una carpeta separada (menú: Archivo>
Guardar como ...), llame a nuestro proyecto, p. Alquiler (Fig.6)

Figura 6. - Guardar el proyecto

Como vimos en el primer capítulo del libro, la base de datos está formada por tablas y columnas, que ahora
tenemos que crear.

Comencemos creando tablas:


• Cliente
• Equipo
• Alquiler

En la pestaña Tablas de base de datos, haga clic en el botón [Nueva tabla] para crear nuestra primera tabla
de Cliente. De la misma forma crearemos las tablas de Equipo y Renta
10

Después de crear las tablas, deberíamos obtener esto, como se muestra en Fig. 7.

Figura 7.

Nuevamente, preste atención a la Fig.7: para cada tabla creada arriba hay un botón [Nuevo campo]. Este
botón se utiliza para crear los campos de las tablas. Creemos el primer campo. Haga clic en el botón [Nuevo
campo] en la tabla Cliente, luego seleccione el tipo de TEXTO en el menú que aparece e ingrese el nombre
del campo Nombre. De la misma manera, cree todos los campos siguientes para las tablas restantes. No
olvide seleccionar el tipo de campo correcto.

Mesa de clientes:
• Nombre (nombre del cliente, escriba TEXTO)
• Teléfono (teléfono de clicnt, escriba TEXTO)

Mesa de equipo
• Tecnología (técnicas de nombres, tipo TEXTO)
• CostPerDay (precio por 1 día, escriba CURRENCY)

Tabla de alquiler
• DateStart (fecha de inicio del arrendamiento, escriba FECHA)
• DateEnd (fecha de finalización del arrendamiento, escriba FECHA)
• TotalCost (costo total, tipo de MONEDA)
11

El resultado de su trabajo debe ser como se muestra en Fig. 8.

Figure 8.

Puede recordar que cada tabla debe contener un campo llamado id, que almacena un identificador único
para cada registro. No necesita preocuparse por ello, el programa lo crea automáticamente, pero no
muestra este campo en las tablas.

La estructura de la base de datos está casi lista, solo queda crear dos claves externas en la tabla Rent que se
asociarán con las tablas Cliente y Equipo.

Esto es necesario para que cuando creemos un nuevo registro de alquiler, podamos seleccionar un cliente y
equipo de la lista y esta opción se guardará en claves foráneas.

La creación de claves externas es casi similar a la creación de campos. En la tabla de alquiler, haga clic en
[Nuevo campo] y, en el menú que aparece, seleccione [Relación], luego seleccione Cliente de la lista y haga
clic en Aceptar, como se muestra en Fig. 9.
12

Figura 9.

Haga lo mismo para crear una clave externa en la tabla Equipo.

Nuevamente, en la tabla Alquiler, haga clic en el botón [Nuevo campo] y seleccione el elemento "Relación"
del menú que aparece, y luego seleccione la tabla Equipo de la lista y haga clic en "OK".
13

La forma final de las tablas y campos se muestra en Fig. 10.

Figura 10.

En este punto, las estructuras de nuestra base de datos están completamente listas.

Luego, necesitamos crear una interfaz de usuario para interactuar con la base de datos para que podamos
crear, editar y eliminar registros. También es necesario que la aplicación busque fácilmente registros de
acuerdo con diferentes criterios.

A partir de ahora, puede iniciar su aplicación haciendo clic en el botón de la barra de herramientas. Verá la
ventana Form1, en la que no hay nada.

Después del primer lanzamiento de la aplicación, en la carpeta del


proyecto, encontrará un archivo exe, que se convierte en una aplicación
independiente, lista para ejecutarse en cualquier computadora, sin instalar
componentes adicionales.

Definamos qué formas necesitamos:


1. Form1
14

Formulario para buscar. El mismo formulario será el principal; aparecerá exactamente cuando inicie su
aplicación.

2. frmRent
Formulario para crear y editar un registro de alquiler. Este formulario escribirá datos en DB Rent.

3. frmClientList
Formulario con lista de clientes.

4. frmClient
Formulario de creación y edición de un cliente. Este formulario escribirá datos en la base de datos del
cliente.

5. frmTechList
Formulario con lista de equipos.

6. frmTech
Formulario de creación y edición de información de equipos. Este formulario escribirá datos en la base de
datos de equipos.

Normalmente, para cada tabla de base de datos, necesita dos formularios, uno para ver todos los registros y
otro para crear o editar los registros de esa tabla.

Para crear una interfaz, tiene los componentes que ve en la barra de herramientas (Fig. 11).

Figura 11.

Casi todos los componentes son estándar y se utilizan normalmente en la mayoría de las aplicaciones de
Windows. Pero los revisaremos dando una breve descripción:

Arrow
Cancela la selección de cualquier componente seleccionado
Label - Le permite colocar una etiqueta en el formulario.
En general, el componente no tiene funcionalidad.
Button - Un componente importante y de uso frecuente.
Por ejemplo, se puede utilizar para guardar un registro en una base de datos.
Text field (TextBox).
Sirve para ingresar información numérica y de texto.
Campo de texto de varias líneas (Memo).
También sirve para ingresar información de texto.
La lista desplegable (ComboBox).
Le permite seleccionar un valor de la lista.
CheckBox
Tiene dos o tres estados, está marcado, no marcado o atenuado.
15

DateTimePicker
Para ingresar la fecha u hora.
DBImage
Le permite guardar una imagen en una base de datos.
DBFile
Le permite guardar un archivo en la base de datos.
Calendar
Sirve exclusivamente para seleccionar la fecha.
TableGrid
Ver registros de la base de datos como una vista tabular
Counter
Asigna un número único a la grabación.
Panel
Elemento de interfaz decorativo
GroupBox
Elemento de interfaz decorativo.
PageControl
Le permite crear pestañas intercambiables con la posibilidad de colocar otros componentes
en cada pestaña
Picture
Permite colocar imágenes en el formulario.
Google Maps
Muestra un mapa de Google en su aplicación y marcadores.

Comencemos por crear el primer formulario que se utilizará para buscar registros. En este mismo formulario
colocaremos botones que llamarán a otro formulario para crear o modificar un registro.

Para crear este formulario serán suficientes los siguientes componentes:

Haga clic en la pestaña Form1 como se muestra en Fig. 12.

Figura 12.

Después de seleccionar el componente deseado de la barra de herramientas, haga clic izquierdo en el


formulario Form1 donde desea colocar este componente.
Una vez que el componente se coloca en el formulario, si necesita editar el texto, puede hacerlo utilizando la
propiedad Título en el panel "Propiedades del componente". (Fig. 13)
16

Figura 13

Coloque todos los componentes en el formulario Form1 como se muestra en la Fig.14.

Para su comodidad, las líneas de color indican dónde y qué componentes deben colocarse en el formulario.
17

Figura 14.

El formulario de búsqueda está listo. En este formulario, puede encontrar todos los registros relacionados
con el alquiler de un cliente específico, o equipos específicos y también encontrar registros según la fecha de
inicio o finalización del alquiler.

Llame al formulario para crear un nuevo registro de alquiler, modificar un alquiler existente o eliminar un
alquiler.

En este mismo formulario, encontramos los botones [Clientes] y [Equipo]. Estos botones son necesarios para
llamar al formulario mostrando respectivamente una lista de todos los clientes y todos los equipos.
Por curiosidad, puede hacer clic en el botón para lanzar su proyecto y ver cómo se verá. Debido a que los
componentes del formulario aún no están configurados, no sucederá nada cuando haga clic en él.

Empecemos por crear el segundo formulario, necesario para crear o modificar el registro de un alquiler.

Les recuerdo, como norma general, se utiliza el mismo formulario, tanto para la creación como para la
modificación del registro.

Cree un segundo formulario presionando el botón . Dar el formulario como nombre: frmRent.

Coloque los componentes en el formulario frmRent, como se muestra en Fig. 15.


18

Figura 15.

Cree un tercer formulario llamado frmClientList haciendo clic en el botón .

En el formulario creado, podremos ver a todos nuestros clientes, también tendremos la posibilidad de llamar
a un formulario para crear un nuevo cliente o modificar un cliente existente.
19

Coloque los componentes en este formulario como se muestra en Fig. 16.

Figura16.

Cree un cuarto formulario llamado frmClient haciendo clic en el botón .

Este formulario está diseñado para crear un nuevo registro de cliente o editar uno existente.

Coloque los componentes en este formulario como se muestra en Fig. 17.


20

Figura 17.

Cree un quinto formulario llamado frmTechList haciendo clic en el botón .

En el formulario creado, podrá ver todos los materiales que posee. También podrá llamar a un formulario
para agregar material nuevo o editar información sobre material existente.

Coloque los componentes en este formulario como se muestra en Fig. 18.


21

Figura 18.

Cree la sexta y última forma de nuestro proyecto, llamado frmTech, haciendo clic en el botón .

Este formulario está diseñado para ingresar nuevos equipos o editar uno existente.

Coloque los componentes en este formulario como se muestra en Fig. 19.


22

Figura 19.

Si inicia el proyecto haciendo clic en el botón y haga clic en los botones del formulario, notará que
no pasa nada.

Esto se debe a que los componentes de nuestros formularios creados aún no están configurados y no se
asigna ninguna acción a los botones. Por lo tanto, procederemos al paso final de la creación de una
aplicación, configurando los componentes en el formulario.
Normalmente, la configuración de los componentes se reduce a la asignación de acciones a los botones.
y componentes para ingresar información (como : etc.) indicar a qué tabla de la base de
datos y a qué campo pertenecen.
Empecemos por los botones . Debe definir la acción del botón a través del panel "Inspector de
objetos", utilizando la propiedad Acción (Fig. 20).
23

Figura 20.

Hagamos una lista de las acciones disponibles para los botones que usaremos para personalizar nuestro
proyecto:

▪ Search - busca registros en la base de datos.


▪ New record - llama a un formulario para crear un nuevo registro.
▪ Save record - guarda el registro en la base de datos y cierra el formulario (si esta opción está marcada).
▪ Show record - calls the form and fills it with the record data from the database.
▪ Delete record - elimina el registro seleccionado en el componente de tabla.
▪ Show form - muestra un formulario sin más acciones.
▪ Close form - cerrar el formulario.
24

Personalizando el formulario "Form1":

El boton “New rent” (Form1)

Este botón está destinado a crear un nuevo registro, por lo que seleccionamos la acción Nuevo registro para
este botón. Esta acción llamará al formulario desde el que se creará el nuevo registro. Para esto tenemos un
formulario llamado frmRent. Configure este botón como se muestra en Fig. 21.

Figure 21

A veces, en lugar de elegir la acción "Nuevo registro", los usuarios eligen la


acción "Mostrar formulario". ¡Esto es un error, no debe confundirse!

El boton “Edit” (Form1)


Tiene la intención de modificar el registro que el usuario habrá seleccionado del componente TableGrid
25

Elija la acción "Mostrar registro". Para configurar esta acción, debe especificar el formulario que se utilizará
para modificar el registro y el componente TableGrid, en el que el usuario elige el registro requerido para la
edición. Configure este botón como se muestra en Fig. 22.

Figura 22.

El boton “Delete Record” (Form1)

Está diseñado para eliminar el registro seleccionado por el usuario en el componente TableGrid.
Configure este botón como se muestra en Fig. 23.

Figura 23.
26

El boton “Search” (Form1)

Está diseñado para buscar registros según criterios arbitrarios. Los criterios de búsqueda se ingresan en
componentes como . Cada componente puede servir como criterio para buscar
un campo específico en la base de datos, por ejemplo, buscar solo por nombre de empresa o número de
teléfono.
Dependiendo del tipo de campo en la base de datos, debe usar el componente apropiado. Puede ver a
continuación qué tipos de campos de la base de datos puede utilizar el componente de búsqueda.

Text field (TextBox). DB field type: “TEXT” “INTEGER” “CURRENCY”»

ComboBox. Buscar solo claves externas

Checkbox. Buscar solo campo con tipo "YES / NO"

DateTimePicker. Buscar por campos con tipos "DATE / TIME" "DATE" "TIME"

TableGrid. Busca solo claves externas. Aunque el componente se usa generalmente para
mostrar los resultados de la búsqueda, se puede usar con criterios de búsqueda de clave
externa porque de hecho es similar al componente ComboBox.

Counter. Busque solo el campo con el tipo "Counter"

1. Ahora configure este botón. Para hacer esto, seleccione la acción "Buscar". La configuración del
botón consta de cuatro pasos:
2. Seleccione los componentes que se utilizarán como criterios de búsqueda para nuestros registros. En
nuestro caso, elija los siguientes componentes: ComboBox1 (Cliente), ComboBox2 (Equipo),
DateTimePicker1 (DateStart), DateTimePicker2 (DateEnd).
3. Seleccione la tabla en la que vamos a buscar. Como vamos a buscar datos de alquiler, seleccionamos
la tabla DB "Rent".
4. Seleccione los campos de la tabla que desea mostrar como resultado de la búsqueda en el
componente TableGrid. .En nuestro caso, elija los siguientes campos: Rent.DateStart,
Rent.DateEnd, Rent.TotalCost, Client.Name, Equipment.Tech.
5. Seleccione el componente TableGrid que muestre el resultado de la investigación.

Con un botón lanzando la acción "Buscar", si desea mostrar todos los


registros, simplemente haga clic en él con el criterio de búsqueda vacío.

Fig. 24 muestra cómo debería verse la configuración del botón [Buscar].


27

Figura 24
28

El boton “Clients” (Form1)

Está diseñado para mostrar el formulario en el que podremos ver a todos nuestros clientes.

Seleccionamos la acción "Mostrar formulario" y también seleccionamos el formulario "frmClientList", que se


mostrará al hacer clic en este botón (Fig. 25).

Figure 25.

El boton “Equipment” (Form1)

Está diseñado para mostrar la forma en la que podremos ver todos los materiales que poseemos.
Seleccionamos la acción "Mostrar formulario" y también seleccione el formulario "frmTechList", que se
mostrará al hacer clic en este botón (Fig. 26).

Figura 26.

Esto completa la configuración de los botones del formulario. Queda por configurar el ComboBox y
DateTimePicker componentes, que también están presentes en Form1.
29

La configuración de dichos componentes consiste, por regla general, en especificar a qué campo específico
de la base de datos pertenecen, para lo cual los componentes presentes son:

Propiedades TableName y FieldName, la excepción es solo un ComboBox componente, en lugar de la


propiedad TableName, se utilizará la propiedad ForeignKey, lo que da como resultado una clave externa. Por
lo tanto, el botón "Buscar" sabrá qué campo de la base de datos buscar si el usuario ingresa los criterios de
búsqueda en el componente. Procedemos a la configuración de los componentes.

Comenzamos con el componente DateTimePicker1 ("Start rent"), la ubicación está contenida en la tabla
Rent en el campo DateStart, por lo que en la propiedad TableName, seleccionamos la tabla Rent DB, y en la
propiedad FieldName el campo en esta tabla DateStart , como se muestra en Fig 27.

Figura 27.

Para el componente DateTimePicker2 (Fin de alquiler), haga lo mismo, pero en la propiedad FieldName
seleccione el campo DateEnd.
La configuración del ComboBox Los componentes, como se mencionó anteriormente, difieren en que se
usa la propiedad ForeignKey en lugar de la propiedad TableName. Este componente está vinculado a la clave
externa de la tabla, de modo que el componente muestra las entradas de la tabla a las que hace referencia la
clave externa, lo que permite al usuario seleccionar una entrada de esta tabla.

Tal vez eso suene confuso, así que veamos un ejemplo: configuremos el ComboBox1 (Cliente).
30

El botón de búsqueda "Buscar" está configurado para que busque en la tabla de Renta. En esta tabla, hay
una clave externa Rent.id_Client, que debemos seleccionar en la propiedad ForeignKey del componente
ComboBox1 (Client). La clave externa id_client, como su nombre indica, se refiere a la tabla Client. Desde el
componente ComboBox1, el usuario puede seleccionar de la lista de clientes.

Quedará por seleccionar el campo de la base de datos en la propiedad FieldName, en nuestro caso será el
campo Name, por lo tanto la lista de los nombres de los clientes será visible en el componente (ver Fig. 28).

Figura 28.

De la misma forma configuramos el componente ComboBox2 (Equipment), en la propiedad ForeignKey


seleccionamos la clave externa Rent.id_Equipment y en la propiedad FieldName seleccionamos el campo
Tech DB.
Si bien hemos configurado un formulario único, pero sin tener en cuenta el formulario y su propósito, la
configuración de los botones y los componentes es bastante monótona. Para los botones, debe seleccionar
la acción correcta y, para los componentes, seleccionar el campo de la base de datos a la que pertenecen
usando las propiedades TableName y FieldName, en el caso del componente ComboBox, en lugar de la
propiedad TableName, habrá una propiedad ForeignKey.
31

Por lo tanto, más adelante, al configurar los otros formularios, solo enumeraré las acciones de los botones
que necesita asignar y qué campos de la base de datos asignar a los componentes del formulario. Solo me
detendré en configurar algunos botones.

Formulario de configuración “frmRent”:

ComboBox1 (Client)
ForeignKey = Rent.id_Client
FieldName = Name

ComboBox2 (Equipment)
ForeignKey = Rent.id_Equipment
FieldName = {Tech} ${CostPerDay} * más sobre esta entrada a continuación

DateTimePicker1 (Sart rent)


TableName = Rent
FieldName = DateStart

DateTimePicker2 (End rent)


TableName = Rent
FieldName = DateEnd

Edit1 (Cost)
TableName = Rent
FieldName = TotalCost

En la propiedad FieldName del ComboBox, puede especificar varios campos.


Para hacer esto, deben estar encerrados entre llaves.

Un Por ejemplo, desea mostrar el nombre del equipo y el costo por día: poco
más {Tech} $ {CostPerDay} de

donde "CostPerDay" y "Tech" basados en los nombres de los campos


aparecerán entre llaves y el resto del texto sin las llaves aparecerá POSTER
sin cambios. Por lo tanto, en el cuadro combinado, verá. "Bulldozer TM-10 $
800".

detalle sobre el botón [Botón1] (Guardar). Este botón se utiliza para guardar datos en la base de datos. Para
este botón, seleccione la acción "Guardar registro".

En la configuración de este botón, solo necesita elegir qué componentes del formulario serán útiles para
almacenar la información en la base de datos. En nuestro caso, debe seleccionar todos los componentes.
También es necesario seleccionar la tabla en la que se guardará la información, en nuestro caso es la tabla
de Renta (Fig. 29).
32

Figura 29.

Además, echemos un vistazo más de cerca a la configuración de Button2 (Close).

El botón cierra el formulario sin guardar la información en la base de datos. Así que elige la acción "Cerrar
formulario". Esta acción no requiere parámetros (Fig. 30).

Figura 30
33

Configuración del formulario frmClientList:

Este formulario está destinado a visualizar a todos nuestros clientes presentes en la base de datos. También
hay botones en el formulario para crear, editar o eliminar un cliente de la base de datos.
Para que todos los clientes de la base de datos aparezcan en el componente TableGrid , debes
configurarlo. Para acceder al diálogo de parámetros de este componente, haga clic en el panel
"Propiedades" del componente y luego en el elemento "Configuración" (Fig. 31).

Figura 31.

En la configuración de este componente, debe seleccionar la tabla desde la que desea ver y seleccionar los
campos necesarios que nos gustaría ver en el componente. Configure este componente como se muestra en
Fig 32.
34

Figura 32.

Preste atención a la marca de verificación con el título "Mostrar todos los registros de la tabla", debe estar
seleccionada.
Luego, simplemente enumere los parámetros de los botones para crear, modificar y eliminar los registros (ya
hemos pasado estos botones en detalle al configurar Form1).

New client
Action = New record
Form = frmClient

Edit
Action = Show record
Table component = TableGrid1
Form = frmClient

Delete
Action = Delete record
Table component = TableGrid1

Luego, le sugiero que personalice el resto de los formularios, solo necesita asignar las acciones correctas a
los botones y al resto de los componentes especificando correctamente las propiedades TableName y
FieldName.
35

El formulario frmClient está destinado a crear o modificar datos del cliente; su configuración es similar a la
configuración del formulario frmRent.

La configuración del formulario frmTechList es similar a la configuración del formulario frmClientList.

La configuración del formulario frmTech es similar a la configuración de los formularios frmRent y frmClient.

Una vez que haya terminado con la configuración de los formularios restantes, es hora de comenzar nuestro

proyecto haciendo clic en el botón para probar tu trabajo.

Antes de ingresar datos sobre alquiler de equipos, debe ingresar todos sus clientes. Para hacer esto, haga clic
en el botón [Clientes] ubicado en el formulario principal. Aparece el formulario frmClientList desde el cual
puede ingresar clientes presionando el botón [Nuevo cliente] (Fig. 33).

Figura 33.

Además, debe ingresar en la base de datos el equipo que posee. Para ello, en el formulario principal, hay un
botón [Equipo], que llamará al formulario frmTechList. Presione el botón [Nuevo equipo] para ingresar los
datos requeridos (Fig. 34).
36

Figura 34.

Comencemos a ingresar información sobre el alquiler de nuestro equipo. Para ello, en el formulario
principal, haga clic en [Nuevo alquiler]. Como puede ver ahora tenemos al cliente y el equipo alquilado por
él, (los hemos elegido en la lista), queda ingresar manualmente las fechas de inicio y finalización de la
contratación así como el costo final de la misma. (Fig. 35).
37

Figura 35.

Quizás esperabas que los "costos" se calcularan automáticamente después


de especificar el equipo y las fechas de alquiler, pero para hacerlo, debes
hacer un trabajo del que hablaremos un poco más adelante.
Por tanto, debemos calcular de forma independiente el "costo".
38

En la Fig. 36, puede ver la ventana principal del programa con información de alquiler.

Figura 36.

Ahora, desde el formulario principal, puede utilizar la búsqueda, por ejemplo, seleccionando un cliente de la
lista desplegable "Cliente", luego haciendo clic en el botón [Buscar], tendrá todos los datos sobre ese cliente.

Felicidades ! ¡Su primera aplicación que usa una base de datos está lista!

Si abre la carpeta del proyecto, encontrará un archivo eхecutable (.ехе), para que su proyecto pueda
ejecutarse en cualquier computadora sin tener que instalar el programa My Visual Database. Simplemente
copie la carpeta de su proyecto con todos sus archivos.

Honestamente, la interfaz que creamos tiene un inconveniente.

Por ejemplo, cuando un nuevo cliente (cuya información aún no está en la base de datos) quiere alquilar,
primero debemos hacer clic en el botón [Clientes] para ingresar sus datos. Luego, en el formulario principal,
haga clic en el botón [Nueva renta]. Es decir, en el formulario "frmRent", seleccione el cliente de la lista de
clientes y solo entonces ingrese los datos del equipo alquilado por él. Y ahora, ¿imagina que el cliente quiere
alquilar 10 equipos diferentes? Tendremos que seleccionar el mismo cliente 10 veces de la lista del
formulario "frmRent". Está bien, ¡eso no es práctico!

Por tanto, sugiero que remodelemos este proyecto, en el que crearemos otra interfaz más práctica. La
estructura de la base de datos seguirá siendo la misma.

No creas que es un capricho. En el ejemplo de la nueva interfaz, consideraremos la posibilidad de generar


registros secundarios en el componente TableGrid.
39

Entonces empecemos.

Cree un nuevo proyecto (Menú: Archivo> Nuevo proyecto) y guárdelo inmediatamente en una carpeta
separada, por ejemplo, "Alquilar proyecto 2". Nombra el proyecto "Rent2", como se muestra en la Fig. 37.

Figura 37.

Luego, en la pestaña [Tabla de base de datos], deberíamos crear exactamente la misma estructura de base
de datos que el proyecto anterior. Puede ver la estructura de la base de datos en la Fig.38.
40

Figura 38.

Como ya conocemos el proceso de creación de tablas y campos, no nos detendremos en esto en detalle.

Haga clic en la pestaña "Form1" y hablaremos sobre un concepto de registros secundarios.

La principal diferencia entre nuestro proyecto actual y su versión anterior será que en el formulario
"frmClient", que está destinado a crear / modificar el cliente, también colocaremos el componente
TableGrid, que mostrará los registros del equipo que este cliente ha alquilado. En otras palabras, los
registros secundarios que pertenecen al cliente se mostrarán en este componente.
41

Si eso suena un poco confuso, eche un vistazo a la Figura 39.

Tomemos el ejemplo de un cliente llamado "KH Services", que alquiló equipo de la tabla "Alquiler".

Como puede ver, estos están marcados en rojo y estos registros son secundarios, en relación con el cliente
"Servicios KH" de la tabla "Alquiler".

También tenga en cuenta que para el archivo secundario, siempre hay una clave externa que se refiere al
registro principal.

Figura 39.
42

Y para que eso quede claro, avanzaré un poco y mostraré cómo se verá el formulario "frmClient" en el
proyecto ya completado (Fig. 40).

Figura 40.

Para hacer el uso del programa más conveniente, propongo mostrar la lista de clientes en el formulario
principal ("Form1"), en lugar de los registros de alquiler. También en el formulario para crear / modificar el
cliente ("frmClient"), coloque el componente TableGrid que mostrará el equipo alquilado por el cliente en
todo momento. Si hablamos en un idioma formal, mostraremos los registros del niño del cliente. También en
este formulario, hay botones para agregar / editar / eliminar equipos alquilados por este cliente.

Así, cuando nos llegue un nuevo cliente, solo debemos hacer clic en el botón [Nuevo cliente] en el formulario
Form1, luego de lo cual aparecerá el formulario "frmClient" en el cual ingresaremos sus datos y en el mismo
formulario Pulsamos sobre el botón [Nuevo alquiler], lo que provocará la aparición del formulario "frmRent",
en el que seleccionamos el equipo alquilado, las fechas de alquiler y su costo.

Además, si el cliente necesita alquilar el mismo equipo 10 veces, no tendremos que seleccionar a este cliente
10 veces para crear un archivo de alquiler.
43

Comencemos a crear los formularios, enumerémoslos.

Form 1
Formulario de búsqueda de clientes. El mismo formulario será el principal, aparecerá tan pronto como inicies
tu aplicación.

frmClient
Forma de creación y edición de un cliente. Este formulario escribirá datos en la tabla DB del cliente. También
en el formulario, habrá una lista desplegable de materiales alquilados por este cliente.

frmRent
Formulario para crear y editar un archivo de alquiler. Este formulario escribirá datos en DB Rent.

frmTechList
Formulario con lista de equipos.

frmTech
Formulario de creación y publicación de información sobre equipos. Este formulario escribirá los datos en la
base de datos del equipo.

Como puede ver, ahora necesitamos una forma menos, lo cual es bastante bueno. Empecemos.
44

Form1:
Organice los componentes en Form1 como se muestra en la Fig.41.

Figura 41.

En este formulario, puede buscar al cliente por nombre o número de teléfono. También hay botones para
llamar al formulario para crear o editar el cliente, o también eliminar el cliente de la base de datos. Y un
botón con el nombre [Equipo], que llamará a otro formulario, con una lista del equipo que posee.
45

frmClient :

Cree un nuevo formulario haciendo clic en el botón .


Ingrese el nombre del formulario frmClient.
Organice los componentes en este formulario como se muestra en la Fig.42.

Figura 42

Esta forma es la principal diferencia con nuestro proyecto anterior. Ahora, el alquiler del equipo no está en el
formulario principal, sino en el formulario frmClient, y en este formulario, ve no solo los datos del cliente,
como su nombre y teléfono, sino también todos los registros asociados con los alquileres de este cliente.
46

frmRent:

Cree un nuevo formulario haciendo clic en el botón.


Ingrese el nombre del formulario frmRent
Organice los componentes en este formulario como se muestra en la Fig.43.

Figura 43.

Este formulario está diseñado para crear un registro de alquiler. Tenga en cuenta que, a diferencia de
nuestro proyecto anterior, no hay una lista desplegable en este formulario de la que elegiríamos al cliente
que alquila el equipo especificado.
El caso es que se llamará al formulario frmRent desde el formulario frmClient, por lo que el programa
asociará automáticamente al cliente con este formulario, y el registro del equipo alquilado pertenecerá
automáticamente al cliente cuyos datos estarán en el formulario frmClient. En otras palabras, no debes
preocuparte, el programa conectará automáticamente al cliente y al equipo que ha alquilado.

frmTechList:
47

Cree un nuevo formulario haciendo clic en el botón .


Ingrese el nombre del formulario frmTechList
Organice los componentes en este formulario como se muestra en la Fig.44.

Figura 44.

Este formulario es exactamente el mismo que en el proyecto anterior.

En el formulario creado, podremos ver todos los equipos que tenemos, así como llamar a un formulario para
la incorporación de nuevos equipos, o modificar la información sobre equipos existentes.

frmTech:
48

Cree un nuevo formulario haciendo clic en el botón .


Ingrese el nombre del formulario frmTech
Organice los componentes en este formulario como se muestra en la Fig.45.

Figure 45.

Este formulario es exactamente el mismo que en el proyecto anterior.


Diseñado para crear / editar equipos de su propiedad, indicando su costo por día.

Vaya a la última etapa de creación de la aplicación, para configurar los componentes en el formulario. Como
recordará, la configuración de componentes se reduce a la asignación de acciones a botones , y
componentes para ingresar información (como etc.) indicar a qué tabla de la base de datos y a
qué campo pertenecen.
Procedemos a la configuración de los formularios; Enumeraré solo las acciones que se asignarán a los
botones y los campos de la base de datos que se asignarán a los componentes del formulario. Voy a
detenerme en los componentes cuyo entorno es diferente al del proyecto anterior.

Configuración de Form1:

Client (EditBox)
49

TableName = Client
FieldName = Name

Phone (EditBox)
TableName = Client
FieldName = Phone

New client (Button)


Action = New record
Form = frmClient

Edit (Button)
Action = Show record
Table component = TableGrid1
Form = frmClient

Delete (Button)
Action = Delete record
Table component = TableGrid1

Un poco más de detalle sobre la definición del botón Buscar.


50

Como mencioné anteriormente, en el formulario principal, ahora veremos los registros del cliente, en lugar
de los registros de alquiler, como en el proyecto anterior: por lo que este botón buscará los datos en la tabla
Cliente, en lugar de la tabla Alquiler.

En la Fig. 46, puede ver la configuración del botón [Buscar]

Figura 46.

Configuring frmClient:
51

Client (EditBox)
TableName = Client
FieldName = Name

Phone (EditBox)
TableName = Client
FieldName = Phone

New rent (Button)


Action = New record
Form = frmRent

Edit rent (Button)


Action = Show record
Table component = TableGrid1
Form = frmRent

Deleterent (Button)
Action = Delete record
Table component = TableGrid1

Un poco más de detalle sobre la configuración del botón [Guardar].


Puede ver la configuración de este botón en la Fig.47.
52

Figura 47.

Tenga en cuenta que el componente TableGrid1 no participa en guardar el registro; simplemente muestra
los registros de alquiler que pertenecen al cliente en el formulario. Entonces, lo dejas en la lista de la
izquierda.

Echemos un vistazo más de cerca a la configuración (Fig. 48) del componente TableGrid1 (Equipo alquilado
por el cliente). En este componente veremos los registros de alquiler de los equipos pertenecientes al
cliente, cuyos datos vemos en el formulario actual (frmClient).
53

Figura 48.

Tenga en cuenta la opción seleccionada "Mostrar registros secundarios (si están presentes)". Por lo tanto, en
este componente, los registros secundarios se mostrarán automáticamente, en nuestro caso, en relación con
el cliente.
En otras palabras, veremos los registros de alquiler pertenecientes al cliente.
54

Si alguien olvidó cuáles son los registros del child, puede ver la fig.49.

Figura 49.

Por ejemplo, si vemos datos sobre el cliente de KH Services en el formulario frmClient, entonces en el
componente TableGrid1, veremos registros secundarios de la tabla Rent, que están marcados en rojo en la
Fig.49.
La configuración de otros formularios, como frmRent, frmTechList, frmTech, no es diferente a la de nuestro
proyecto anterior, configúrelos usted mismo.

Una vez que haya terminado con la configuración de los formularios restantes, es hora de comenzar nuestro

proyecto haciendo clic en el botón y probar su trabajo.

Como en el proyecto anterior, primero debe agregar a la base de datos el equipo que posee y su costo por 1
día de alquiler.

Para ello, en el formulario principal, haga clic en el botón [Equipo] (Fig.50).


55

Figura 50.

Después de agregar todo el equipo que tiene en la base de datos, puede ir directamente a trabajar.
Digamos que KH Services nos pidió alquilar una topadora TM-10, un camión grúa K-4561 y un tractor
Kenworth W900.

Si esta empresa se aplica a nosotros por primera vez, en el formulario principal, hacemos clic en el botón
[Nuevo cliente].
56

Aparece el formulario frmClient en el que ingresamos los datos de este cliente y en el mismo formulario,
hacemos clic en el botón [Nuevo alquiler] para atribuir a este cliente el equipo que nos alquiló (Fig. 51).

Figura 51.

Tenga en cuenta que si el cliente ya existe en la base de datos, no es necesario que vuelva a crearlo.
En su lugar, debe encontrarlo en el formulario principal y hacer clic en el botón [Editar], que llamará al
formulario frmClient, donde también asignará el próximo equipo alquilado utilizando el botón [Nueva renta].
En el formulario principal, utilizando el campo "Cliente", puede buscar en la base de datos para encontrar al
cliente.
De forma predeterminada, la búsqueda se realiza en una aparición del nombre completo, es decir, encontrar
un cliente con el nombre KH Services.

También debe ingresar su nombre en el EditBox, lo cual no siempre es práctico.

Por lo tanto, en la configuración de este cuadro de texto, puede cambiar el modo de búsqueda parcial, por lo
que encontrará el cliente de KH Services incluso si simplemente ingresa el servicio como una búsqueda.

Para hacer esto, busque la propiedad Filter y seleccione como %s% como se muestra en la Fig.52.
57

Figura 52.

2.2 Normalización de la estructura de la base de datos


Tomemos un descanso de la práctica y hagamos algo de teoría que nos ayudará a evitar los errores
asociados con el diseño de una estructura de base de datos.

Hablemos de la normalización de la base de datos. Si alguien prefiere una explicación de estilo académico,
puede obtener información sobre este enlace de Wikipedia:

https://en.wikipedia.org/wiki/Database_normalization
Intentaré explicar los principios de la estandarización en un lenguaje más simple usando ejemplos. Primero,
necesitamos entender por qué necesitamos estandarizar la estructura de la base de datos.
58

La normalización es un conjunto de reglas que debemos cumplir al crear una estructura de base de datos.
Esto nos ayudará a evitar errores en la estructura de la base de datos, que pueden dar lugar a datos
redundantes e incluso contradictorios.
Sin saberlo, al comienzo del libro, ya estábamos haciendo la normalización al considerar los problemas de
almacenar datos en una tabla y dividirlos en varias tablas más pequeñas.

Imagina que no conocemos las reglas de diseño de la base de datos y que tenemos que crear una tabla con
una estructura similar (Fig.53):

Figure 53.

Procedamos a la normalización.

La primera forma normal


La definición de la primera forma normal según el lenguaje académico es:
Una relación está en primera forma normal si y solo si el dominio de cada atributo contiene solo valores
atómicos (indivisibles), y el valor de cada atributo contiene solo un valor único de ese dominio.
En términos simples, no debe haber varios valores en el campo, un campo = un valor. En nuestro ejemplo,
preste atención a la columna "Hobby", en la que el hobby de la persona se indica con una coma. Esto no está
permitido, recuerda esto.

Para asegurarnos de que la tabla no viole esta regla, tendremos que crear registros adicionales para cada
afición de la persona, es decir, duplicar los datos, creando así intencionalmente redundancia en la tabla
(Fig.54).
59

Figura 54.

La regla de la segunda forma normal nos ayudará a deshacernos de la redundancia de los datos.

La segunda forma normal


La definición de la segunda forma normal en lenguaje académico es:
Una relación que está en la primera forma normal (1NF) debe cumplir con criterios adicionales para calificar
para la segunda forma normal. Específicamente: una relación está en 2NF si está en 1NF y ningún atributo no
principal depende de ningún subconjunto adecuado de cualquier clave candidata de la relación. Un atributo
no principal de una relación es un atributo que no forma parte de ninguna clave candidata de la relación.

En lenguaje sencillo, cada tabla debe tener una clave principal que identifique de forma única la entrada en
la tabla. En nuestro caso, esta es la columna con el nombre id, en la que se almacena el ID del registro; es
único para cada entrada de la tabla.

Si utiliza el programa My Visual Database, al crear una tabla, esta clave


siempre se crea automáticamente. Simplemente no necesita preocuparse por
eso.
60

Esta regla también establece que no debe haber datos duplicados en la tabla (redundancia). Si observa la
tabla (Fig. 54), que está en la primera forma normal, algunos registros contienen los mismos datos, es decir,
los datos están duplicados. El motivo es la columna "Hobby".
Para solucionar el problema de la redundancia de datos, es necesario crear otra tabla, en la que
almacenaremos el hobby del personal y también habrá una clave externa en la tabla que determinará qué
persona tiene dicho hobby especificado.

Ahora que tenemos dos tablas, podemos crear cualquier hobby que pueda pertenecer a una persona,
evitando así la redundancia de datos. Para entenderlo, mire la Fig.55.

Figura 55.

La tercera forma normal


La definición de la tercera forma normal en el lenguaje académico es:
La tercera forma normal (3NF) es una forma normal que se utiliza en la normalización de un diseño de base
de datos para reducir la duplicación de datos y asegurar la integridad referencial asegurando que (1) la
entidad está en la segunda forma normal, y (2) todos los atributos en una tabla está determinada solo por
las claves candidatas de esa relación y no por ningún atributo no principal. 3NF fue diseñado para mejorar el
procesamiento de la base de datos y minimizar los costos de almacenamiento.
La tercera forma normal es necesaria para combatir la dependencia transitiva.
Primero, veamos qué es. Tenga en cuenta que en la tabla de personal (Fig. 56), hay columnas Ciudad e
Índice. Desafortunadamente, la gente tiende a equivocarse. Supongamos que una persona que llena una
base de datos, comete un error y presenta a un empleado que vive en el índice Paris Lyon, ¿qué tipo de
información después de eso creer? Como resultado, obtenemos datos contradictorios.
Por tanto, las columnas Ciudad e Índice dependen unas de otras. Pero si conocemos el Índice, podemos
encontrar la ciudad por este índice. Por lo tanto, ¿por qué no almacenar solo el índice en la tabla de
personal?
61

Ahora, para deshacernos de esta dependencia transitiva, necesitamos crear dos tablas más. Una tabla con
los nombres de las ciudades y una tabla con los índices, en la que también habrá una clave foránea, que
determina a qué ciudad pertenece el índice (Fig. 56).

Figure 56.

En la práctica, no siempre usamos la tercera forma normal, dejando campos con una dependencia transitiva.
Si está diseñando una base de datos que se utilizará, por ejemplo, en un Manuel, puede anular y dejar como
está, sacrificando, en aras de la simplicidad, la posible aparición de datos conflictivos. Pero si diseña una
base de datos para usar, por ejemplo, en el sector bancario, para usted, no ignoraría la tercera forma
normal.
Volvamos a la Fig. 56, porque en la tabla de Personas hay otros dos campos con una dependencia transitiva.
Estos campos son Salario e Impuestos. Supongamos que tenemos un impuesto fijo del 30%, conociendo el
salario, siempre podemos calcular el impuesto. Normalmente, no tiene que almacenar datos en una tabla
que se puede obtener de otros campos en la tabla, por lo que puede eliminar de forma segura el campo
Impuesto.

Una vez que comprenda estas reglas, le parecerán completamente naturales.


Al diseñar las bases de datos, ni siquiera notarás cuán instintivamente vas a
adoptarlas por completo

2.3. Eliminación en cascada e integridad de los datos.


Espero que no haya olvidado nuestro proyecto común de gestionar un alquiler de equipos de construcción.
Continuaremos trabajando con él, agregando funciones y aprendiendo nuevas funciones en bases de datos.

Inicie My Visual Database y vuelva a abrir nuestro proyecto, que se encuentra en la carpeta "Rent project2".
Haga clic en la pestaña [Tablas de la base de datos] para ver las tablas creadas en nuestra base de datos
(consulte la Fig. 57).
62

Figure 57.
Y hablemos de la eliminación en cascada.
A veces tenemos que eliminar un cliente de la base de datos y todos los datos asociados a él. En nuestro
caso, si borras al cliente (tabla Cliente), también debes borrar todos los datos de sus alquileres de equipos
(tabla Renta), de lo contrario tendremos registros de alquiler referidos a un cliente inexistente, lo cual es
inaceptable.
Tenga en cuenta la clave externa id_client en la tabla Rent, que hace referencia al cliente de la tabla Client.
Para esta clave externa, es necesario operar lo que se llama eliminación en cascada. Como resultado, cuando
el cliente se elimina de la tabla Cliente, los registros de la tabla Alquiler se eliminarán automáticamente.
Todo lo que se refiera al cliente se elimina debido a la clave externa id_Client.
En otras palabras, eliminar un registro principal también eliminará los registros secundarios.

Habilite la eliminación en cascada para una clave externa, como se muestra en la Fig.58.
63

Figure 58

De hecho, sin la eliminación en cascada, no podría eliminar al cliente de la tabla Cliente porque este cliente
está registrado para sus alquileres. En otras palabras, porque en la tabla Rent hay entradas en las que la
clave externa client_id se refiere al cliente. Además, un mensaje le advertirá.
Pero si este cliente aún no se ha registrado para un alquiler, puede eliminarlo de la base de datos porque la
integridad de los datos no se ve comprometida.

Lo mismo puede decirse de la clave externa id_Equipment en la tabla Rent, no puede eliminar el equipo de la
tabla Equipment si al menos una entrada se refiere a este equipo en otras tablas.
Por lo tanto, la base de datos retiene automáticamente su integridad para evitar la situación en la que una
clave externa se refiere a un registro inexistente.

Por lo tanto, al usar la eliminación en cascada, elimina el registro y todos los datos asociados con ese registro
en la base de datos, o no elimina nada en absoluto.

En general, no se permite borrar nada de la base de datos, pero se recomienda


marcar la entrada como un archivo usando un campo de tipo "Sí / No".

2.4. Agregar un tipo de cliente


Continuemos nuestra práctica. Asegurémonos de que puede asignar un tipo al cliente, por ejemplo, si es
"Individual" o "Empresa".

Y luego puede ocurrir un error. Es posible que se sienta fuertemente tentado a crear un nuevo campo de
texto en la tabla "Cliente", donde simplemente ingrese el tipo de cliente. Como resultado, sus datos en la
tabla "Cliente" se parecen, por ejemplo, a la Fig. 59.
64

Figura 59.

Preste atención a la columna "Tipo de cliente". De acuerdo con el propósito de esta columna, solo podemos
tener dos valores, "Empresa" o "Individual", donde vemos la aparente redundancia de los datos, lo que
contradice la segunda forma normal (Capítulo 2.2).
No tiene sentido que cada cliente introduzca su tipo manualmente. Esto es inaceptable al diseñar bases de
datos; posteriormente, esto afectará su rendimiento, así como la mayor probabilidad de errores en la base
de datos, por ejemplo, alguien decide que solo escriba "Comp.", o "Indv.", perdiendo así la integridad de los
datos y complicando enormemente el trabajo con ellos.
¿Así que cómo?

La solución correcta es crear otra tabla en la que ingresar los tipos de clientes autorizados, llamémosla
"ClientType". Y en la tabla "Cliente", se crea una clave externa que hará referencia a la tabla "Tipo de
cliente", en la clave externa se guardará el identificador del tipo de cliente seleccionado. Para aclarar esto,
eche un vistazo a la Fig.60.

Figura 60

Con este enfoque, no tiene que ingresar manualmente el tipo de cliente cada vez; simplemente selecciónelo
de la lista. Además, puede agregar nuevos tipos de clientes a la tabla "Tipo de cliente", por ejemplo,
"Empresario individual", "Estado corporativo", etc.

Además, nada le impide cambiar el nombre de los tipos de clientes y esto no afecta la integridad de los
datos. En la clave externa "id_ClientType" de la tabla "Cliente", solo se almacena el identificador numérico
del tipo de cliente y no su representación textual.
65

Once the theoretical part is understood, put it now into practice:


1. Como se mencionó anteriormente, necesitamos crear otra tabla en la base de datos, llamarla
"ClientType".
2. En esta tabla necesitas crear una columna con el tipo TEXT, llámalo "TypeName".

3. En la tabla "Cliente", cree una clave externa para la tabla "ClientType".

Como resultado, debe obtenerlo como se muestra en la Fig.61.

Figura 61.
66

Mire los formularios frmTechList y frmTech. Deben crearse exactamente las mismas necesidades para trabajar con
los tipos de clientes. El primero es mostrar la lista de registros agregados y el segundo para crear / editar registros.

Cree un nuevo formulario llamado frmClientTypeList y coloque un componente TableGrid y tres botones en él, como
se muestra en la Fig.62.

Figura 62.
67

También cree un formulario llamado frmClientTypeAdd, como se muestra en la Fig.63.

Figura 63.

Ahora queda configurar los componentes en los formularios creados. La configuración como de costumbre
es bastante simple.
Configuración del formulario frmClientTypeList:

TableGrid1
68

1. Acceda a la configuración del componente TableGrid1 para configurarlo para mostrar datos de
la tabla "ClientType"
2. En la configuración de este componente, agregue el campo "ClientType.TypeName" a la lista
3. Seleccione la opción "Mostrar todos los registros de la tabla".

A continuación, configure los botones para crear, editar y eliminar entradas:

New type of client


Action = New record
Form = frmClientTypeAdd

Edit
Action = Show record
Table component = TableGrid1
Form = frmClientTypeAdd

Delete
Action = Delete record
Table component = TableGrid1

Configuring the frmCustTypeAdd form:

Edit1 (Client Type)


TableName = ClientType
FieldName = TypeName

Button1 (Save)
Action = Save record
Component to save = Edit1
Table = ClientType

Personalización de Form1:

El formulario con los nuevos componentes se verá como (Fig.64)


69

Figura 64.

En el formulario principal agregamos el componente ComboBox que nos permitirá filtrar los registros por tipo de
cliente.
ComboBox1 (Type client)
ForeignKey = Client.id_ClientType
FieldName = TypeName
Luego vaya a la configuración del botón "Buscar" para agregar este componente (ComboBox1) a la lista "1.
Seleccione los componentes involucrados en la búsqueda", por lo que este componente también participará
en la búsqueda.
En la tabla "ClientType" (3. El resultado), seleccionamos el campo "TypeName", para que luego de la
búsqueda sepamos a qué tipo pertenece el cliente.

Coloque un nuevo botón en el formulario que llamará al formulario "frmClientTypeList" para que podamos
agregar los tipos de clientes.

Types of client (button)


Action = Show form
Form = frmClientTypeList

Configurando el formulario frmClient:

Al igual que en el formulario anterior, necesitamos agregar un componente ComboBox para que podamos
elegir a qué tipo pertenece el cliente

ComboBox1 (Customer Type)


ForeignKey = Client.id_CustomerType
FieldName = TypeName
70

Finalmente, en la configuración del botón [Guardar], agregue el componente ComboBox1 a la lista "1.
Seleccione los componentes involucrados en guardar el registro" para que los datos de este componente se
guarden.

Como resultado, el formulario se verá como el que se muestra en la Figura 65.

Figura 65.

Ahora puede iniciar el proyecto y agregar tipos de clientes haciendo clic en el botón "Tipo de cliente" en el
formulario principal, como se muestra en la Fig.
Figure 66.
71

Al agregar tipos de clientes, puede comenzar a usarlos para clientes nuevos y existentes, indicando el tipo al
que pertenecen (Fig. 67).

Figura 67.
72

Y finalmente, para darle vida a la interfaz, para cada botón puedes seleccionar tu icono usando la propiedad
Icon (ver Fig. 68).
Figure 68.
73

3. Impresión

3.1 Formas de imprimir


Tarde o temprano querrá imprimir la información contenida en la base de datos. Para eso, tenemos tres
formas de proceder.

1. La forma más sencilla de imprimir es enviar los datos contenidos en el componente TableGrid a
Microsoft Excel y luego usar las funciones integradas de este programa para imprimirlos. El botón
con la acción "Abrir en Excel" le ayudará con esto (Fig. 69).

Figura 69.

2. Utilice el documento de Microsoft Word como plantilla de impresión. Habiendo emitido el


documento de cierta manera, puede insertar datos en lugares preparados previamente. Este
método implica el uso de un script simple, que se discutirá en el capítulo de programación de scripts.

3. Utilice el diseñador de informes integrado. Este método es el más avanzado y le permite


implementar cualquier informe con otras impresiones y exportar a otros formatos populares (doc,
xls, pdf y muchos otros). Veremos esto en detalle en el próximo capítulo.

3.2 Diseñador de informes


74

Como se mencionó anteriormente, el diseñador de informes integrado le permite implementar un informe


de casi cualquier complejidad. Pero por ahora, solo hablaremos de sus características principales, que, por
regla general, son adecuadas para la mayoría de las tareas.

Como ejemplo, imprimimos un contrato simple, que trata sobre la responsabilidad del cliente por la
seguridad del equipo alquilado por él. Esto se verá como en la Fig.70.

Figura 70.

Para crear un informe y luego imprimirlo, debe utilizar un botón con la acción "Informe". Coloque el botón
en el formulario principal de nuestro proyecto y llámelo "Contrato de responsabilidad", como se muestra en
la Fig. 71.
75

Utilizando la propiedad Icono, puede seleccionar el icono "Impresora"

Figura 71.

La configuración del botón con la acción "Report" es casi la misma que la del botón con la acción "Buscar",
porque de hecho ambas acciones buscan en la base de datos con la siguiente salida del resultado de la
búsqueda, pero en nuestro caso , el resultado de la búsqueda se verá al imprimir.

El botón "Report" se muestra en la Fig. 72.


76

Figura 72.

Echemos un vistazo más de cerca a estos parámetros paso a paso:


1.- Seleccione los componentes involucrados en la búsqueda
Aquí se selecciona el componente TableGrid1, en el que vemos a todos nuestros clientes, pero se ha
seleccionado cliente en el componente TableGrid1.
Select the database table to search for We will print client information, select the Client table.
2.- Seleccione los campos de las tablas, obligatorios en el resultado del informe.
En la tabla, seleccione los campos que necesitamos para el informe, en nuestro caso es el nombre y tipo del
cliente (respectivamente los campos Client.Name y ClientType.TypeName).
3.- Seleccione una plantilla de informe
Dado que aún necesitamos crear una plantilla de informe, este parámetro será "Abrir diseñador de
informes ..."
77

Una plantilla de informe es un archivo que determina la apariencia del informe.


Este archivo lo crea el diseñador de informes y se guardará en la carpeta de
informes de su proyecto.

Para crear una plantilla de informe, debe ejecutar nuestro proyecto .

En el proyecto en ejecución, haga clic en el botón [Responsabilidad de impresión], creado anteriormente,


para abrir el diseñador de informes.

Crear un modelo simple no es complicado. En la Fig. 73, puede ver dónde se colocaron los objetos. Hacer la
misma cosa.

Figure 73.
Una vez que todo esté listo, vaya al menú Archivo> Vista previa (Ctrl + P) y debería ver un informe listo para
imprimir, como se muestra arriba en la Figura 68.
Queda por guardar el archivo del informe a través del menú Archivo> Guardar (Ctrl + S).
Nombre el archivo de informe, por ejemplo, "Responsabilidad", como se muestra en la Figura 74.
78

Figura 74.
Último paso. Cierre el proyecto en ejecución y vuelva a la configuración del botón [Responsabilidad de
impresión].

En la configuración "4. Seleccionar archivo de informe", en lugar de "Abrir diseñador de informes ...",
seleccione de la lista la plantilla de informe guardada anteriormente "Responsability.fr3", como se muestra
en la Fig. 75.

Figura 75.
Ahora puede volver a iniciar el proyecto. Después de seleccionar el cliente requerido en el componente
TableGrid1, haga clic en el botón [Imprimir responsabilidad] para ver un informe listo para imprimir con los
datos del cliente seleccionado.
A veces es conveniente, poner el botón de imprimir directamente en el formulario de agregar / editar. Por lo
tanto, copiemos el botón [Responsabilidad de impresión] en el formulario frmClient.
79

En la configuración de este botón, elimine el componente TableGrid1 de la lista "1. Seleccione los
componentes involucrados en la búsqueda". De hecho, si el botón con la acción "Informar" se coloca en el
formulario a agregar / modificar, automáticamente detectará qué registro enviar a la impresora.

Creemos otro informe, pero un poco más complejo. Ahora, tenemos que imprimir datos sobre el cliente, con
todos sus alquileres de equipos. Por lo tanto, publicaremos un informe como se muestra en la Fig.76.

Figura 76.

Coloque en el formulario principal un nuevo botón llamado [Equipo alquilado], como se muestra en la Fig.
77.

Figura 77.

Seleccione la acción "Informar" para este botón, la configuración de este botón se muestra en la Fig. 78.
80

Figura 78.
La configuración de este botón es prácticamente la misma que la del botón [Responsabilidad de impresión],
solo los nuevos campos que debemos ver en el informe se agregarán al ítem "3. El resultado",
Aquí, vale la pena mencionar un matiz. Como puede ver en la configuración, para seleccionar el resultado,
seleccionamos los campos de 4 tablas diferentes (Cliente, Equipo, Alquiler, Tipo de cliente). En otros
programas, es necesario compilar una consulta SQL que especifique manualmente cómo se asocia una tabla
con otra tabla y en qué orden.

El programa My Visual Database intenta comprender por sí mismo cómo vincular tablas entre sí para
obtener exactamente los datos que espera, eliminando la necesidad de estudiar el lenguaje de consulta SQL.
Desafortunadamente, el programa no siempre puede predecir la necesidad de vincular tablas para obtener
los datos que desea que aparezcan. Esta situación puede ocurrir cuando necesita asociar 3 o más tablas sin
81

vínculos obvios entre ellas. Así, por ejemplo, no existe vínculo entre la tabla "Cliente" y "Equipo", la relación
entre estas tablas se logra mediante otra tabla "Alquiler".

¿Qué tengo que hacer? En la pestaña [Tablas de la base de datos], debajo de cada tabla, hay una marca de
verificación "La tabla es un diccionario".
En esta pestaña, debe anotar qué tablas de su proyecto son diccionarios. Pero, ¿cómo saber qué tablas son
diccionarios?
Los ejemplos de tablas de diccionario pueden contener nombres de países, estados (Abierto, Cerrado), tipos
(Empresa, Individual), nombre de los productos con precios, etc.
Es decir, tablas de este tipo, que, por regla general, se llenan primero cuando comienza a trabajar con ellas y
no se modifican más tarde.
En nuestro proyecto, las tablas de diccionario pueden incluir "ClientType" y "Equipo", marque la casilla de
verificación "La tabla es un diccionario" debajo de estas tablas.
Si está marcado, ayudará al programa a vincular las tablas correctamente.
Y así, podemos seguir creando un informe sobre los equipos alquilados por el cliente.

Como recordará, para crear una plantilla de informe, debe ejecutar su proyecto.

En el proyecto actual, haga clic en el botón [Equipo alquilado], creado anteriormente, para abrir el Diseñador
de informes.
Este informe será un poco más complicado que el anterior, ya que se utilizarán los llamados bloques (o
bandas).

Los bloques le permiten crear casi cualquier estructura del informe; ahora haremos arreglos con algunos de
ellos.

Para ver todos los bloques disponibles, haga clic en el icono a la izquierda, verá el menú, como se
muestra en la Fig.79.
82

Figura 79.

Procederemos a la creación de un informe utilizando bloques, pasando aprenderemos para qué sirven.

En el menú que se muestra en la Fig. 79, seleccione el bloque Título del informe, después de lo cual el bloque
aparece en el informe. En este bloque, puede poner el título del informe, por ejemplo su nombre. La
información de este bloque solo se imprimirá en la primera página de su informe.

Ponga el nombre del informe en este bloque.


Como resultado, debería obtener, como se muestra en la Fig.80.
83

Figura 80.

Luego coloque el bloque PageHeader. La información colocada en este bloque se mostrará en cada página
impresa (en caso de que su informe no quepa en una página).

En este bloque, pondremos información sobre el cliente. Además, pondremos las cabeceras de la tabla, que
estarán ubicadas en el siguiente bloque.

Coloque campos de texto y datos en este bloque, como se muestra en la Fig.81.

Figure 81.

El siguiente bloque que se colocará en el informe es Datos maestros.

Este bloque está diseñado para mostrar información en forma de tabla.

Con este bloque, obtendremos una tabla en la que se trasladará todo el equipo alquilado por el cliente.

Coloque este bloque en el informe, seleccionándolo en el menú.

Antes de que aparezca en el informe, verá una ventana con el encabezado Seleccionar conjunto de datos,
donde debe seleccionar la fuente de datos.

Seleccione la fuente de datos denominada Informe de la lista y haga clic en Aceptar.

En este bloque, debe colocar los campos de la base de datos a partir de los cuales se generará la tabla.

Como resultado, debería obtener lo que muestra la Fig. 82.


84

Figura 82.

Coloque el siguiente bloque de pie de página. Esta unidad se imprimirá solo una vez, es decir, no la verá en
todas las páginas de su informe. En este bloque puede calcular, por ejemplo, el importe total gastado por el
cliente en alquiler de equipos.
Para calcular la cantidad total, coloque el componente Texto del sistema en este bloque. Una vez
colocado, aparece un cuadro de diálogo, que deberá configurar, como se muestra en la Fig.83.

Figura 83.
85

Una vez hecho esto, su plantilla de informe debería verse como la Fig.84.

Figura 84.

Y el último bloque que ponemos en el informe es PageFooter, este bloque se imprimirá en cada página del
informe, solo lo usamos para numerar las páginas.

En este bloque, coloque la variable de sistema Página # en el lado derecho del diseñador de informes
(pestaña Variables), arrástrela, como se muestra en la Fig.85.

Figura 85.
86

Su plantilla de informe ahora está lista, como se muestra en la Fig.86.

Figura 86.

Vaya al menú Archivo> Vista previa o simplemente presione Ctrl + P para ver cómo se verá su informe.

Guarde la plantilla de informe en la carpeta Informe de su proyecto, a través del menú Archivo> Guardar
como ...

Asigne un nombre al archivo, por ejemplo, "Equipo alquilado", como se muestra en la Fig. 87.
87

Figura 87.

Queda por volver a la configuración del botón [Alquiler de equipo] y seleccionar esta plantilla de informe que
se utilizará para la impresión, Fig. 88.

Figure 88.
88

To come up …

The practical manual of My Visual Database is still in progress.

The latest version of the book you can find here:

http://myvisualdatabase.com/book_en.html

In addition, from this link, you can write a review on the book, or ask your question.
89

TABLA DE CONTENIDO

1 – Introduction 02
1.1 – Introduction 02
1.2 - Database 03
1.3 – Identifying entities 03
1.4 – Links between tables and foreign keys 04
1.5 – Types of data 05

2 – Put into practice 07


2.1 – Let’s create our first application working with a database 07
2.2 – Normalization of the structure of the database 55
2.3 – Cascading delete and maintain integrity 59
2.4 – Add a client ype 61

3 – Printing 69
3.1 – Ways to print 69
3.2 – Report designer 70

Table of contents 76

También podría gustarte