You are on page 1of 47

qwertyuiopasdfghjklzxcvbnmqwert yuiopasdfghjklzxcvbnmqwertyuiop asdfghjklzxcvbnmqwertyuiopasdfg hjklzxcvbnmqwertyuiopasdfghjklz INFORMATICA AVANZADA xcvbnmqwertyuiopasdfghjklzxcvbn BASE DE DATOS MY SQL mqwertyuiopasdfghjklzxcvbnmqwe

rtyuiopasdfghjklzxcvbnmqwertyui opasdfghjklzxcvbnmqwertyuiopasd fghjklzxcvbnmqwertyuiopasdfghjk lzxcvbnmqwertyuiopasdfghjklzxcv bnmqwertyuiopasdfghjklzxcvbnmq wertyuiopasdfghjklzxcvbnmqwerty uiopasdfghjklzxcvbnmqwertyuiopa sdfghjklzxcvbnmqwertyuiopasdfgh jklzxcvbnmqwertyuiopasdfghjklzx cvbnmrtyuiopasdfghjklzxcvbnmqw ertyuiopasdfghjklzxcvbnmqwertyu iopasdfghjklzxcvbnmqwertyuiopas dfghjklzxcvbnmqwertyuiopasdfghj klzxcvbnmqwertyuiopasdfghjklzxc
18/03/2013 EDGAR ROBERTO GARCÍA NIETO

BASE DE DATOS PROFESIONAL
Una Aplicación Completa
En este capítulo realizaremos una aplicación que controla una base de datos, pero en este caso validaremos las entradas de campos en los cuadros de texto, utilizaremos rejillas de introducción de datos, haremos uso de las sentencias SQL, en definitiva, aprenderemos a realizar una aplicación donde se ha de controlar todos los posibles errores que pueda provocar un usuario inexperto. Siempre que desarrollamos una aplicación comercial, se ha de suponer que el usuario no sabr utilizarla, por lo cual puede introducir datos alfanum!ricos en campos que sólo admiten datos num!ricos o entradas demasiado lar"as que no se corresponden a la lon"itud del campo. En primer lu"ar, se ha de dise#ar la base de datos $ establecer las relaciones $ campos índices de la misma.

%&E%'&'& L' ('SE )E )'*+S
,omo otras veces se ha comentado, para crear la base de datos se ha de conocer el funcionamiento de 'ccess , dise#o $ creación de tablas con sus claves principales $ la posterior relación entre ellas. *odo se har desde un entorno de 'ccess -./. posteriormente convirtiendo las bases de datos a una versión anterior para obtenerlo en formato 'ccess 01. La base de datos que vamos a crear tratar sobre la "estión de un videoclub, realizando los si"uientes pasos 2 1. Ejecuta la aplicación 'ccess -./. $ crea dos tablas como las si"uientes. ,omo nombre de la base de datos teclea 3ideo.mdb $ "r bala en el directorio de 3isual *abla ,lientes Campo ,od,li 4om,li )ir,li ,od%os %rovincia 'mortizado %rimer 7ndice 4ombre del índice ,lave,li Tipo 4um!rico *exto *exto *exto *exto 4um!rico Longitud Entero lar"o 5. 6. 5 -5 )oble

,ampo Se"undo 7ndice 4ombre del índice ,ampo

,od,li ,lave4om 4om,li

*abla %elículas Campo 4um%el 4om%el Sistema %re'lq *ema Tipo 4um!rico *exto *exto 4um!rico *exto Longitud Entero lar"o 5. 8 )oble /5

%rimer 7ndice 4ombre del índice ,ampo ,lave%el 4um%el

2.

9na vez hemos creado las dos tablas, ase":rate de no tener relaciones.

3.

%or :ltimo, cierra la base de datos $ mediante el men: ;erramientas, convierte la base de datos en una versión anterior. 9na vez finalizado el proceso del dise#o de la base de datos, hemos de crear el formulario principal, el cual tendr el men: con las opciones de "estión.

,&E'& EL <+&=9L'&>+ %&>4,>%'L Este formulario se encar"ar de las opciones del men: que insertaremos. La aplicación la vamos a basar sobre formularios =)>, es decir, los formularios de entrada de datos $ consultas estar n contenidos dentro del formulario principal. &ealizaremos los si"uientes pasos 2 /. )entro de 3isual (asic, abre el men: 'rchivo $ selecciona la opción 4uevo %ro$ecto. -. &ealiza doble clic sobre el si"uiente icono.

?. %ulsa sobre el botón para ver la ventana de pro$ectos. @. %ulsa con el botón derecho sobre <orm/ $ selecciona la opción Quitar <orm/. 5. Este paso lo hemos realizado para eliminar el formulario que nos ofrece 3isual por defecto, esto es debido a que nosotros queremos que el formulario principal sea un =)>. 6. 'bre el men: %ro$ecto $ selecciona la opción '"re"ar formulario =)>. ' continuación aparecer el si"uiente cuadro de di lo"o 2

li(orrar mnuDe. ' continuación realizaremos el men: si"uiendo los si"uientes pasos 2 /. %usa sobre el botón 9na vez dise#ado el men:.li.onsultar C%elícula mnuDe%elícula )e momento damos por finalizado el dise#o del men:. m s adelante en este mismo capítulo a#adiremos nuevas opciones.lientes mnuDe. &ealiza el si"uiente men:2 . . %ulsa sobre el botón Editor de =en:s.onsultar C.onsultar mnuDe%e'ltas mnuDe%e=odificar mnuDe%e(orrar mnuDe%e.aption CDestión 4ame mnuDestión C'ltas C=odificar C(orrar C.lientes C'ltas C=odificar C(orrar C.li=odificar mnuDe. -.&ealiza doble clic sobre el icono 2 +bserva como el interior de este formulario es de un color m s oscuro. esto es debido a que este formulario es =)> A=:ltiple )ocument >nterfaceB.li'ltas mnuDe. ha de tener el si"uiente aspecto 2 mnuDe.onsultar ESeparador Separador CSalir mnuDeSalir ?.

aption 4ame *ext 4ame *ext 4ame *ext Objeto *ext? Propiedad 4ame *ext Valor %elícula *rue 4F%elicula *ítulo Sistema %recio 'lquiler *ema 4um%el A3acíoB *ítulo A3acíoB Sistema A3acíoB Valor %re'lq A3acíoB . ?.aption .@. %ara el control de pesta#a se ha utilizado 5. hemos de advertir que este formulario lo utilizaremos para cualquiera de las opciones que est n en el interior del men: %elículas. Selecciona la opción '"re"ar <ormulario.aption .aption . 'bre el men: %ro$ecto. >nserte los si"uientes controles. -. &ealiza los si"uientes pasos en la creación del formulario películas 2 /.aption . &ealiza doble clic sobre el icono 2 @.hild . con lo cual nos ahorraremos el tener que realizar un formulario para cada opción.aption Valor Destión de la base de datos 3ídeo 4ame 3ídeo ' continuación realizaremos el formulario correspondiente a la "estión de la tabla %elículas. Establezca las si"uientes propiedades 2 Objeto <orm/ Label/ LabelLabel? Label@ Label5 *ext/ *ext.ombo/ Propiedad 4ame =)>. Establece las si"uientes propiedades al formulario 2 Objeto =)><orm/ Propiedad .

aption 4ame 9na vez hemos terminado de dise#ar el formulario. 'quí es donde declaramos las variables que vamos a utilizar dentro de este formulario.ommand- . Efect:a un doble clic sobre el formulario. @.*ext@ SS*ab/ 4ame *ext 4ame *abs . realiza clic sobre la lista que contiene la palabra <orm. 9na vez en el editor del códi"o. Selecciona de la lista Deneral. antes de realizar las declaraciones hemos de insertar una referencia en nuestro códi"o para informar a 3isual (asic que vamos a utilizar bases de datos. pasemos a definir las variables que necesitamos para su control.aption *ema A3acíoB <icha%elícula / . 'bra el men: %ro$ecto $ selecciona la opción &eferencias.ontrol de películas C'ceptar 'ceptar CSalir Salir . -. &ealiza los si"uientes pasos 2 /.aption 4ame . ?.ommand/ . Se"uidamente aparecer el si"uiente cuadro de di lo"o2 .

. (usca en la lista la referencia =icrosoft )'+ -. borrar $ consultar..5G ?. 4..mdbKB Set *abla%elículas I (ase)e)atos.. a continuación abrimos la tabla %elículas por medio de la función +pen&ecordSet.ase +pcion ..aption IKC=odificarK .aptionIK=odificación de %elículasK 'ceptar.aption IKC.aptionIK.ase %elícula.ompatibilit$ Librar$. 2.+pen&ecordset AJ%elículasKB Select . modificar.. este evento se tiene justo debajo de las declaraciones que se acaban de insertar2 %rivate Sub <ormHLoadAB Set (ase)e)atos I +pen)atabase AJ3ideo.aption IKC'#adirK . *eclea el si"uiente códi"o para el evento <ormHLoad del formulario..ase / %elícula. 3.1. utilizamos la función +pen)atabase para abrir la base de datos.onsulta de %elículasK 'ceptar.ase ? %elícula. Selecciona esta opción $ pulsa sobre el botón ' continuación teclea el si"uiente códi"o 2 +ption Explicit )im (ase)e)atos as )atabase )im *abla%elículas as &ecordset )im ErrorEntrada as >nte"er En la primera línea declaramos una variable de tipo base de datos $ en la si"uiente otra de tipo &ecordset A*ablaB.on estas dos funciones $a podemos a#adir.ase @ %elícula..aptionIK(orrado de %elículasK 'ceptar. %or supuesto hace falta teclear códi"o.onsultarK End Select End Sub En la primera línea.. Si nos fijamos.5 .aption IKC(orrarrK .aptionIK'lta de %elículasK 'ceptar. La primera nos servir para abrir la base de datos $ la se"unda para abrir la tabla. .

