Anda di halaman 1dari 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 GARCA NIETO

BASE DE DATOS PROFESIONAL


Una Aplicacin Completa
En este captulo realizaremos una aplicacin que controla una base de datos, pero en este caso validaremos las entradas de campos en los cuadros de texto, utilizaremos rejillas de introduccin de datos, haremos uso de las sentencias SQL, en definitiva, aprenderemos a realizar una aplicacin donde se ha de controlar todos los posibles errores que pueda provocar un usuario inexperto. Siempre que desarrollamos una aplicacin comercial, se ha de suponer que el usuario no sabr utilizarla, por lo cual puede introducir datos alfanum!ricos en campos que slo 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 $ creacin de tablas con sus claves principales $ la posterior relacin entre ellas. *odo se har desde un entorno de 'ccess -./. posteriormente convirtiendo las bases de datos a una versin anterior para obtenerlo en formato 'ccess 01. La base de datos que vamos a crear tratar sobre la "estin de un videoclub, realizando los si"uientes pasos 2 1. Ejecuta la aplicacin '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 %elculas 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 versin 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 "estin.

,&E'& EL <+&=9L'&>+ %&>4,>%'L Este formulario se encar"ar de las opciones del men: que insertaremos. La aplicacin 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 opcin 4uevo %ro$ecto. -. &ealiza doble clic sobre el si"uiente icono.

?. %ulsa sobre el botn para ver la ventana de pro$ectos. @. %ulsa con el botn derecho sobre <orm/ $ selecciona la opcin 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 opcin '"re"ar formulario =)>. ' continuacin aparecer el si"uiente cuadro de di lo"o 2

&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. ' continuacin realizaremos el men: si"uiendo los si"uientes pasos 2 /. %ulsa sobre el botn Editor de =en:s.

-. &ealiza el si"uiente men:2 ,aption CDestin 4ame mnuDestin C'ltas C=odificar C(orrar C,onsultar C,lientes mnuDe,lientes C'ltas C=odificar C(orrar C,onsultar ESeparador Separador CSalir mnuDeSalir ?. %usa sobre el botn 9na vez dise#ado el men:, ha de tener el si"uiente aspecto 2 mnuDe,li'ltas mnuDe,li=odificar mnuDe,li(orrar mnuDe,li,onsultar mnuDe%e'ltas mnuDe%e=odificar mnuDe%e(orrar mnuDe%e,onsultar

C%elcula mnuDe%elcula

)e momento damos por finalizado el dise#o del men:, m s adelante en este mismo captulo a#adiremos nuevas opciones.

@. Establece las si"uientes propiedades al formulario 2 Objeto =)><orm/ Propiedad ,aption Valor Destin de la base de datos 3deo 4ame 3deo

' continuacin realizaremos el formulario correspondiente a la "estin de la tabla %elculas, hemos de advertir que este formulario lo utilizaremos para cualquiera de las opciones que est n en el interior del men: %elculas, con lo cual nos ahorraremos el tener que realizar un formulario para cada opcin. &ealiza los si"uientes pasos en la creacin del formulario pelculas 2 /. 'bre el men: %ro$ecto. -. Selecciona la opcin '"re"ar <ormulario. ?. &ealiza doble clic sobre el icono 2

@. >nserte los si"uientes controles. %ara el control de pesta#a se ha utilizado 5. Establezca las si"uientes propiedades 2 Objeto <orm/ Label/ LabelLabel? Label@ Label5 *ext/ *ext,ombo/ Propiedad 4ame =)>,hild ,aption ,aption ,aption ,aption ,aption 4ame *ext 4ame *ext 4ame *ext Objeto *ext? Propiedad 4ame *ext Valor %elcula *rue 4F%elicula *tulo Sistema %recio 'lquiler *ema 4um%el A3acoB *tulo A3acoB Sistema A3acoB Valor %re'lq A3acoB

*ext@ SS*ab/

4ame *ext 4ame *abs ,aption

*ema A3acoB <icha%elcula / ,ontrol de pelculas C'ceptar 'ceptar CSalir Salir

,ommand/ ,ommand-

,aption 4ame ,aption 4ame

9na vez hemos terminado de dise#ar el formulario, pasemos a definir las variables que necesitamos para su control. &ealiza los si"uientes pasos 2 /. Efect:a un doble clic sobre el formulario. -. 9na vez en el editor del cdi"o, realiza clic sobre la lista que contiene la palabra <orm. ?. Selecciona de la lista Deneral. 'qu es donde declaramos las variables que vamos a utilizar dentro de este formulario, antes de realizar las declaraciones hemos de insertar una referencia en nuestro cdi"o para informar a 3isual (asic que vamos a utilizar bases de datos. @. 'bra el men: %ro$ecto $ selecciona la opcin &eferencias. Se"uidamente aparecer el si"uiente cuadro de di lo"o2

1. 2. 3.

(usca en la lista la referencia =icrosoft )'+ -.5G ?.5 ,ompatibilit$ Librar$. Selecciona esta opcin $ pulsa sobre el botn ' continuacin teclea el si"uiente cdi"o 2 +ption Explicit )im (ase)e)atos as )atabase )im *abla%elculas as &ecordset )im ErrorEntrada as >nte"er

En la primera lnea declaramos una variable de tipo base de datos $ en la si"uiente otra de tipo &ecordset A*ablaB. La primera nos servir para abrir la base de datos $ la se"unda para abrir la tabla.

4.