*hen Select . 2.ampos >f ErrorEntrada I .erramos la ventana del códi"o. &ecuerda que al principio hemos comentado que este formulario lo utilizaremos para todas las opciones.' continuación evaluamos el valor de la variable +pcion L nos pre"untaremos dónde hemos definido esta variable. 1. . &ealiza doble clic sobre el botón 'ceptar $ teclea el si"uiente códi"o.'dd4eN =over.ase +pcion .Edit =over. una vez acabada la pro"ramación de este formulario.ase / *abla%elículas. ' continuación hemos de pro"ramar los botones de 'ceptar $ Salir.9pdate Limpiar. la declararemos a nivel "lobal.ase ? *abla%elículas. %rivate Sub 'ceptarH.licMAB .ajas)e*exto End Select ErrorEntrada I .9pdate Limpiar.omprobar.ajas)e*exto . de ahí que se":n el valor de la variable +pcion.ampos *abla%elículas. )e momento no lo haremos. cambiamos el valor de la ventana $ del botón.ajas)e*exto .ampos *abla%elículas. dentro de un módulo.ase *abla%elículas.ajas)e*exto .ase @ Limpiar.)elete Limpiar. End >f End Sub .

se"uidamente utilizamos 9nload =e para cerrar el formulario.omo se puede ver en estas líneas cerramos la tabla $ la base de datos.ampos La utilizaremos para copiar los datos que ha$ en los cuadros de texto a los campos de la tabla.ampos <unction =over. .ampos Asin definirB.*extB *abla%elículas.. (ase)e)atos.lose 9nload =e End Sub -. *eclea el si"uiente códi"o para el evento . evaluamos la variable +pcion para averi"uar qu! operación tenemos que realizar sobre la tabla. <unción =over.*ext End <unction .ampos. sit:ate despu!s de la :ltima línea $ teclea el códi"o para la función =over. Ano ha$ erroresB.omprobar s que en las sentencias . en caso de que la variable ErrorEntrada ten"a valor . En caso de que la +pcion sea /. 3e donde hemos definido los variables.<ieldsAJ%re'lqKBI3alA%re'lq.<ieldsAJ*emaKBI*ema. borramos el re"istro seleccionado mediante )elete.*extB *abla%elículas.licM del botón Salir. en caso de que la +pcion sea -.En primer lu"ar llamamos a una función llamada .. ?.ajas de *exto La utilizaremos para limpiar los cuadros de texto del formulario /.<ieldsAJSistemaKBISistema.  Limpiar. %rivate Sub SalirH.ase utilizamos nombres de función que a:n no hemos definido. . a continuación explicaremos el cometido de cada una 2  =over.omprobar. En el caso ?.*ext *abla%elículas. . a#adimos un re"istro con la sentencia 'dd4eN.licMAB *abla%elículas.lose.*ext *abla%elículas.<ieldsAJ4om%elKBI*ítulo.amposAB *abla%elículas. editamos el re"istro con la sentencia Edit.omo se puede comprobar en !stas líneas sólo copiamos los datos que ha$ en los cuadros de texto a los campos correspondientes dentro de la tabla. en ambos casos actualizaremos la tabla con los nuevos datos mediante 9pdate.<ieldsAJ4um%elKBI3alA4um%el.

Set<ocus Do *o Error End >f >f Sistema.*extIK J Sistema.ritical *ítulo./.*extIK J *hen ErrorEntradaI/ =s"(ox J&ellene el campo 4:mero de %elículaK. vb. vb.*extIK J *ítulo.ritical Sistema.ritical %re'lq.*extIK J ErrorEntradaI/ =s"(ox J&ellene el campo %recio de 'lquilerK.ajas)e*exto <unction Limpiar.*extI J J ErrorEntradaI/ =s"(ox J&ellene el campo SistemaK.*extIK J *ema.ritical 4um%el.Set<ocus Do *o Error End >f .Set<ocus Do *o Error End >f >f %re'lq. *eclearemos ahora las dos funciones si"uientes.ajas)e*extoAB 4um%el.*extI J J ErrorEntradaI/ =s"(ox J&ellene el campo*ítulo de %elículaK. vb.ampos <unction .omprobar.*extIK J %re'lq.omprobar.amposAB >f 4um%el. justo debajo de la que acabamos de teclear 2 <unción Limpiar.Set<ocus Do *o Error End >f >f *ítulo. vb.*extIK J End <unction <unción .

>f *ema. Este error nos obli"a a terminar con la aplicación . .ierra la ventana del códi"o $ efect:a doble clic sobre el cuadro de texto 4um%el. %ara solventar este problema.frm 3ídeo. Selecciona de la lista de eventos la opción Oe$%ress. 9no de los errores m s comunes cuando el usuario est utilizando la aplicación.ritical *ema. (eep End >f End Sub . asi"namos el valor / a la variable ErrorEntrada. es la de introducir datos alfanum!ricos en campos num!ricos.uando esto ocurre 3isual (asic responde a un mensaje de Error de . si lo hici!ramos es mu$ posible que ocurriera al":n error inesperado. . -. 'bre el men: 'rchivo $ selecciona la opción Duardar %ro$ecto. realizaremos los si"uientes pasos para los cuadros de texto que tendr n valores num!ricos2 /.onversión de *ipos. en caso contrario Ai"ual J JB. ?.*extI J J ErrorEntradaI/ =s"(ox J&ellene el campo*emaK.frm Des%el.vbp ?. con lo cual no queda mu$ profesional.Set<ocus Do *o Error End >f Error2 End <unction En !sta :ltima función comprobamos que los cuadros de texto est!n con al":n valor. *eclea el si"uiente códi"o2 %rivate Sub 4um%elHOe$%ress AOe$'scii as >nte"erB >f Oe$'sciiPI@8 and Oe$'sciiPI51 or Oe$'sciiI8 or Oe$'sciiI@@ then Else Oe$'sciiI. vb. 'si"na los si"uientes nombres 2 4o ejecutaremos la aplicación todavía porque no hemos terminado de teclear el códi"o. mostramos un mensaje de error $ por :ltimo asi"namos el foco de entrada al cuadro de texto correspondiente. -. <ormulario =)> <ormulario %elícula %ro$ecto 3ídeo.

sin orden al"uno. +tro de los problemas que se nos presenta. dispone de una propiedad que contienen la ma$oría de los controles de 3isual (asic.uando se ejecute una aplicación es posible que el usuario. En esta función comprobamos que la tecla pulsada AOe$ 'sciiB sea car cter. .uando se dise#a un formulario. 'sí se evitar que el pro"rama finalice de una manera inesperada. %ara solucionar este problema.ampo excede de lon"itud. &ecuerda siempre controlar estos errores en las aplicaciones. @. . . parte de la base que el usuario jam s ha utilizado un ordenador.ierra la ventana del códi"o.omo $a sabemos. /. se encuentre que no manten"a el orden correcto. provocaría un error2 . la lon"itud del campo *ítulo es de 5. &ealizaremos los si"uientes pasos para solventar este problema2 /. cuando pulse la tecla *'( para pasar de un campo a otro. -. . +tro de los puntos a tener en cuenta es el orden de introducción de datos. en ese caso anulamos la tecla pulsada $ emitimos un sonido ASepB para informar al usuario que en ese cuadro de texto se ha de introducir n:meros. lo m s probable es que se inserten controles a medida que se necesiten. en caso de que el usuario tecleara m s de 5. caracteres. se denomina *ab>ndex A7ndice del *abuladorB. .ambiando esta propiedad provocamos que los cuadros de texto no admitan m s caracteres de los especificados. es decir. Establece las si"uientes propiedades en los cuadros de texto 2 Objeto 4um%el *ítulo %re'lq *ema Propiedad =axLen"th =axLen"th =axLen"th =axLen"th Valor 5 5. es la lon"itud de los campos. /5 Sistema A4o necesita porque es una lista de selecciónB .El evento Oe$%ress se produce cada vez que pulsamos una tecla dentro del cuadro de texto.. Siempre que realices una aplicación. &ealizaremos esta misma operación en el cuadro de texto %recio de 'lquiler. 'l mismo tiempo ha$ que intentar hacerle lo m s f cil posible la entrada de datos $ el control de aquellas funciones que no quieres que se realicen.

Se puede conse"uir. =odificando esta propiedad conse"uiremos que la tecla tabulador si"a un orden correcto. pero. 3eamos un ejemplo. >ncluso ha$ usuarios que prefieren utilizar E4*E& para pasar de un cuadro a otro en vez de hacerlo con la tecla *'(. 5. Qse dispone del ratón para seleccionar qu! cuadro de texto o control se quiere rellenarR. Si se coloca este códi"o en cada una de los cuadros de texto.&ealiza el si"uiente paso 2 /. pero existen muchos usuarios a los que les es m s cómodo desplazarse con el teclado. "uardaremos de nuevo la aplicación para salvar los cambios realizados. se conse"uir que funcione la tecla Enter como desplazamiento entre un cuadro de texto $ otro. con lo cual se obli"aría a pro"ramar dicha tecla. . 'ntes de continuar. 'si"na los si"uientes *ab>ndex a los controles del formulario 2 <icha %elícula ASS*abB 4um%el *ítulo Sistema %re'lq *ema 'ceptar Salir . / ? @ 5 6 1 -.Set<ocus Sasi"namos el foco de entrada al si"uiente cuadro de texto End >f End Sub @. previamente cambiando el nombre de las mismas. ?. de paso hacemos m s f cil la entrada de datos al usuario. %rivate Sub %re'lqHOe$%ress AOe$ 'scii as >nte"erB >f Oe$'sciiI/? then Sel códi"o /? es la tecla Enter *ítulo.

&ecuerda que esta es la variable que nos quedaba por definir. &ealiza doble clic sobre el icono. -. 5. .9L'S En este apartado comprobaremos que el formulario que hemos creado funcione correctamente. pero antes hemos de llamarlo cuando seleccionemos la opción del men:. 'bre el men: %ro$ecto $ selecciona la opción '"re"ar módulo. %ublic +pcion 's >nte"er.%&+('& EL <+&=9L'&>+ %EL7. @. 9tiliza siempre los módulos para definir las variables o procedimientos que se van a utilizar en todos los formularios del pro$ecto. %ara ello realizaremos los si"uientes pasos 2 /. &ealiza doble clic sobre el formulario 3ídeo. *eclea la si"uiente línea de códi"o. Es la variable que utilizamos en el formulario %elículas $ que controlaba el n:mero de opción. 'ctiva la ventana del Explorador de %ro$ectos. ?.

0.licMAB +pcionI@ %elículas.>+4 'L*'S %rivate Sub mnuDe%e'ltasH. &ealiza el paso 0 pero con los si"uientes códi"os 2 +%.6.licMAB +pcionI%elículas.onsultarH.lientes.>+4 =+)><>. +bserva cómo el valor de la variable +pcion va cambiando se":n la opción del men: seleccionada. cambiando el nombre del formularioL en vez de %elículas.ierra el módulo.lientes.ShoN End Sub +%.>+4 (+&&'& %rivate Sub mnuDe(orrarH. /.ShoN End Sub .licMAB +pcionI? %elículas.ShoN End Sub En estas dos líneas informamos que hemos pulsado sobre la opción de altas A+pciónI/B $ mostramos el formulario mediante la propiedad ShoN. &ealiza un clic sobre la opción 'ltas $ teclea el si"uiente códi"o 2 +%. 'bre el men: Destión $ selecciona la opción %elículas.. . 'ntes de ejecutar la aplicación. realiza estos pasos2 .+4S9L*'& %rivate Sub mnuDe%e.'& %rivate Sub mnuDe=odificarH.ShoN End Sub +%.licMAB +pcionI/ %elículas.bas . 1. Draba el módulo con el nombre de 3ari3ideo. 8.>+4 .opia estos códi"os para las opciones del men: .

aption I JC=odificarK .aption I J =odificación de películas J 'ceptar. ?..ase ? %elículas. 'bre el men: Destión $ selecciona la opción %elículaG 'ltas. 'ctiva ahora el formulario %elículas $ realiza doble clic sobre el formularioE ?.+pen&ecordsetAJ%elículasKB +pcionI/ Select .aption I J. .aption I JC(orrarK .ase @ %elículas.onsultarK End Select Sistema..aption I JC... podemos comprobar los diferentes controles de error que controlamos mediante códi"o.mdbKB Set *abla%elículas I(ase)e)atos. observa como el pro"rama emite un beep.. 9na vez tenemos el formulario en pantalla.'dd>tem J (E*'K Sistema./.aption I J(orrado de películasK 'ceptar. Establece la propiedad TindoNState del formulario 3ideo a =aximized.ase / %elículas.ase %elículas.. %ulsa la tecla <5 para ejecutar el pro"rama. '#ade las si"uientes líneas 2 %rivate Sub <ormHLoadAB Set (ase)e)atos I +pen)atabase AJ3ídeo. caracteres alfab!ticos.SK Sistema.. >ntenta teclear en el cuadro de texto 4F %elícula.onsulta de películasK 'ceptar.'dd>tem J Super 8K End Sub &ealiza los si"uientes pasos para ejecutar la aplicación 2 /.aption I J'lta de películas J 'ceptar.'dd>tem J3.ase +pcion .aption I JC'#adirK .. -. Selecciona el formulario principal 3ídeol -.

2 *ema2 Registro 3 4F %elícula2 *ítulo2 Sistema2 %recio 'lq. &ealiza doble clic sobre el cuadro de texto 4um%el.2 *ema2 6 La %rofecía Super 8 *error @ 4irvana (E*' 5 . Este paso consiste en que el usuario teclee el n:mero de película que quiere buscar $ nosotros realizaremos dicha b:squeda.2 *ema2 Registro ! 4F %elícula2 *ítulo2 Sistema2 %recio 'lq. @. 5.2 *ema2 Registro " 4F %elícula2 *ítulo2 Sistema2 %recio 'lq. $a que a:n nos queda por realizan un paso m s. %ara ello. )eja un cuadro de texto en blanco $ pulsa sobre el botón '#adir +bserva como el pro"rama manda un mensaje advirti!ndonos de error.2 *ema2 Registro 4F %elícula2 *ítulo2 Sistema2 %recio 'lq. Selecciona el evento Lost<ocus. realiza los si"uientes pasos 2 /. ?. 3. *eclea el si"uiente códi"o 2 .S @ *error / 4o ha$ salida 3. abandona el pro"rama sin ejecutar las dem s opciones. >ntroduce los si"uientes títulos de película 2 Registro 1 4F %elícula2 *ítulo2 Sistema2 %recio 'lq.@.S ? >ntri"a Registro 2 4F %elícula2 *ítulo2 Sistema2 %recio 'lq.S @ *error 9na vez introducidas las películas. -. Sal de la aplicación.iencia <icción 'lien 3.2 *ema2 5 SpaNn (E*' ? *hriller ? =>=>.

%rivate Sub 4um%elHLost<ocusAB >f +pcionI.>ndex.*ext I *abla%elículas. Se"uidamente comprobamos si el re"istro existe evaluando el m!todo 4omatch.<ields AJSistemaKB %re'lq.SeeM JIK.*ext I J J 4um%el.<ields AJ4om%elKB Sistema. 3al A4um%elB >f *abla%elículas.*ext I *abla%elículas. inserta un re"istro de prueba.opia la si"uiente función en la parte Deneral del formulario <unction . pas ndole como par metro el texto que hemos tecleado en el cuadro de texto 4um%el.or +pcionI? or +pcionI@ then >f 4um%el. consultarlo $ borrarlo.ampos que se encar"ar de mover los campos al re"istro de la tabla. ' continuación.*ext I Str A *abla%elículas. En caso de que sea *rue Are"istro no exitenteB mostramos un mensaje advirtiendo que ese re"istro no existe $ en caso contrario llamamos a la función .<ieldsAJ4um%elKBB *ítulo. . hemos realizado la b:squeda mediante *abla%elículas.SeeM.ritical 4um%el.Set<ocus Else .<ieldsAJ%re'lqKBB *ema.<ields AJ*emaKB End <unction 6.lave%elK *abla%elículas. vb. %ara comprobar el funcionamiento de las dem s opciones.amposAB 4um%el.ampos End >f End >< End >f End Sub %ara realizar la b:squeda del re"istro hemos usado el índice mediante el comando *abl%elícula.*ext I *abla%elículas.*ext I Str A *abla%elículas.ar"ar.*extUP J J *hen *abla%elículas. 5.4o=atch I *rue *hen =s"(ox J%elícula no existeK. Draba de nuevo la aplicación para salvar los cambios. de esta manera ase"uraremos el correcto funcionamiento del resto de las opciones. . para poder modificarlo.ar"ar.ar"ar.>ndex I J.

aprendiendo estas t!cnicas. &ealiza doble clic sobre el si"uiente icono 2 ?. 'ntes.aption .hild . 'bre el men: %ro$ecto $ selecciona la opción '"re"ar <ormulario.li A3acíoB 5. las tendremos que realizar en este. Sin embar"o. )e todas las maneras.li A3acíoB 5 4om.liente *rue . *ext- 4ame *ext =axLen"th . En realidad siempre que ten"amos que realizar al"una "estión de un fichero realizaremos los mismos pasos. realizaremos los pasos para dise#ar el formulario 2 /. $a podremos realizar funciones para controlar posibles errores de usuarios.aption . con la diferencia que son distintos campos.ódi"o .aption .liente 4ombre )irección .aption .aption 4ame *ext =axLen"th Valor . -.ódi"o %ostal %rovincia 'mortizado . )ise#a el formulario de la p "ina si"uiente con las propiedades que se muestran a continuación 2 Objeto <orm/ Label/ LabelLabel? Label@ Label5 Label6 *ext/ Propiedad 4ame =)>.aption .L>E4*ES Las mismas funciones que hemos realizado en el formulario anterior.od.&E'L>V'& EL <+&=9L'&>+ . ha$ aplicaciones de "ran tama#o que requieren muchos m s controles que los explicados aquí.

.Objeto *ext? Propiedad 4ame *ext =axLen"th Valor )irección A3acíoB 6.ommand- .od%os A3acíoB 5 %rovincia A3acíoB -5 'mortizado A3acíoB /<icha.aption 4ame .ontrol de clientes C'ceptar 'ceptar CSalir Salir *ext@ 4ame *ext =axLen"th *ext5 4ame *ext =axLen"th *ext6 4ame *ext =axLen"th SS*ab/ 4ame *abs .aption .ommand/ . 'hora el formulario ha de presentar el si"uiente aspecto2 .aption 4ame 'ntes de continuar no olvidemos poner la propiedad *ab>ndex de cada control en el orden correcto.liente / .

<ieldsAJ%rovinciaKB I %rovincia.od%os. tendríamos que teclear el códi"o necesario tanto para el formulario como para el men:.<ieldsAJ)ir.od%osKB I . "raba este formulario con el nombre .lientes.liKB I 4om.*ext *abla.liKB )irección.li.lientes.li.lientes. 4o te limites sólo a copiar el códi"o.*ext I *abla.*extB End <unction <unction Limpiar.ajas)e*extoAB .od.lientes. 'ntes de teclear el códi"o.*extB *abla.lientes as &ecordset )im ErrorEntrada as >nte"er <unciones <unction .*ext I *abla.lientes.<ieldsAJ%rovinciaKB 'mortizado.od. )e esta manera podremos ver los fallos que cometes Aen caso de tenerlosB.<iledsAJ'mortizadoKBB End <unction <unction =over.lientes.od%os.<ieldsAJ.*ext I StrA*abla.*ext I *abla.lientes.amposAB .od%osKB %rovincia.*ext *abla.liKB I 3alA.lientes.*ext I *abla. L>S*')+ .lientes.9na vez terminado el dise#o del formulario.li.liKB .liKBB 4om.lientes.lientes.*ext *abla.lientes.<ieldsAJ.od.<ieldsAJ)ir.lientes.<iledsAJ'mortizadoKB I 3al A'mortizado.<ieldsAJ4om.liKB I )irección.<ieldsAJ4om.<rm Es aconsejable que intentes teclear el códi"o de este formulario sin fijarse en la solución que a continuación ofrecemos.L>E4*ES Deneral +ption Explicit )im (ase)e)atos as )atabase )im *abla. intenta ver el porqu! de las funciones que se utilizan.li.amposAB *abla.*ext *abla.ar"ar.<ieldsAJ.W)>D+ )EL <+&=9L'&>+ .<ieldsAJ.*ext I StrA*abla.od.