*eclea el si"uiente cdi"o para el evento <ormHLoad del formulario. Si nos fijamos, 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.mdbKB Set *abla%elculas I (ase)e)atos.+pen&ecordset AJ%elculasKB Select ,ase +pcion ,ase / %elcula.,aptionIK'lta de %elculasK 'ceptar.,aption IKC'#adirK ,ase %elcula.,aptionIK=odificacin de %elculasK 'ceptar.,aption IKC=odificarK ,ase ? %elcula.,aptionIK(orrado de %elculasK 'ceptar.,aption IKC(orrarrK ,ase @ %elcula.,aptionIK,onsulta de %elculasK 'ceptar.,aption IKC,onsultarK End Select End Sub En la primera lnea, utilizamos la funcin +pen)atabase para abrir la base de datos, a continuacin abrimos la tabla %elculas por medio de la funcin +pen&ecordSet. ,on estas dos funciones $a podemos a#adir, modificar, borrar $ consultar. %or supuesto hace falta teclear cdi"o.

' continuacin evaluamos el valor de la variable +pcion L nos pre"untaremos dnde hemos definido esta variable. )e momento no lo haremos, una vez acabada la pro"ramacin de este formulario, la declararemos a nivel "lobal, dentro de un mdulo. &ecuerda que al principio hemos comentado que este formulario lo utilizaremos para todas las opciones, de ah que se":n el valor de la variable +pcion, cambiamos el valor de la ventana $ del botn.

1. 2.

,erramos la ventana del cdi"o. ' continuacin hemos de pro"ramar los botones de 'ceptar $ Salir. &ealiza doble clic sobre el botn 'ceptar $ teclea el si"uiente cdi"o.

%rivate Sub 'ceptarH,licMAB ,omprobar,ampos >f ErrorEntrada I . *hen Select ,ase +pcion ,ase / *abla%elculas.'dd4eN =over,ampos *abla%elculas.9pdate Limpiar,ajas)e*exto ,ase *abla%elculas.Edit =over,ampos *abla%elculas.9pdate Limpiar,ajas)e*exto ,ase ? *abla%elculas.)elete Limpiar,ajas)e*exto ,ase @ Limpiar,ajas)e*exto End Select ErrorEntrada I . End >f End Sub

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

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

>f *ema.*extI J J ErrorEntradaI/ =s"(ox J&ellene el campo*emaK, vb,ritical *ema.Set<ocus Do *o Error End >f Error2 End <unction En !sta :ltima funcin comprobamos que los cuadros de texto est!n con al":n valor, en caso contrario Ai"ual J JB, asi"namos el valor / a la variable ErrorEntrada, mostramos un mensaje de error $ por :ltimo asi"namos el foco de entrada al cuadro de texto correspondiente. -. 'bre el men: 'rchivo $ selecciona la opcin Duardar %ro$ecto. <ormulario =)> <ormulario %elcula %ro$ecto 3deo.frm Des%el.frm 3deo.vbp

?. 'si"na los si"uientes nombres 2

4o ejecutaremos la aplicacin todava porque no hemos terminado de teclear el cdi"o, si lo hici!ramos es mu$ posible que ocurriera al":n error inesperado. 9no de los errores m s comunes cuando el usuario est utilizando la aplicacin, es la de introducir datos alfanum!ricos en campos num!ricos. ,uando esto ocurre 3isual (asic responde a un mensaje de Error de ,onversin de *ipos. Este error nos obli"a a terminar con la aplicacin , con lo cual no queda mu$ profesional. %ara solventar este problema, realizaremos los si"uientes pasos para los cuadros de texto que tendr n valores num!ricos2 /. ,ierra la ventana del cdi"o $ efect:a doble clic sobre el cuadro de texto 4um%el. -. Selecciona de la lista de eventos la opcin Oe$%ress. ?. *eclea el si"uiente cdi"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. (eep End >f End Sub

El evento Oe$%ress se produce cada vez que pulsamos una tecla dentro del cuadro de texto. En esta funcin comprobamos que la tecla pulsada AOe$ 'sciiB sea car cter, 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. @. &ealizaremos esta misma operacin en el cuadro de texto %recio de 'lquiler. +tro de los problemas que se nos presenta, es la lon"itud de los campos. ,omo $a sabemos, la lon"itud del campo *tulo es de 5. caracteres, en caso de que el usuario tecleara m s de 5., provocara un error2 ,ampo excede de lon"itud. &ealizaremos los si"uientes pasos para solventar este problema2 /. ,ierra la ventana del cdi"o. -. 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. /. /5

Sistema A4o necesita porque es una lista de seleccinB

,ambiando esta propiedad provocamos que los cuadros de texto no admitan m s caracteres de los especificados. &ecuerda siempre controlar estos errores en las aplicaciones. 's se evitar que el pro"rama finalice de una manera inesperada. Siempre que realices una aplicacin, parte de la base que el usuario jam s ha utilizado un ordenador. '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.

+tro de los puntos a tener en cuenta es el orden de introduccin de datos. ,uando se dise#a un formulario, lo m s probable es que se inserten controles a medida que se necesiten, es decir, sin orden al"uno. ,uando se ejecute una aplicacin es posible que el usuario, cuando pulse la tecla *'( para pasar de un campo a otro, se encuentre que no manten"a el orden correcto. %ara solucionar este problema, dispone de una propiedad que contienen la ma$ora de los controles de 3isual (asic, se denomina *ab>ndex A7ndice del *abuladorB.

&ealiza el si"uiente paso 2 /. 'si"na los si"uientes *ab>ndex a los controles del formulario 2 <icha %elcula ASS*abB 4um%el *tulo Sistema %re'lq *ema 'ceptar Salir . / ? @ 5 6 1

-. =odificando esta propiedad conse"uiremos que la tecla tabulador si"a un orden correcto, de paso hacemos m s f cil la entrada de datos al usuario, pero, Qse dispone del ratn para seleccionar qu! cuadro de texto o control se quiere rellenarR. Se puede conse"uir, pero existen muchos usuarios a los que les es m s cmodo desplazarse con el teclado. ?. >ncluso ha$ usuarios que prefieren utilizar E4*E& para pasar de un cuadro a otro en vez de hacerlo con la tecla *'(, con lo cual se obli"ara a pro"ramar dicha tecla. 3eamos un ejemplo. %rivate Sub %re'lqHOe$%ress AOe$ 'scii as >nte"erB >f Oe$'sciiI/? then Sel cdi"o /? es la tecla Enter *tulo.Set<ocus Sasi"namos el foco de entrada al si"uiente cuadro de texto End >f End Sub @. Si se coloca este cdi"o en cada una de los cuadros de texto, previamente cambiando el nombre de las mismas, se conse"uir que funcione la tecla Enter como desplazamiento entre un cuadro de texto $ otro. 5. 'ntes de continuar, "uardaremos de nuevo la aplicacin para salvar los cambios realizados.

%&+('& EL <+&=9L'&>+ %EL7,9L'S

En este apartado comprobaremos que el formulario que hemos creado funcione correctamente, pero antes hemos de llamarlo cuando seleccionemos la opcin del men:. %ara ello realizaremos los si"uientes pasos 2 /. 'ctiva la ventana del Explorador de %ro$ectos. -. &ealiza doble clic sobre el formulario 3deo. ?. 'bre el men: %ro$ecto $ selecciona la opcin '"re"ar mdulo.

@. &ealiza doble clic sobre el icono. 5. *eclea la si"uiente lnea de cdi"o. %ublic +pcion 's >nte"er. &ecuerda que esta es la variable que nos quedaba por definir. Es la variable que utilizamos en el formulario %elculas $ que controlaba el n:mero de opcin.

9tiliza siempre los mdulos para definir las variables o procedimientos que se van a utilizar en todos los formularios del pro$ecto.

6. 1. 8. 0.

Draba el mdulo con el nombre de 3ari3ideo.bas ,ierra el mdulo. 'bre el men: Destin $ selecciona la opcin %elculas. &ealiza un clic sobre la opcin 'ltas $ teclea el si"uiente cdi"o 2 +%,>+4 'L*'S %rivate Sub mnuDe%e'ltasH,licMAB +pcionI/ %elculas.ShoN End Sub

En estas dos lneas informamos que hemos pulsado sobre la opcin de altas A+pcinI/B $ mostramos el formulario mediante la propiedad ShoN. /.. &ealiza el paso 0 pero con los si"uientes cdi"os 2

+%,>+4 =+)><>,'& %rivate Sub mnuDe=odificarH,licMAB +pcionI%elculas.ShoN End Sub +%,>+4 (+&&'& %rivate Sub mnuDe(orrarH,licMAB +pcionI? %elculas.ShoN End Sub +%,>+4 ,+4S9L*'& %rivate Sub mnuDe%e,onsultarH,licMAB +pcionI@ %elculas.ShoN End Sub ,opia estos cdi"os para las opciones del men: ,lientes, cambiando el nombre del formularioL en vez de %elculas, ,lientes. +bserva cmo el valor de la variable +pcion va cambiando se":n la opcin del men: seleccionada. 'ntes de ejecutar la aplicacin, realiza estos pasos2

/. Selecciona el formulario principal 3deol -. 'ctiva ahora el formulario %elculas $ realiza doble clic sobre el formularioE ?. '#ade las si"uientes lneas 2 %rivate Sub <ormHLoadAB Set (ase)e)atos I +pen)atabase AJ3deo.mdbKB Set *abla%elculas I(ase)e)atos.+pen&ecordsetAJ%elculasKB +pcionI/ Select ,ase +pcion ,ase / %elculas.,aption I J'lta de pelculas J 'ceptar.,aption I JC'#adirK ,ase %elculas.,aption I J =odificacin de pelculas J 'ceptar.,aption I JC=odificarK ,ase ? %elculas.,aption I J(orrado de pelculasK 'ceptar.,aption I JC(orrarK ,ase @ %elculas.,aption I J,onsulta de pelculasK 'ceptar.,aption I JC,onsultarK End Select Sistema.'dd>tem J3;SK Sistema.'dd>tem J (E*'K Sistema.'dd>tem J Super 8K End Sub &ealiza los si"uientes pasos para ejecutar la aplicacin 2 /. Establece la propiedad TindoNState del formulario 3ideo a =aximized. -. %ulsa la tecla <5 para ejecutar el pro"rama. ?. 'bre el men: Destin $ selecciona la opcin %elculaG 'ltas. 9na vez tenemos el formulario en pantalla, podemos comprobar los diferentes controles de error que controlamos mediante cdi"o. >ntenta teclear en el cuadro de texto 4F %elcula, caracteres alfab!ticos, observa como el pro"rama emite un beep.

@. )eja un cuadro de texto en blanco $ pulsa sobre el botn '#adir +bserva como el pro"rama manda un mensaje advirti!ndonos de error. 5. >ntroduce los si"uientes ttulos de pelcula 2

Registro 1 4F %elcula2 *tulo2 Sistema2 %recio 'lq.2 *ema2 Registro 3 4F %elcula2 *tulo2 Sistema2 %recio 'lq.2 *ema2 Registro ! 4F %elcula2 *tulo2 Sistema2 %recio 'lq.2 *ema2 5 SpaNn (E*' ? *hriller ? =>=>, 3;S @ *error / 4o ha$ salida 3;S ? >ntri"a

Registro 2 4F %elcula2 *tulo2 Sistema2 %recio 'lq.2 *ema2 Registro 4F %elcula2 *tulo2 Sistema2 %recio 'lq.2 *ema2 Registro " 4F %elcula2 *tulo2 Sistema2 %recio 'lq.2 *ema2 6 La %rofeca Super 8 *error @ 4irvana (E*' 5 ,iencia <iccin 'lien 3;S @ *error

9na vez introducidas las pelculas, abandona el pro"rama sin ejecutar las dem s opciones, $a que a:n nos queda por realizan un paso m s. Este paso consiste en que el usuario teclee el n:mero de pelcula que quiere buscar $ nosotros realizaremos dicha b:squeda. %ara ello, realiza los si"uientes pasos 2 /. Sal de la aplicacin. -. &ealiza doble clic sobre el cuadro de texto 4um%el. ?. Selecciona el evento Lost<ocus. @. *eclea el si"uiente cdi"o 2

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

&E'L>V'& EL <+&=9L'&>+ ,L>E4*ES Las mismas funciones que hemos realizado en el formulario anterior, las tendremos que realizar en este, con la diferencia que son distintos campos. En realidad siempre que ten"amos que realizar al"una "estin de un fichero realizaremos los mismos pasos. Sin embar"o, ha$ aplicaciones de "ran tama#o que requieren muchos m s controles que los explicados aqu. )e todas las maneras, aprendiendo estas t!cnicas, $a podremos realizar funciones para controlar posibles errores de usuarios.

'ntes, realizaremos los pasos para dise#ar el formulario 2 /. 'bre el men: %ro$ecto $ selecciona la opcin '"re"ar <ormulario. -. &ealiza doble clic sobre el si"uiente icono 2

?. )ise#a el formulario de la p "ina si"uiente con las propiedades que se muestran a continuacin 2