amposAB >f .ódi"o de . vb.*ext I J J *hen ErrorEntrada I / =s"(ox J&ellene el campo . vb.lienteK.ritical )irección.li.omprobar. vb.lienteK.ritical .*ext I J J %rovincia.li.*ext I J J *hen ErrorEntrada I / =s"(ox J&ellene el campo .ritical ..Set<ocus Do *o Error End >f >f 4om.*ext I J J *hen ErrorEntrada I / =s"(ox J&ellene el campo .od.*ext I J J 'mortizado.od%os.*ext I J J End <unction #U$C%&$ CO'PRO(AR CA'PO) <unction .od%os.od. vb.Set<ocus Do *o Error End >f >f )irección.*ext I J J *hen ErrorEntrada I / .*ext I J J 4om.Set<ocus Do *o Error End >f >f .ódi"o de .ódi"o de .li.*ext I J J *hen ErrorEntrada I / =s"(ox J&ellene el campo .lienteK.od%os.od.li.li.li.Set<ocus Do *o Error End >f >f %rovincia.ódi"o de .*ext I J J .ritical 4om.lienteK.*ext I J J )irección.

lienteK.ajas)e*exto .ase *abla.ritical %rovincia.ase / *abla.lientes.TO A'ORT%-A+O %rivate Sub 'mortizadoHOe$%ressAOe$'scii as >nte"erB .ajas)e*exto End Select .9pdate Limpiar.od.li. vb. vb.lientes.ase ? *abla.9pdate Limpiar.ase +pcion .lientes. then Select .ampos >f ErrorEntrada I .lientes.ajas)e*exto .ajas)e*exto .ampos *abla.ódi"o de .omprobar.Set<ocus Do *o Error End >f >f 'mortizado.'dd4eN =over. End >f End Sub CUA+RO +* T*.ritical 'mortizado.lientes.ampos *abla.lienteK.*ext I J J *hen ErrorEntrada I / =s"(ox J&ellene el campo .ase @ Limpiar.)elete Limpiar.Set<ocus Else ErrorEntrada I .ódi"o de .licMAB .Edit =over.=s"(ox J&ellene el campo .Set<ocus Do *o Error End >f Error2 End <unction (OT&$ AC*PTAR %rivate SubH'ceptarH.

lientes.TO C&+%.TO C&+%.li.ritical . (eep End >f End Sub CUA+RO +* T*.liB >f *abla.od.>ndex I J.od.O +* CL%*$T* %rivate Sub .od.lave.SeeM J I J .lientes. (eep End >f End Sub *V*$TO #OR'/LOA+ +*L #OR'ULAR%O %rivate Sub <ormHLoad .Set<ocus Else . 3alA.liHOe$%ress AOe$'scii as >nte"erB >f Oe$'sciiPI@8 and Oe$'sciiUI51 or Oe$'scii I 8 or Oe$'scii I @@ then Else Oe$'scii I . (eep End >f End Sub %rivate Sub .ar"ar.liente no existeK.od%osHOe$%ressAOe$'scii as >nte"erB >f Oe$'sciiPI@8 and Oe$'sciiUI51 or Oe$'scii I 8 or Oe$'scii I @@ then Else Oe$'scii I .ampos End >f End >f End >f End Sub CUA+RO +* T*.od.*ext I J J .li.O PO)TAL %rivate Sub .liK *abla.>f Oe$'sciiPI@8 and Oe$'sciiUI51 or Oe$'scii I 8 or Oe$'scii I @@ then Else Oe$'scii I .li. vb.od.od.or +pcion I ? or +pcion I @ then >f .lientes.4o=atch I *rue then =s"(ox J.liHLost<ocusAB >f +pcion I .*ext UP J J *hen *abla.

aption I JC'#adirK .aption I J(orrado de .lientes.aption I J=odificación de ..Set (ase)e)atos I +pen)atabase AJ3ídeo...lientes.ase ? ..lientes.aption I J'lta de .lientesK 'ceptar.licMAB *abla.lientes.ase / .onsulta de ...onsultarK End Select End Sub (OT&$ )AL%R %rivate Sub SalirH..aption I JC..lientes.aption I J.lientesK 'ceptar.lose (ase)e)atos.aption I JC(orrarK .ase @ ..lose 9nload =e End Sub 'ntes de continuar comprobaremos el funcionamiento de este formulario.lientesK 'ceptar.aption I JC=odificarK . %or :ltimo Duardaremos el %ro$ecto para salvar los cambios.mdbKB Set *abla.lientesKB Select case opcion .+pen&ecordset AJ. .lientes I (ase)e)atos.lientesK 'ceptar.ase ..

'=%+ 4um%el .li <ec'lq <ec)ev &ecar"o 74)>. @.orta <echa . 5.ampo .od.ora <echa G . 3uelve a 3isual (asic. Selecciona el icono <ormulario $ pulsa sobre el botón 'brir.orta Entero Lar"o de controlar las -. /.od. Draba la tabla con el nombre 'lquiler $ cierra la aplicación 'ccess.la'lq 4um%el .rea la si"uiente tabla en 'ccess dentro de la base de datos 3ídeo 2 *'(L' 'LQ9>LE& .li *>%+ 4um!rico 4um!rico <echa G . )ise#a los si"uientes controles $ asi"na las propiedades que se encuentran debajo de esta fi"ura 2 .ora 4um!rico L+4D>*9) Entero Lar"o Entero Lar"o <echa .ES 4ombre del índice . ?. abre el men: %ro$ecto $ selecciona '"re"ar <ormulario.ampo .. .&E'& L' *'(L' X <+&=9L'&>+ 'LQ9>LE&. En este apartado crearemos una tabla en 'ccess que se encar"ar películas que est n alquiladas $ el socio que las ha alquilado.

.

ommand- 4ame )ataSource 4ame . se ha de asi"nar el directorio $ nombre de donde se encuentra la base de datos en tu ordenador.Objeto <orm/ Propiedad .ommand/ .li A3acíoB 5 4um%el A3acíoB 5 'lquiler 3ídeo.aption . .liente 4:mero %elícula . 4e"rita .hild Valor 'lquiler de 3ídeos 'lquiler *rue 'lquiler de %elículas /8.aption 4ame .aption 4ame *ext =axLen"th *ext- 4ame *ext =axLen"th )ata/ 4ame )atabase4ame &ecordSource 3isible )ataDrid/ .aption En la propiedad )atabase4ame del control )ata/.od.aption <ont .frm.aption 4ame =)>.mdb 'lquiler <alse 'lq 'lquiler 'ceptar C'ceptar Salir CSalir Label/ LabelLabel? *ext/ .ódi"o . 9na vez realizado el formulario "r balo con el nombre 'lquiler.