Objeto <orm/ Label/ LabelLabel? Label@ Label5 Label6 *ext/

Propiedad 4ame =)>,hild ,aption ,aption ,aption ,aption ,aption ,aption 4ame *ext =axLen"th

Valor ,liente *rue ,di"o ,liente 4ombre )ireccin ,di"o %ostal %rovincia 'mortizado ,od,li A3acoB 5 4om,li A3acoB 5.

*ext-

4ame *ext =axLen"th

Objeto *ext?

Propiedad 4ame *ext =axLen"th

Valor )ireccin A3acoB 6. ,od%os A3acoB 5 %rovincia A3acoB -5 'mortizado A3acoB /<icha,liente / ,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/ ,ommand-

,aption 4ame ,aption 4ame

'ntes de continuar no olvidemos poner la propiedad *ab>ndex de cada control en el orden correcto. 'hora el formulario ha de presentar el si"uiente aspecto2

9na vez terminado el dise#o del formulario, tendramos que teclear el cdi"o necesario tanto para el formulario como para el men:. 'ntes de teclear el cdi"o, "raba este formulario con el nombre ,lientes.<rm

Es aconsejable que intentes teclear el cdi"o de este formulario sin fijarse en la solucin que a continuacin ofrecemos. )e esta manera podremos ver los fallos que cometes Aen caso de tenerlosB. 4o te limites slo a copiar el cdi"o, intenta ver el porqu! de las funciones que se utilizan. L>S*')+ ,W)>D+ )EL <+&=9L'&>+ ,L>E4*ES Deneral +ption Explicit )im (ase)e)atos as )atabase )im *abla,lientes as &ecordset )im ErrorEntrada as >nte"er <unciones <unction ,ar"ar,amposAB ,od,li.*ext I StrA*abla,lientes.<ieldsAJ,od,liKBB 4om,li.*ext I *abla,lientes.<ieldsAJ4om,liKB )ireccin.*ext I *abla,lientes.<ieldsAJ)ir,liKB ,od%os.*ext I *abla,lientes.<ieldsAJ,od%osKB %rovincia.*ext I *abla,lientes.<ieldsAJ%rovinciaKB 'mortizado.*ext I StrA*abla,lientes.<iledsAJ'mortizadoKBB End <unction <unction =over,amposAB *abla,lientes.<ieldsAJ,od,liKB I 3alA,od,li.*extB *abla,lientes.<ieldsAJ4om,liKB I 4om,li.*ext *abla,lientes.<ieldsAJ)ir,liKB I )ireccin.*ext *abla,lientes.<ieldsAJ,od%osKB I ,od%os.*ext *abla,lientes.<ieldsAJ%rovinciaKB I %rovincia.*ext *abla,lientes.<iledsAJ'mortizadoKB I 3al A'mortizado.*extB End <unction

<unction Limpiar,ajas)e*extoAB

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

>f %rovincia.*ext I J J *hen ErrorEntrada I /