=ediante este cuadro podemos cambiar el ancho de las columnas. %ulsa con el botón derecho sobre )ataDrid. 'hora aparecer el si"uiente cuadro de di lo"o 2 En la primera pesta#a nos encontramos las propiedades que hacen referencia a todo el control. La propiedad . estableciamos las propiedades del )ataDrid. Las opciones de la derecha hacen referencia al alto. 'ctiva las opciones 'lloN'dd4eN $ 'lloN9p)ate. por lo tanto este )ataDrid se rellenar con los re"istros que forman esta tabla.aption se refiere al título que aparecer en la cabecera del )ataDrid. ancho. 5. ' la propiedad )ataSource le asi"namos el control )ata. etc. @. Selecciona la opción &ecuperar campos 'hora )ataDrid tendr el si"uiente aspecto 2 +bserva cómo ahora el )ataDrid tiene los nombres de los campos en su interior. baja o modificar A'lloN'dd4eN. Las opciones de cajas de chequeo que se encuentran a"rupadas en la parte izquierda del cuadro. 'lloN)elete $ 'lloN9p)ateB.%&E%'&'& EL )'*'D&>) %'&' L' E4*&')' )E )'*+S En el apartado anterior. El :nico problema es que el título de las columnas no es el adecuado. que !ste a su vez tiene asi"nada la tabla 'lquiler. ?. etc. títulos. color. .. apariencia. Selecciona la opción %ropiedades. &ealiza los si"uientes pasos para confi"urar el )ataDrid 2 /. &ealiza clic con el botón derecho sobre )ataDrid. del )ataDrid. para solucionar este problema hemos de acceder al cuadro de propiedades de este control. -. permiten que el )ataDrid se utilice para dar re"istros de alta.

od.olumn@ .olumnas.'%*>+4 2 .aption )ata<ield &ecar"o &ecar"o <echa )evolución <ec'lq <echa 'lquiler <ec'lq .6. %ulsa sobre la pesta#a de .%elícula 4um%el .li 4F.liB .olumn-A<ec'lqB .olumn. Establece las si"uientes propiedades para cada una de las columnas 2 .+L9=4'2 Esta lista nos muestra todas las columnas disponibles en el )ataDrid Auna por campo de la tablaB. A4um%elB .liente .aption2 )ata<ield2 . 'hora aparecer n las si"uientes opciones 2 3eamos el si"nificado de cada una de estas opciones 2 . .olumn? .od. Las dem s propiedades har n efecto sobre la columna que est! seleccionada en esta opción. 8.olumna. )'*'<>EL)2 Especifica a qu! campo de la base de datos har referencia esta columna.aption )ata<ield .ód.olumn/A.aption )ata<ield .aption el si"uiente texto 2 'lquiler de %elículas. *eclea en la propiedad .ace referencia al título de la columna que est! activa en la opción .. 1.aption2 )ata<ield .

olumn A. &ealiza doble clic sobre la pesta#a )ise#o. 'lloNSizin" 2 %ermite cambiar el tama#o de la columna en tiempo de ejecución. La opción 'l"i"nment permite especificar la justificación para el contenido de la celda.olumna. Establece las si"uientes propiedades para nuestras columnas 2 . Las opciones de tipo casilla de selección m s importantes son 2 LocMed 2 (loquea la columna. 3isible 2 =uestra u oculta la columna.olumna? LocMed2 'lloNSizin"2 3isible2 Trap*ext2 (utton2 =arcada 4o =arcada =arcada 4o =arcada 4o =arcada =arcada 4o =arcada =arcada 4o =arcada 4o =arcada . no permite teclear su contenido.0. ' continuación aparecer el cuadro de di lo"o de la p "ina si"uiente 2 Se"uidamente explicaremos las opciones m s importantes de esta pesta#a de dise#o. La opción Tidth establece el ancho para cada columna. La lista .olumna/ LocMed2 'lloNSizin"2 3isible2 Trap*ext2 (utton2 .olumnaB nos permite seleccionar la columna a la cual queremos cambiar las propiedades.. (uttton 2 <uerza que la columna dispon"a de un botón de lista desple"able. LocMed2 'lloNSizin"2 3isible2 Trap*ext2 (utton2 . es decir. /.olumnaLocMed2 'lloNSizin"2 3isible2 Trap*ext2 (utton2 =arcada 4o =arcada =arcada 4o =arcada 4o =arcada =arcada 4o =arcada =arcada 4o =arcada 4o =arcada .