=s"(ox J&ellene el campo ,di"o de ,lienteK, vb,ritical %rovincia.Set<ocus Do *o Error End >f >f 'mortizado.*ext I J J *hen ErrorEntrada I / =s"(ox J&ellene el campo ,di"o de ,lienteK, vb,ritical 'mortizado.Set<ocus Do *o Error End >f Error2 End <unction (OT&$ AC*PTAR %rivate SubH'ceptarH,licMAB ,omprobar,ampos >f ErrorEntrada I . then Select ,ase +pcion ,ase / *abla,lientes.'dd4eN =over,ampos *abla,lientes.9pdate Limpiar,ajas)e*exto ,ase *abla,lientes.Edit =over,ampos *abla,lientes.9pdate Limpiar,ajas)e*exto ,ase ? *abla,lientes.)elete Limpiar,ajas)e*exto ,ase @ Limpiar,ajas)e*exto End Select ,od,li.Set<ocus Else ErrorEntrada I . End >f End Sub CUA+RO +* T*,TO A'ORT%-A+O %rivate Sub 'mortizadoHOe$%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 . (eep End >f End Sub CUA+RO +* T*,TO C&+%.O +* CL%*$T* %rivate Sub ,od,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 ,od,liHLost<ocusAB >f +pcion I - or +pcion I ? or +pcion I @ then >f ,od,li.*ext UP J J *hen *abla,lientes.>ndex I J,lave,liK *abla,lientes.SeeM J I J , 3alA,od,liB >f *abla,lientes.4o=atch I *rue then =s"(ox J,liente no existeK, vb,ritical ,od,li.*ext I J J ,od,li.Set<ocus Else ,ar"ar,ampos End >f End >f End >f End Sub CUA+RO +* T*,TO C&+%.O PO)TAL %rivate Sub ,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 . (eep End >f End Sub *V*$TO #OR'/LOA+ +*L #OR'ULAR%O %rivate Sub <ormHLoad

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

,&E'& L' *'(L' X <+&=9L'&>+ 'LQ9>LE&. En este apartado crearemos una tabla en 'ccess que se encar"ar pelculas que est n alquiladas $ el socio que las ha alquilado. /. ,rea la si"uiente tabla en 'ccess dentro de la base de datos 3deo 2 *'(L' 'LQ9>LE& ,'=%+ 4um%el ,od,li <ec'lq <ec)ev &ecar"o 74)>,ES 4ombre del ndice ,ampo ,ampo ,la'lq 4um%el ,od,li *>%+ 4um!rico 4um!rico <echa G ;ora <echa G ;ora 4um!rico L+4D>*9) Entero Lar"o Entero Lar"o <echa ,orta <echa ,orta Entero Lar"o de controlar las

-. Draba la tabla con el nombre 'lquiler $ cierra la aplicacin 'ccess. ?. 3uelve a 3isual (asic, abre el men: %ro$ecto $ selecciona '"re"ar <ormulario. @. Selecciona el icono <ormulario $ pulsa sobre el botn 'brir. 5. )ise#a los si"uientes controles $ asi"na las propiedades que se encuentran debajo de esta fi"ura 2

Objeto <orm/

Propiedad ,aption 4ame =)>,hild

Valor 'lquiler de 3deos 'lquiler *rue 'lquiler de %elculas /8, 4e"rita ,di"o ,liente 4:mero %elcula ,od,li A3acoB 5 4um%el A3acoB 5 'lquiler 3deo.mdb 'lquiler <alse 'lq 'lquiler 'ceptar C'ceptar Salir CSalir

Label/ LabelLabel? *ext/

,aption <ont ,aption ,aption 4ame *ext =axLen"th

*ext-

4ame *ext =axLen"th

)ata/

4ame )atabase4ame &ecordSource 3isible

)ataDrid/ ,ommand/ ,ommand-

4ame )ataSource 4ame ,aption 4ame ,aption

En la propiedad )atabase4ame del control )ata/, se ha de asi"nar el directorio $ nombre de donde se encuentra la base de datos en tu ordenador. 9na vez realizado el formulario "r balo con el nombre 'lquiler.frm.

%&E%'&'& EL )'*'D&>) %'&' L' E4*&')' )E )'*+S

En el apartado anterior, estableciamos las propiedades del )ataDrid. ' la propiedad )ataSource le asi"namos el control )ata, que !ste a su vez tiene asi"nada la tabla 'lquiler, por lo tanto este )ataDrid se rellenar con los re"istros que forman esta tabla. &ealiza los si"uientes pasos para confi"urar el )ataDrid 2 /. %ulsa con el botn derecho sobre )ataDrid. -. Selecciona la opcin &ecuperar campos 'hora )ataDrid tendr el si"uiente aspecto 2

+bserva cmo ahora el )ataDrid tiene los nombres de los campos en su interior. El :nico problema es que el ttulo de las columnas no es el adecuado, para solucionar este problema hemos de acceder al cuadro de propiedades de este control. =ediante este cuadro podemos cambiar el ancho de las columnas, ttulos, color, etc. ?. &ealiza clic con el botn derecho sobre )ataDrid. @. Selecciona la opcin %ropiedades. '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 ,aption se refiere al ttulo que aparecer en la cabecera del )ataDrid. Las opciones de cajas de chequeo que se encuentran a"rupadas en la parte izquierda del cuadro, permiten que el )ataDrid se utilice para dar re"istros de alta, baja o modificar A'lloN'dd4eN, 'lloN)elete $ 'lloN9p)ateB. Las opciones de la derecha hacen referencia al alto, ancho, apariencia, etc., del )ataDrid. 5. 'ctiva las opciones 'lloN'dd4eN $ 'lloN9p)ate.

6. *eclea en la propiedad ,aption el si"uiente texto 2 'lquiler de %elculas. 1. %ulsa sobre la pesta#a de ,olumnas. 'hora aparecer n las si"uientes opciones 2

3eamos el si"nificado de cada una de estas opciones 2 ,+L9=4'2 Esta lista nos muestra todas las columnas disponibles en el )ataDrid Auna por campo de la tablaB. Las dem s propiedades har n efecto sobre la columna que est! seleccionada en esta opcin. ,'%*>+4 2 ;ace referencia al ttulo de la columna que est! activa en la opcin ,olumna. )'*'<>EL)2 Especifica a qu! campo de la base de datos har referencia esta columna. 8. Establece las si"uientes propiedades para cada una de las columnas 2 ,olumn. A4um%elB ,aption2 )ata<ield2 ,olumn/A,od,liB ,aption2 )ata<ield ,olumn-A<ec'lqB ,aption )ata<ield ,olumn? ,aption )ata<ield ,olumn@ ,aption )ata<ield &ecar"o &ecar"o <echa )evolucin <ec'lq <echa 'lquiler <ec'lq ,d.,liente ,od,li 4F.%elcula 4um%el