&ealiza un clic con el botón izquierdo $ sin soltar. @. -. ' continuación cambiaremos el ancho de las columnas. En estos momentos el )ataDrid se encuentra en modo edición.olumna@ LocMed2 'lloNSizin"2 3isible2 Trap*ext2 (utton2 =arcada 4o =arcada =arcada 4o =arcada 4o =arcada //. 3eamos ahora cu l va a ser el funcionamiento de este formulario. de esta manera daremos de alta el re"istro. arrastre el ratón hacia la derecha. en caso de no tener nin"una. Selecciona la opción Edición. . Sit:a el puntero del ratón en la línea que separa la primera columna de la se"unda. pero es aconsejable hacerlo se":n es si"uiente m!todo. ?. podremos teclear los dem s datos. 9na vez ten"amos el tama#o deseado soltaremos el ratón. /. . %ulse sobre el botón 'ceptar. una vez establecidos estos dos campos. 'ntes de pasar a teclear el códi"o. con lo cual nos permite modificar los anchos. es cierto que podríamos haberlo realizado mediante las propiedades.uando le llamemos. . lo primero que haremos ser pedir el cliente $ el n:mero de la película que vamos a alquilar..on estos pasos hemos terminado el dise#o del )ataDrid. El puntero adoptar el si"uiente aspecto 5. ejecutaremos una instrucción SQL para seleccionar las posibles películas alquiladas que tuviera este cliente. Efect:a doble clic con el botón derecho sobre el )ataDrid. lee el apartado que ofrecemos a continuación en caso de no saber qu! son las sentencias SQL.

l usulas SQL <&+= T.&E'*E Se utiliza para crear nuevas tablas. campos e índices. a"re"ando campos o cambiando la definición de los mismos. !stos son2 − =!todo desplazamiento. Estos comandos se combinan junto con las instrucciones empleadas para crear. ordenar. .omandos de )=L SELE.QQ9Y ES X %'&' Q9Y SE 9*>L>V' SQLR SQL es un len"uaje de pro"ramación para bases de datos. filtrar $ extraer datos de la base de datos que est! "estionando. SQL ha avanzado hasta convertirse en un est ndar cu$a utilización radica en tratar bases de datos relacionales.. 3eamos las instrucciones de cada uno de ellos2 . .'3>4D +&)E& (X Especifica la tabla de la cual se van a seleccionar los re"istros. .omandos de ))L . . >4SE&* Se emplea para a#adir datos en la base de datos. El motor de la base de datos =icrosoft Zet ofrece dos m!todos para las tareas con bases de datos. La diferencia entre ellos es que ))L permite crear $ definir nuevas bases de datos. cl usulas. ( sicamente el len"uaje SQL est formado por comandos. actualizar o manipular bases de datos. $ sus orí"enes est n vinculados con las bases de datos relacionales se":n los trabajos de E.E&E seleccionados. Este len"uaje nació a principio de los 1.<. .asta entonces. operadores $ funciones. se basa en el len"uaje de consulta estructurado SQL. − =!todo relacional. siempre con un criterio de selección. 9%)'*E Se usa para modificar valores de campos $ re"istros. )&+% Se emplea para eliminar tablas e índices 'L*E& Se usa para modificar tablas.omandos de SQL SQL ofrece comandos de len"uaje de definición de datos A))LB $ del len"uaje de manipulación de datos A)=LB.odd. . mientras que )=L permite "enerar consultas.* Se usa para consultar re"istros de la base de datos. Especifica las condiciones que deben cumplir los re"istros que sean Se utiliza para separar en "rupo los re"istros que est!n Expresa la condición que debe cumplir cada "rupo. )ELE*E Se utiliza para borrar re"istros de una tabla. campos e índices. se basa en el movimiento por los re"istros de la base de datos. D&+9% (X seleccionados. Se utiliza para ordenar los re"istros seleccionados.

Existen dos tipos de operadores 2 Ló"icos $ relacionales o de comparación.49=%EL <&+= 3>)E+ . +%E&')+&ES )E .+94* S9= ='[ =>4 . )evuelve el valor m s alto de un determinado campo.>W4 ASQLB U UI P PI I UP (E*TEE4 L>OE >4 =enor que =enor o i"ual que =a$or que =a$or o i"ual que >"ual que )istinto de Especifica un intervalo de valores.E&E .L> I / Seleccionar todos los re"istros de una tabla con una condición unida por el operador '4).L> Seleccionar m:tliples campos. − Seleccionar todos los re"istros de una tabla2 SELE. SELE. − − − Seleccionar un determinado re"istro SELE.* 3>)E+.L>U/.L> <&+= 3>)E+ Seleccionar todos los re"istros ordenados por el .>+4ES 'D&ED')'S ASQLB '3D ..+=%'&'.+). )evuelve el n:mero de re"istros de una selección.alcula el promedio de los valores de un campo especificado.+).E&E . SELE.* \ <&+= 3>)E+ +&)E& (X .+). %or :ltimo vamos a ver a continuación una lista con las funciones a"re"adas en el len"uaje SQL. <94.L>.* \ <&+= 3>)E+ T. ' continuación ofrecemos al"unos ejemplos de sentencias SQL para comprender mejor la sintaxis. Se utiliza para especificar re"istros de una base de datos. )evuelve el valor m s bajo de un determinado campo. +& Su utilidad es la de provocar que se cumpla al menos una de las condiciones unidas por este operador.* 3>)E+.* \ <&+= 3>)E+ − − Seleccionar todos los re"istros de una tabla con una condición2 SELE.+). 3>)E+.+). 4+* %rovoca que se cumpla una condición cuando sea no i"ual. )evuelve la suma de todos los valores de un campo específico. &ealiza comparaciones de modelos.L>P/ '4) ..ódi"o SELE.+S ASQLB '4) Su utilidad es la de provocar que se cumplan todas las condiciones unidas por este operador.' continuación vamos a conocer qu! operadores podemos utilizar en las sentencias SQL.+).* \ <&+= 3>)E+ T. +%E&')+&ES LWD>.

lave. -.W)>D+ )EL <+&=9L'&>+ 'LQ9>LE& 'ntes de teclear el códi"o de este formulario. &ealiza un clic con el botón Editor de men:s. .li.lientes as &ecordset )im *abla%elículas as &ecordset @. existen m:ltiples combinaciones.SeeM J I J.li. ?. @.lientes. ?.*ext UP J J *hen *abla.Set<ocus End >f . )eclara estas variables en la parte Deneral. 6. -. pero la sintaxis suele ser siempre la misma.aption 4ame . '#ade estas opciones 2 Establece estas propiedades 2 .>ndex I J. 'ctiva la ventana de pro$ectos $ realiza un doble clic en el formulario 'lquiler.ritical .aption 4ame . . vb.ierra la ventana de códi"o $ realiza doble clic sobre el cuadro de texto . 'ctiva el formulario principal 3ídeo. Selecciona el evento Lost<ocus de la lista de eventos.liB >f *abla.*ext I J J . realiza los si"uientes pasos para insertar la opción del men: correspondiente a la llamada del formulario2 /.od.liHLost <ocusAB >f .od.aption 4ame C'lquiler de %elículas mnu'lquiler CEntre"a mnuEntre"a C)evolución mnu'l)evolución &ealiza estos pasos para teclear el códi"o del formulario 'lquiler2 /.lientes.lientes.liK *abla. 5. 3alA.od. *eclea el si"uiente códi"o2 %rivate Sub . situada en la parte derecha de la ventana de códi"o.od.4o=atch I *rue then =s"(ox J. +ption Explicit )im (ase)e)atos as )atabase )im *abla'lquiler as &ecordset )im *abla.li. &ealiza doble clic sobre el formulario.%or supuesto.liente no existeK.od.li.od.

.Set<ocus >f 4um%el I J J *hen 4um%el.od.li. ' continuación. -.&efresh Else >f . este botón se encar"ar de comprobar que los dos cuadros de texto ten"an contenido.li I J J *hen .Set<ocus End >f End >f End Sub .*ext UP J J *hen *abla%elículas. de no ser así mostraremos un mensaje informando que ese cliente no existe. realiza doble clic sobre el botón 'ceptar $ teclea el si"uiente códi"o2 %rivate Sub 'ceptarH.liB 'lquiler.Set<ocus End >f End >f End Sub .*ext I J J 4um%el. con la diferencia de que aquí comprobamos si existe la película.od.ierra la ventana del códi"o.od.*ext UP JK and 4um%el. si es así se ejecutar una SQL con esos datos.&ecordSource I >SQL 'lquiler. 3alA4um%elB >f *abla%elículas.liente que teclee el usuario se encuentre en la tabla de .licMAB )im >SQL as Strin" >f . vamos a teclear el códi"o para el botón 'ceptar. vb.SeeM J I J.li.omo se puede comprobar en este códi"o realizamos lo mismo que en el anterior .od. *eclea el si"uiente códi"o para el evento Lost<ocus del cuadro de texto 4um%el 2 %rivate Sub 4um%elHLost<ocusAB >f 4um%el.End >f End Sub En este códi"o comprobamos que el .li I J CH3alA.ódi"o del . 1.* \ <&+= 'lquiler T.lientes.*extUP J J *hen >SQL I JSELE.>ndex I J.lave%elK *abla%elículas.4o=atch I *rue then =s"(ox J%elícula no existeK.E&E .od.ritical 4um%el. +bserva como la b:squeda la realizamos mediante el índice que definimos en la tabla.

si no es así se ejecuta el códi"o que est situado en Else.od.licMAB )im >SQL as Strin" >f .*ext UP J J *hen . con lo cual sería incorrecto.li.E&E . es necesario cerrar comillas $ teclear el operador C para informar que lo que viene a continuación pertenece a la misma SQL.li.li I JC 3alA. comprobamos que los cuadros de texto .*ext UPK J and 4um%el.* \ <&+= 'lquiler Selecciona todos los re"istros de la tabla 'lquiler T.od.od.lientesKB Set *abla%elículas I (ase)e)atos. Es necesario colocar las variables fuera del entorno de las comillas.od.mdbKB Set *abla. ?.E&E .li $ 4um%el ten"an valores.li.li sea i"ual al contenido del cuadro de texto .En primer lu"ar declaramos la variable >SQL para formar la sentencia SQL.liB C J '4) 4um%el I JC3alA4um%elB 'lquiler.lientes I (ase)e)atos. %ara finalizar el códi"o de este formulario.* \ <&+= 'lquiler T.liB )onde el campo .li.od.Set<ocus End >f End >f End >f End Sub .+pen&ecordset AJ. realiza los si"uientes pasos 2 /.&ecordSource I >SQL 'lquiler. ?. *eclea el si"uiente códi"o para el evento <ormHLoad del formulario 2 %rivate Sub <ormHLoadAB Set (ase)e)atos I +pen)atabase AJ3ídeo.+pen&ecordset AJ'lquilerKB End Sub El códi"o que hemos tecleado pertenece a la opción Entre"a del men: 'lquiler de películas.li I J J *hen . sino el nombre del cuadro.od. '#ade esta línea al códi"o del botón de comando 'ceptar 2 %rivate Sub 'ceptarH. 9tiliza siempre el operador C para unir variables. El control )ataDrid no hemos de pro"ramarlo $a que los datos los rellenaremos internamente.&efresh Else >f .Set<ocus >f 4um%el I J J *hen 4um%el.+pen&ecordset AJ%elículasKB Set *abla'lquiler I (ase)e)atos.od.od. a continuación.od.od.od.rea&e"istro'lquiler >SQL I JSELE. en caso contrario i"ualaremos a la variabla >SQL la sentencia SQL. veamos el si"nificado de la misma por partes 2 J SELE. de lo contrario no buscaría el valor del cuadro de texto. antes de teclear el cuadro .li I JC 3al A.

9pdate End <unction En este códi"o copiamos el contenido de los cuadros de texto a los campos correspondientes en la tabla.8.?.?. ?. %ulsa sobre el botón Duardar para salvar los cambios realizados.abanillas 4eopatría /5 .od. 'ntes de ejecutar la aplicación.od.?.<ields AJ4um%elKB I 3alA4um%elB *abla'lquiler.8.<ields AJ<ec'lqKB I )ate *abla'lquiler. (arcelona Registro 3 ? .8.8. al campo &ecar"o.rea&e"istro'lquiler AB *abla'lquiler. -.%)TRO AL0U%L*R <unction . a los campos <echa les asi"namos la fecha del día mediante la función )ate. *eclea esta función en la parte Deneral del pro"rama 2 #U$C%&$ CR*AR R*.'dd4eN *abla'lquiler.?.<ields AJ<ec)evKB I )ate *abla'lquiler. (arcelona Registro 2 Lourdes .<ields AJ&ecar"oKB I .liKB I 3alA. (arcelona Registro @ Esteban .<ields AJ. por :ltimo asi"namos el valor . *abla'lquiler. (arcelona . inserta los si"uientes re"istros para la tabla .lientes2 Registro 1 / Ser"io ]rboles Dran de San 'ndr!s ?6 .ern ndez Dran de San 'ndr!s /5 .liB *abla'lquiler.Esta función se encar"ar de crear el re"istro en la tabla 'lquiler a partir de los datos introducidos.arlos '"ut %acífico ?.

ShoN End Sub 'hora $a estamos en disposición de ejecutar la aplicación para probar el formulario 'lquiler. &ealiza estos pasos 2 /.frmB -. 'ctiva el formulario principal A3ídeo.&ealiza los si"uientes pasos para llamar al formulario 'lquiler desde el men: 2 /. -.licMAB 'lquiler. 'bre el men: 'lquiler de %elículas. %ulsa la tecla <5 para iniciar el pro$ecto. 'bre el men: 'lquiler de %elículas $ selecciona la opción Entre"a. Selecciona la opción Entre"a $ teclea el si"uiente códi"o 2 %rivate Sub mnu'lEntre"aH. Se"uidamente aparecer el formulario 2 . ?.

Se"uidamente el )ataDrid adoptar el aspecto con todos sus campos rellenos.'dd4eN *abla'lquiler.duplicado. %rueba a cambiar el cliente $ de película para comprobar el correcto funcionamiento del formulario.liKB I 3alA.?.od. 6. por lo tanto. L>S*')+ )EL . comprobar s que es posible realizarlo. de esta forma no permitiremos al usuario que modifique los valores.<ields AJ4um%elKB I 3alA4um%elB *abla'lquiler.%)TRO AL0U%L*R <unction .od.<ields AJ. $a que el mismo cliente puede tener alquiladas dos copias de la misma película.rea&e"istro'lquiler AB *abla'lquiler. borra su valor $ teclea -. %ues bien. ' continuación te mostramos el listado del códi"o que hace referencia a la opción )evolución. 3e al cuadro de texto 4um%el. %ulsa dos veces 'ceptar. para que esto no ocurra asi"na el valor <alse a la propiedad Enabled del control.<ields AJ<ec)evKB I )ate . @. *e pre"untar s si es correcto tener dos re"istros i"uales.<ields AJ<ec'lqKB I )ate *abla'lquiler. Si pruebas a modificar al"una de las celdas del )ataDrid. de ahí que el pro"rama permita esta opción. %ulsa sobre el botón 'ceptar. el re"istro de la tabla 'lquiler se ha creado autom ticamente.lientes as &ecordset )im *abla%elículas as &ecordset #U$C%&$ CR*AR R*.W)>D+ 'LQ9>LE& +ption Explicit )im(ase)e)atos as )atabasse )im *abla'lquiler as &ecordset )im *abla. *eclea en el códi"o del cliente el valor / $ en el n:mero de película el valor ?.liB *abla'lquiler. ahora )ataDrid mostrar los re"istros que $a constaban m s el re"istro . 5. en este caso sí.