0. &ealiza doble clic sobre la pesta#a )ise#o. ' continuacin 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 lista ,olumn A,olumnaB nos permite seleccionar la columna a la cual queremos cambiar las propiedades. La opcin 'l"i"nment permite especificar la justificacin para el contenido de la celda. La opcin Tidth establece el ancho para cada columna. Las opciones de tipo casilla de seleccin m s importantes son 2 LocMed 2 (loquea la columna, es decir, no permite teclear su contenido. 'lloNSizin" 2 %ermite cambiar el tama#o de la columna en tiempo de ejecucin. 3isible 2 =uestra u oculta la columna. (uttton 2 <uerza que la columna dispon"a de un botn de lista desple"able. /.. Establece las si"uientes propiedades para nuestras columnas 2 ,olumna. LocMed2 'lloNSizin"2 3isible2 Trap*ext2 (utton2 ,olumnaLocMed2 'lloNSizin"2 3isible2 Trap*ext2 (utton2 =arcada 4o =arcada =arcada 4o =arcada 4o =arcada =arcada 4o =arcada =arcada 4o =arcada 4o =arcada ,olumna/ LocMed2 'lloNSizin"2 3isible2 Trap*ext2 (utton2 ,olumna? LocMed2 'lloNSizin"2 3isible2 Trap*ext2 (utton2 =arcada 4o =arcada =arcada 4o =arcada 4o =arcada =arcada 4o =arcada =arcada 4o =arcada 4o =arcada

,olumna@ LocMed2 'lloNSizin"2 3isible2 Trap*ext2 (utton2 =arcada 4o =arcada =arcada 4o =arcada 4o =arcada

//. %ulse sobre el botn 'ceptar. ' continuacin cambiaremos el ancho de las columnas, es cierto que podramos haberlo realizado mediante las propiedades, pero es aconsejable hacerlo se":n es si"uiente m!todo. /. Efect:a doble clic con el botn derecho sobre el )ataDrid. -. Selecciona la opcin Edicin. ?. En estos momentos el )ataDrid se encuentra en modo edicin, con lo cual nos permite modificar los anchos. @. Sit:a el puntero del ratn en la lnea que separa la primera columna de la se"unda. El puntero adoptar el si"uiente aspecto 5. &ealiza un clic con el botn izquierdo $ sin soltar, arrastre el ratn hacia la derecha. 9na vez ten"amos el tama#o deseado soltaremos el ratn. ,on estos pasos hemos terminado el dise#o del )ataDrid. 3eamos ahora cu l va a ser el funcionamiento de este formulario. ,uando le llamemos, lo primero que haremos ser pedir el cliente $ el n:mero de la pelcula que vamos a alquilar, una vez establecidos estos dos campos, ejecutaremos una instruccin SQL para seleccionar las posibles pelculas alquiladas que tuviera este cliente, en caso de no tener nin"una, podremos teclear los dem s datos, de esta manera daremos de alta el re"istro. 'ntes de pasar a teclear el cdi"o, lee el apartado que ofrecemos a continuacin en caso de no saber qu! son las sentencias SQL.

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

' continuacin vamos a conocer qu! operadores podemos utilizar en las sentencias SQL. Existen dos tipos de operadores 2 L"icos $ relacionales o de comparacin. +%E&')+&ES LWD>,+S ASQLB '4) Su utilidad es la de provocar que se cumplan todas las condiciones unidas por este operador. +& Su utilidad es la de provocar que se cumpla al menos una de las condiciones unidas por este operador. 4+* %rovoca que se cumpla una condicin cuando sea no i"ual. +%E&')+&ES )E ,+=%'&',>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. &ealiza comparaciones de modelos. Se utiliza para especificar re"istros de una base de datos.

%or :ltimo vamos a ver a continuacin una lista con las funciones a"re"adas en el len"uaje SQL. <94,>+4ES 'D&ED')'S ASQLB '3D ,+94* S9= ='[ =>4 ,alcula el promedio de los valores de un campo especificado. )evuelve el n:mero de re"istros de una seleccin. )evuelve la suma de todos los valores de un campo especfico. )evuelve el valor m s alto de un determinado campo. )evuelve el valor m s bajo de un determinado campo.

' continuacin ofrecemos al"unos ejemplos de sentencias SQL para comprender mejor la sintaxis. Seleccionar todos los re"istros de una tabla2 SELE,* \ <&+= 3>)E+

Seleccionar todos los re"istros de una tabla con una condicin2 SELE,* \ <&+= 3>)E+ T;E&E ,+),L> I /
Seleccionar todos los re"istros de una tabla con una condicin unida por el operador '4).

SELE,* \ <&+= 3>)E+ T;E&E ,+),L>P/ '4) ,+),L>U/. Seleccionar un determinado re"istro SELE,* 3>)E+.,+),L> <&+= 3>)E+ Seleccionar todos los re"istros ordenados por el ,di"o SELE,* \ <&+= 3>)E+ +&)E& (X ,+),L> Seleccionar m:tliples campos. SELE,* 3>)E+.,+),L>, 3>)E+.49=%EL <&+= 3>)E+

%or supuesto, existen m:ltiples combinaciones, pero la sintaxis suele ser siempre la misma. ,W)>D+ )EL <+&=9L'&>+ 'LQ9>LE& 'ntes de teclear el cdi"o de este formulario, realiza los si"uientes pasos para insertar la opcin del men: correspondiente a la llamada del formulario2 /. -. ?. @. 'ctiva el formulario principal 3deo. &ealiza un clic con el botn Editor de men:s. '#ade estas opciones 2 Establece estas propiedades 2 ,aption 4ame ,aption 4ame ,aption 4ame C'lquiler de %elculas mnu'lquiler CEntre"a mnuEntre"a C)evolucin mnu'l)evolucin