*ext I J J Else )o Thile not *abla'lquiler.*ext I J J 4um%el. 3alA4um%elB.<ieldsAJ&ecar"oKB I dias \-. End >f =ueve'mortizado *abla'lquiler.liB then Exit )o *abla'lquiler.la'lqK *abla'lquiler.=ove4ext End >f Loop End >f 'lquiler.9pdate *abla'lquiler.alcularAB )im dias as >nte"er *abla'lquiler.od.<ieldsAJ<ec'lqKB.li.li.>ndex I J.SeeM JIK. *abla'lquiler.<ieldsAJ4um%elKB UP 3al A4um%elB or *abla'lquiler.9pdate End <unction #U$C%&$ 'OV*R #*C1A +* *$TR*.od.Set<ocus End <uction .od.od. *abla'lquiler.<ieldsAJ<ec)evKBB >f dias P .&efresh .E+< >f *abla'lquiler.<ields AJ&ecar"oKB I .od.liKB UP 3alA.Edit *abla'lquiler.&ecordSource I J J 'lquiler. then *abla'lquiler.<ieldsAJ<ec)evKB I )ate dias I )ate)iff AJdK.<ieldsAJ.*abla'lquiler.liB >f *abla'lquiler.4o=atch I *rue then =s"(ox J 4o tiene películas alquiladas J .A 2 CALCULAR <unction =over<echaEntre"aX. 3alA.5. *abla'lquiler.

liB *abla.lientes.lientes. valA. valA.*ext UP J J and 4um%el.<ieldsAJ&ecar"oKB ^ ?.>ndex I J.15 *abla.lientes.<ieldsAJ'mortizadoKBI H *abla.od.liB >f *abla'lquiler.Edit *abla.lientes.SeeM JIK.=ove4ext End >f Loop End >f End <unction (OT&$ AC*PTAR %rivate Sub 'ceptarH.<ieldsAJ.lientes.la'lqK *abla'lquiler. val A4um%elB.liK *abla.<ieldsAJ'mortizadoKB ^ *abla.lientes.licMAB )im >SQL as Strin" >f .#U$C%&$ 'U*V* A'ORT%-A+O <unction =ueve'mortizadoAB *abla.liKBUP3alA.)elete *abla'lquiler.od.od.lave.9pdate End <uction #U$C%&$ (ORRAR AL0U%L*R <unction (orrar'lquilerAB *abla'lquiler.lientes.<ieldsAJ4um%elKB UP 3al A4um%elB and *abla'lquiler.liB then Exit )o *abla'lquiler.SeeM JIK.E+< >f *abla'lquiler.*ext UP J J then >f +pcion I / then .>ndex I J.od.li.4o=atch I *rue then =s"box J 4o tiene películas alquiladasK Else )o Thile 4ot *abla'lquiler.od.

liHLost<ocusAB >f .+pen&ecordsetAJ.od.TO $U'*RO P*L3CULA .*ext UP J J *hen *abla.Enabled I <alse >SQL I JSELE.>ndex I J.li I JC 3al A.* \ <&+= 'lquiler T.lientesKB Set *abla%elículas I (ase)e)atos.li.od.SeeM JIK.li.+pen&ecordset AJ'lquilerKB End Sub CUA+RO +* T*.ritical . 3alA.&ecordSource I >SQL 'lquiler.od. vb.od.lave.lientes I (ase)e)atos.Set<ocus End >f End >f End Sub #orm/Load %rivate Sub <ormHLoadAB Set (ase)e)atos I +pen)atabaseAJ3ideo.liB Else =over<echaEntre"aX.lientes.liK *abla.E&E .mdbKB Set *abla.liB >f *abla.O CL%*$T* %rivate Sub .TO CO+%.od.lientes.liB C J'4) 4um%elIK C 3alA4um%elB End >f 'lquiler.4o=atch I *rue then =s"(ox J.+pen&ecordsetAJ%eliculasKB Set *abla'lquiler I (ase)e)atos.li I J J then ..alcular >SQLI JSELE.li I JC 3al A.liente no existeK.* \ <&+= 'lquiler T.li.od.Set<ocus >f 4um%el I J J then 4um%el.rea&e"istro'lquiler 'lq.od.od.li.Set<ocus End >f End Sub CUA+RO +* T*.od.&efresh Else >f .lientes.E&E .od.od.*ext I J J .

vb.lientes.Set<ocus End >f End >f End Sub (OT&$ )AL%R %rivate Sub SalirH. ..licAB 'lquiler.lose *abla. 3alA4um%elB >f *abla%eliculas.ShoN +pcion I / End Sub 3eamos cu l es el si"nificado de cada una de las nuevas funciones que hemos incorporado al pro"rama.%rivate Sub 4um%elHLost<ocusAB >f 4um%el.licAB 'lquiler.lave%elK *abla%eliculas.licMAB >f +pcion I .SeeM JIK.ritical 4um%el.then (orrar'lquiler End >f *abla'lquiler..*ext I J J 4um%el.*ext UP J J then *abla%eliculas.>ndex I J.lose 9nload =e End Sub %or ultimo modificaremos el códi"o de las opciones del men: 2 %rivate Sub mnu)evolucionH.ShoN +pcion I End Sub %rivate Sub mnu'lEntre"aH.4o=atch I *rue then =s"(ox J%elícula no existeK ..lose *abla%eliculas.

'mbos campos pertenecer n a la tabla %elículas. ' continuación calculamos los días transcurridos desde la fecha de alquiler hasta la fecha de devolución. Este error lo hemos provocado conscientemente $a que como ejercicio deber s crear dos nuevos campos 2 %recio&ecar"o $ %recio'lquiler. una vez encontrado mueve al campo <ec)ev la fecha del día. pero eres t: quien debe arre"larlo insertando un nuevo botón de comando denominado (orrar %elículas )evueltas.od. mueve al total amortizado Atotal recar"o ^ precio alquilerB.alcularAB Esta función se encar"a de buscar el re"istro de la tabla 'lquiler. Esto no es del todo correcto. Esta propiedad la tienen la ma$oría de los controles de 3isual (asic. )E. sino que al usuario tambi!n le "uste el aspecto del mismo. . *e pre"untar s por qu! el precio de alquiler no lo convertimos en un campo de la tabla alquiler.<94. 9na vez localizado. Las dem s líneas que hemos insertado en el códi"o. puesto que si no el pro"rama sólo serviría para este precio. ' continuación le mostraremos cómo realizarlo en uno de los formularios de esta aplicación. <94. &ealiza doble clic sobre el formulario %elículas.+&'& L' '%L>. . La diferencia de días la calculamos mediante la función )atediff.on este códi"o damos por finalizado el pro"rama.>+4 =ueve'mortizadoAB Esta función es la encar"ada de buscar el cliente que hemos tecleado en el cuadro de texto . pero se trataba de realizar los pasos m s frecuentes para crear una aplicación $ cómo se utilizan las funciones de bases de datos. simplemente son comparaciones de la variable +pcion para averi"uar qu! es lo que debemos hacer. SQL. &ealiza los si"uientes pasos 2 /.>W4 3isual (asic pone a nuestra disposición varios m!todos para decorar una aplicación. Se"uidamente llamamos a la función =ueve'mortizado. se podrían haber a#adido muchas m s opciones. índices. de ahí que el dise#o del mismo cobre tanta importancia a la hora de "enerarlo. &ecuerda que el !xito de un pro"rama no consiste :nicamente en que el códi"o funcione bien. <94. $ se utiliza para dar información acerca del lu"ar donde se encuentra el usuario. en caso de que la variable días sea superior a /. de ahí que la llamamos cuando pulsamos el botón salir.'. Empecemos por uno de los m s sencillos L nos estamos refiriendo a la propiedad *ool*ip*ext.>+4 =over<echaEntre"aX.li.>+4 (orrar'lquilerAB Esta :ltima función es la encar"ada de borrar las películas que han sido devueltas. por supuesto. multiplicamos el n:mero de Adías _ /B por el recar"o diario.

. 5. 1. Ejecuta la aplicación $ abre el formulario %elículas. 6. %asados unos se"undos en la pantalla aparecer 2 Número de Película . Selecciona el cuadro de texto 4um%el ?. 'ctiva la ventana de propiedades $ modifica la propiedad *ool*ip*ext con el si"uiente texto 2 4:mero de %elícula. @. Sit:a el cursos dentro del cuadro de texto 4um%el.az lo mismo con el resto de los cuadros de texto cambiando el contenido de la propiedad *ool*ip*ext.-.