&ealiza estos pasos para teclear el cdi"o del formulario 'lquiler2 /. 'ctiva la ventana de pro$ectos $ realiza un doble clic en el formulario 'lquiler. -. &ealiza doble clic sobre el formulario. ?. )eclara estas variables en la parte Deneral. +ption Explicit )im (ase)e)atos as )atabase )im *abla'lquiler as &ecordset )im *abla,lientes as &ecordset )im *abla%elculas as &ecordset @. ,ierra la ventana de cdi"o $ realiza doble clic sobre el cuadro de texto ,od,li. 5. Selecciona el evento Lost<ocus de la lista de eventos, situada en la parte derecha de la ventana de cdi"o. 6. *eclea el si"uiente cdi"o2 %rivate Sub ,od,liHLost <ocusAB >f ,od,li.*ext UP J J *hen *abla,lientes.>ndex I J,lave,liK *abla,lientes.SeeM J I J, 3alA,od,liB >f *abla,lientes.4o=atch I *rue then =s"(ox J,liente no existeK, vb,ritical ,od,li.*ext I J J ,od,li.Set<ocus End >f

End >f End Sub En este cdi"o comprobamos que el ,di"o del ,liente que teclee el usuario se encuentre en la tabla de ,lientes, de no ser as mostraremos un mensaje informando que ese cliente no existe. +bserva como la b:squeda la realizamos mediante el ndice que definimos en la tabla.

1.

*eclea el si"uiente cdi"o para el evento Lost<ocus del cuadro de texto 4um%el 2 %rivate Sub 4um%elHLost<ocusAB >f 4um%el.*ext UP J J *hen *abla%elculas.>ndex I J,lave%elK *abla%elculas.SeeM J I J, 3alA4um%elB >f *abla%elculas.4o=atch I *rue then =s"(ox J%elcula no existeK, vb,ritical 4um%el.*ext I J J 4um%el.Set<ocus End >f End >f End Sub

,omo se puede comprobar en este cdi"o realizamos lo mismo que en el anterior , con la diferencia de que aqu comprobamos si existe la pelcula. ' continuacin, vamos a teclear el cdi"o para el botn 'ceptar, este botn se encar"ar de comprobar que los dos cuadros de texto ten"an contenido, si es as se ejecutar una SQL con esos datos. -. ,ierra la ventana del cdi"o, realiza doble clic sobre el botn 'ceptar $ teclea el si"uiente cdi"o2 %rivate Sub 'ceptarH,licMAB )im >SQL as Strin" >f ,od,li.*ext UP JK and 4um%el.*extUP J J *hen >SQL I JSELE,* \ <&+= 'lquiler T;E&E ,od,li I J CH3alA,od,liB 'lquiler.&ecordSource I >SQL 'lquiler.&efresh Else >f ,od,li I J J *hen ,od,li.Set<ocus >f 4um%el I J J *hen 4um%el.Set<ocus End >f End >f End Sub

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

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

Registro 3 ? ,arlos '"ut %acfico ?.8.?. (arcelona

Registro @ Esteban ;ern ndez Dran de San 'ndr!s /5 .8.?. (arcelona

&ealiza los si"uientes pasos para llamar al formulario 'lquiler desde el men: 2 /. 'ctiva el formulario principal A3deo.frmB -. 'bre el men: 'lquiler de %elculas. ?. Selecciona la opcin Entre"a $ teclea el si"uiente cdi"o 2 %rivate Sub mnu'lEntre"aH,licMAB 'lquiler.ShoN End Sub 'hora $a estamos en disposicin de ejecutar la aplicacin para probar el formulario 'lquiler. &ealiza estos pasos 2 /. %ulsa la tecla <5 para iniciar el pro$ecto. -. 'bre el men: 'lquiler de %elculas $ selecciona la opcin Entre"a. Se"uidamente aparecer el formulario 2

?. *eclea en el cdi"o del cliente el valor / $ en el n:mero de pelcula el valor ?. @. %ulsa sobre el botn 'ceptar. Se"uidamente el )ataDrid adoptar el aspecto con todos sus campos rellenos, por lo tanto, el re"istro de la tabla 'lquiler se ha creado autom ticamente. Si pruebas a modificar al"una de las celdas del )ataDrid, comprobar s que es posible realizarlo, para que esto no ocurra asi"na el valor <alse a la propiedad Enabled del control, de esta forma no permitiremos al usuario que modifique los valores.

5. 3e al cuadro de texto 4um%el, borra su valor $ teclea -. 6. %ulsa dos veces 'ceptar, ahora )ataDrid mostrar los re"istros que $a constaban m s el re"istro - duplicado. *e pre"untar s si es correcto tener dos re"istros i"uales. %ues bien, en este caso s, $a que el mismo cliente puede tener alquiladas dos copias de la misma pelcula, de ah que el pro"rama permita esta opcin. %rueba a cambiar el cliente $ de pelcula para comprobar el correcto funcionamiento del formulario. ' continuacin te mostramos el listado del cdi"o que hace referencia a la opcin )evolucin. L>S*')+ )EL ,W)>D+ 'LQ9>LE& +ption Explicit )im(ase)e)atos as )atabasse )im *abla'lquiler as &ecordset )im *abla,lientes as &ecordset )im *abla%elculas as &ecordset #U$C%&$ CR*AR R*.%)TRO AL0U%L*R <unction ,rea&e"istro'lquiler AB *abla'lquiler.'dd4eN *abla'lquiler.<ields AJ,od,liKB I 3alA,od,liB *abla'lquiler.<ields AJ4um%elKB I 3alA4um%elB *abla'lquiler.<ields AJ<ec'lqKB I )ate *abla'lquiler.<ields AJ<ec)evKB I )ate

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

#U$C%&$ 'U*V* A'ORT%-A+O <unction =ueve'mortizadoAB *abla,lientes.>ndex I J,lave,liK *abla,lientes.SeeM JIK, valA,od,liB *abla,lientes.Edit *abla,lientes.<ieldsAJ'mortizadoKBI H *abla,lientes.<ieldsAJ'mortizadoKB ^ *abla,lientes.<ieldsAJ&ecar"oKB ^ ?,15 *abla,lientes.9pdate End <uction

#U$C%&$ (ORRAR AL0U%L*R <unction (orrar'lquilerAB *abla'lquiler.>ndex I J,la'lqK *abla'lquiler.SeeM JIK, val A4um%elB, valA,od,liB >f *abla'lquiler.4o=atch I *rue then =s"box J 4o tiene pelculas alquiladasK Else )o Thile 4ot *abla'lquiler.E+< >f *abla'lquiler.<ieldsAJ4um%elKB UP 3al A4um%elB and *abla'lquiler.<ieldsAJ,od,liKBUP3alA,od,liB then Exit )o *abla'lquiler.)elete *abla'lquiler.=ove4ext End >f Loop End >f End <unction (OT&$ AC*PTAR %rivate Sub 'ceptarH,licMAB )im >SQL as Strin" >f ,od,li.*ext UP J J and 4um%el.*ext UP J J then >f +pcion I / then

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

%rivate Sub 4um%elHLost<ocusAB >f 4um%el.*ext UP J J then *abla%eliculas.>ndex I J,lave%elK *abla%eliculas.SeeM JIK, 3alA4um%elB >f *abla%eliculas.4o=atch I *rue then =s"(ox J%elcula no existeK , vb,ritical 4um%el.*ext I J J 4um%el.Set<ocus End >f End >f End Sub

(OT&$ )AL%R %rivate Sub SalirH,licMAB >f +pcion I - then (orrar'lquiler End >f *abla'lquiler.,lose *abla,lientes.,lose *abla%eliculas.,lose 9nload =e End Sub %or ultimo modificaremos el cdi"o de las opciones del men: 2 %rivate Sub mnu)evolucionH,licAB 'lquiler.ShoN +pcion I End Sub %rivate Sub mnu'lEntre"aH,licAB 'lquiler.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.

<94,>+4 =over<echaEntre"aX,alcularAB Esta funcin se encar"a de buscar el re"istro de la tabla 'lquiler, una vez encontrado mueve al campo <ec)ev la fecha del da. ' continuacin calculamos los das transcurridos desde la fecha de alquiler hasta la fecha de devolucin, en caso de que la variable das sea superior a /, multiplicamos el n:mero de Adas _ /B por el recar"o diario. La diferencia de das la calculamos mediante la funcin )atediff. Se"uidamente llamamos a la funcin =ueve'mortizado. <94,>+4 =ueve'mortizadoAB Esta funcin es la encar"ada de buscar el cliente que hemos tecleado en el cuadro de texto ,od,li. 9na vez localizado, mueve al total amortizado Atotal recar"o ^ precio alquilerB. *e pre"untar s por qu! el precio de alquiler no lo convertimos en un campo de la tabla alquiler, puesto que si no el pro"rama slo servira para este precio. Este error lo hemos provocado conscientemente $a que como ejercicio deber s crear dos nuevos campos 2 %recio&ecar"o $ %recio'lquiler. 'mbos campos pertenecer n a la tabla %elculas. <94,>+4 (orrar'lquilerAB Esta :ltima funcin es la encar"ada de borrar las pelculas que han sido devueltas, de ah que la llamamos cuando pulsamos el botn salir. Esto no es del todo correcto, pero eres t: quien debe arre"larlo insertando un nuevo botn de comando denominado (orrar %elculas )evueltas. Las dem s lneas que hemos insertado en el cdi"o, simplemente son comparaciones de la variable +pcion para averi"uar qu! es lo que debemos hacer. ,on este cdi"o damos por finalizado el pro"rama, por supuesto, se podran haber a#adido muchas m s opciones, pero se trataba de realizar los pasos m s frecuentes para crear una aplicacin $ cmo se utilizan las funciones de bases de datos, ndices, SQL. &ecuerda que el !xito de un pro"rama no consiste :nicamente en que el cdi"o funcione bien, sino que al usuario tambi!n le "uste el aspecto del mismo, de ah que el dise#o del mismo cobre tanta importancia a la hora de "enerarlo.

)E,+&'& L' '%L>,',>W4

3isual (asic pone a nuestra disposicin varios m!todos para decorar una aplicacin. Empecemos por uno de los m s sencillos L nos estamos refiriendo a la propiedad *ool*ip*ext. Esta propiedad la tienen la ma$ora de los controles de 3isual (asic, $ se utiliza para dar informacin acerca del lu"ar donde se encuentra el usuario. ' continuacin le mostraremos cmo realizarlo en uno de los formularios de esta aplicacin. &ealiza los si"uientes pasos 2 /. &ealiza doble clic sobre el formulario %elculas.

-. 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 %elcula. @. ;az lo mismo con el resto de los cuadros de texto cambiando el contenido de la propiedad *ool*ip*ext. 5. Ejecuta la aplicacin $ abre el formulario %elculas. 6. Sit:a el cursos dentro del cuadro de texto 4um%el. 1. %asados unos se"undos en la pantalla aparecer 2

Nmero de Pelcula

Anda mungkin juga menyukai