Вы находитесь на странице: 1из 28

Curso Visual Basic Prctico Entrega N 1

5 de Octubre de 1998 Autor: Mario Rosas Len Para: Web del Programador Introduccin:

Este curso pretende, mediante un ejemplo, ensear a los usuarios poco avanzados de V.B. a realizar un programa completo, desde el diseo de los ormularios !asta el diseo de la "ase de datos. #e utilizar$ VB%, aun&ue si vuestra versin de V.B. es distinta no !a"r$ pro"lema, "ueno si, puede &ue algunas cosas est'n en otro sitio o no e(istan en esa versin pero son cosas &ue pueden pasar. En cada una de las entregas se incluir$ el cdigo uente del programa !asta ese momento. El o"jetivo no es &ue el usuario copie ) modi i&ue el uente &ue le mando sino &ue, siguiendo las instrucciones &ue a&u* se detallan, realice su propia visin del pro"lema e improvise seg+n sus gustos ), por &ue no, sus necesidades. El programa &ue vamos a realizar es un organizador de discos, cintas, videos, li"ros, juegos, etc... desde la "ase de datos !asta los ormularios. Va a ser un programa mu) "$sico, aadir, mantenimiento e imprimir, pero una de las cosas m$s importantes en este tipo de programas es la est'tica ) la acilidad de uso. ,o, por mi parte, &uiero omentar esto )a &ue si a mi me o recen dos programas &ue !acen lo mismo ) al mismo precio pre iero el &ue sea m$s -"onito ) $cil-.
El programa:

.omo )a dije antes, el programa ser$ un organizador multimedia. .onstar$ de / ormularios &ue ser$n: Men+ 0rincipal, Aadir Entradas, Mantenimiento de 1atos, Buscar, Mostrar B+s&ueda e 2mprimir. .omo )a !e dic!o es mu) "$sico, la idea es &ue vosotros lo ampli'is.
Entrega N 1: Creacin del proyecto y el primer formulario, El en! Principal"

0rimero crear el nuevo pro)ecto. ,o os recomiendo crear primero un directorio donde ir'is guardando el pro)ecto, los ormularios, mdulos, "ase de datos, etc. 3na vez teng$is el directorio 4p.e. c:5arc!ivos de programa56rgamul57 empezamos con V.B. Al arrancar V.B. nos pregunta &ue tipo de pro)ecto &ueremos crear nuevo, a&u* seleccionamos E(e Est$ndar. 3na vez pulsado esto tenemos el nuevo pro)ecto ) nuestro primer ormulario. El siguiente paso es poner las propiedades del pro)ecto: 0ulsamos en 0ro)ecto, 0ropiedades de 0ro)ecto 8. 0onemos el nom"re de nuestro pro)ecto ) la descripcin del mismo. 49por &u' !acer esto:, para &ue al crear el ejecuta"le se inclu)a tam"i'n esta in ormacin, la cual ser$ visi"le al pulsar en las propiedades del arc!ivo7. ;odav*a &ueda algo m$s &ue !acer para poder empezar &ue es con igurar las opciones de V.B.: <erramientas, 6pciones. A&u* pulsamos en Entorno ) en =uardar los .am"ios 49por &u':, para &ue antes de pro"ar el programa se guarde autom$ticamente ) as*, en el caso de &ue el programa "lo&uee la m$&uina o no responda V.B. tengamos guardada la copia del cdigo uente7.

,a estamos preparados. La verdad es &ue esto) suponiendo algunas cosas 4como &ue sa"'is las instrucciones de V.B., como los "ucles, condicionales, etc... espero &ue as* sea7. 8. .am"iamos el nom"re del ormulario inicial, se va a llamar rmMenu0rincipal. Vamos a las propiedades ) cam"iamos >ame, en un principio ser$ ?orm8, pues ponemos rmMenu0rincipal, con las ma)+sculas donde est$n 49por &u':, al !acer re erencia en cdigo a este ormulario pondremos rmmenuprincipal, al pasar de l*nea autom$ticamente se pondr$n en ma)+sculas la M ) la 0, con lo cual sa"remos &ue lo !emos escrito "ien, si no se pone en ma)+sculas puede ser &ue !a)amos escrito mal el nom"re. Esto tam"i'n es aplica"le a varia"les, glo"ales ) controles7. @. .am"iamos el t*tulo de la aplicacin, la propiedad .aption del ormulario. En principio es ?orm8, ponemos 6rganizador de aplicaciones. A. A!ora incluiremos los "otones a utilizar. En el men+ principal !a) cinco opciones 4por lo tanto cinco "otones7. .on las siguientes propiedades:
Botn 1 2 3 4 " Name cmbAadir cmbMantenimiento cmbBuscar cmb m!rimir cmb#alir Caption Aadir Nuevos Mantenimiento Bsqueda m!rimir #alir

B. #i todo !a ido "ien, )a tendr'is el ormulario principal con los "otones dentro. , ser$ una cosa C o D as*:

%. A!ora incluiremos el cdigo del "otn cm"#alir. 0ulsamos do"le encima del control ) aparecer$ el editor de cdigo con el evento cm"#alirEclicF47. 0onemos lo siguiente: 0rivate #u" cm"#alirE.licF47 3nload Me

End #u" Este cdigo !ar$ &ue al pulsar so"re #alir, se descargue el ormulario 4osea, salga a GindoHs7.

/. 0or +ltimo, cam"iar otra propiedad del ormulario. #alimos del editor de cdigo ) pulsamos en el ormulario para ver sus propiedades. 3na de ellas es Border #t)le, lo ponemos a A 49por &u':, para evitar &ue el usuario pueda cam"iar el anc!o ) alto del ormulario.7 I. Esto es todo, recordad &ue cuando !a) veinte programas &ue !acen lo mismo, el mejor siempre es el m$s $cil ) vistoso. ;enemos una !erramienta con la &ue podemos !acer esto $cilmente. ;odo depende de cada programador. .ual&uier pregunta pod'is realizarla a trav's de la lista de la Ge" del 0rogramador, en la misma Ge" o a mi direccin de correo.

Curso Visual Basic Prctico Entrega N #


10 de Octubre de 1998 Autor: Mario Rosas Len Para: Web del Programador $nterior:

En la anterior entrega %1&' llegamos al punto de tener ya reali(ado el men! principal" En esta segunda primero e)plicar* un poco la nomenclatura +ue utilic* en los ,otones %e)tendi,le a todos los dems controles' y comen(aremos una especie de relacin con los campos +ue -amos a guardar en nuestro organi(ador multimedia" Preparados""""" .istos""""" Comen(amos""""
.a nomenclatura:

Esta nomenclatura es la +ue yo utili(o y su e-olucin /a sido personal, no es el estandar de icrosoft %est por a/i pero yo no /e podido encontrarlo', as0 +ue este es el +ue yo utili(o y creo +ue est ,ien" .os nom,res de los controles comien(an con tres letras relati-as al control" P"E" 1i es un Command Button %Botn normal' sus tres primeras letras sern 2cm,2 seguido de algo relati-o a la accin +ue -a a reali(ar" P"E" El ,otn 1alir, pondremos cm,1alir, con la 212 en may!scula como ya e)li+u* en la entrega anterior" Esto es e)tensi,le a otros controles" Por e3emplo, un 4e)t Bo) +ue contendr el t0tulo del disco5programa5etc pondremos t)t4itulo y as0 sucesi-amente"

6s repito +ue este es el sistema +ue utili(o, podeis seguirlo, podeis seguir con el +ue teneis o podeis ,uscar el estandar de icrosoft %y cuando lo encontreis lo pu,licais a+ui'"
.a Base de 7atos: 89u* datos -amos a guardar:"

$ continuacin pondremos las ta,las y campos +ue tendr la ,ase de datos"


4a,la multimedia Campos numero titulo autor fecha ti o contenido restado 4ipo entero texto * 50 texto * 40 fecha text * %0 text * +0 -oolean

7escripcin Contendr un nmero asignado automticamente Ttulo de la entrada Autor de la entrada Fecha de entrada (mas que nada ara que !eais c"mo se utili#a un cam o date$ Ti o de entrada (C& 'usica( C&)*om( etc$ Ti o de contenido ( o ( roc,( arcade( !arios( a!enturas( lucha( cifi( etc$ 'ostrar true si est restado o false si no

Esa es la !nica ta,la por a/ora" Vamos a crearla para +ue podamos comen(ar a utili(arla" Primero a,rimos el VB y nuestro proyecto +ue comen(amos la anterior entrega" ;na -e( a,ierto pulsamos Complementos, $dministrador Visual de 7atos" Este es el $dministrador de 7atos:

Estos son los pasos a seguir para crear la ,ase de datos: 1" Pulsamos $rc/i-o, Nue-a, icrosoft $ccess, 7B Versin <"= %No /e pro,ado la otra as0 +ue utili(ad esta +ue si se +ue funciona'

#" Nos pide una locali(acin en el disco duro, seleccionamos E. I1 6 7I>EC46>I6 7E .$ $P.IC$CI?N" $un+ue no sea necesario, si es importante a la /ora de reali(ar los discos de instalacin +ue todos los datos est*n en el mismo directorio" @" Nom,re de la ,ase de datos 6 "md," A ya estamos preparados para aBadir la ta,la primera" Vamos a la -entana de datos, pulsamos al ,otn derec/o en mitad y seleccionamos Nue-a 4a,la"

C" Ponemos el nom,re de la ta,la % ultimedia' y pulsamos en agregar campo" Vamos aBadiendo los datos cmo se e)plica en la ta,la de arri,a y, al terminar, pulsamos en Denerar la 4a,la" E" ;na -e( terminado tenemos ya lista la ,ase de datos para comen(ar a reali(ar los formularios de entrada y consulta de datos" F" En la creacin de la ,ase de datos podeis impro-isar, aBadir nue-os campos o lo +ue +uerais con el fin de /acer un programa EG6> +ue el +ue yo os estoy mostrando" <" En la siguiente entrega reali(aremos los formularios de entrada de datos y al finali(ar podremos intentar aBadir algunas cosas mediante el programa"

Curso Visual Basic Prctico

Entrega N @
20 de Octubre de 1998 Autor: Mario Rosas Len Para: Web del Programador $nterior:

Pues eso, los formularios de entrada de datos" Como di3e en la anterior entrega -amos a poder introducir los primeros datos" $dems tendreis la primera entrega en cdigo +ue os mando con lo +ue comento a+ui" $s0 +ue, a/i -a""""
6pcin: $Badir Nue-o

Este es el formulario de entrada de datos" Como ya -imos en la anterior entrega, tenemos los siguientes campos en nuestra ,ase de datos"
4a,la multimedia Campos numero titulo autor fecha ti o contenido restado 4ipo entero texto * 50 texto * 40 fecha text * %0 text * +0 -oolean

7escripcin Contendr un nmero asignado automticamente Ttulo de la entrada Autor de la entrada Fecha de entrada (mas que nada ara que !eais c"mo se utili#a un cam o date$ Ti o de entrada (C& 'usica( C&)*om( etc$ Ti o de contenido ( o ( roc,( arcade( !arios( a!enturas( lucha( cifi( etc$ 'ostrar true si est restado o false si no

$s0 +ue comen(aremos reali(ando el formulario" 1upongo +ue ya tendreis arrancado VB sino, a +ue esperais:""""" -enga" 1upongo +ue ya lo tendreis, -ale, -ale, sin prisa" $/ora cargais el proyecto del organi(ador multimedia y seguiremos" Estupendo, a/ora creamos un nue-o formulario ,sico" Podeis /acerlo pulsando en Proyecto H $gregar Iormulario" $s0 tendremos un formulario en -acio y podremos seguir palante" ;na -e( tenemos el formulario, cam,iaremos las siguientes propiedades del mismo:
frmAadirEntrada Propiedad .ame 3order4t5le Ca tion 4tart8 9osition Valor frmA/adir0ntrada + ) Fixed &ialog A/adir 0ntrada % ) Center 4creen 7escripcin .om-re del formulario( ara referirnos a 1l2 Como di6e en la 0ntrega 7 Ttulo del formulario 9osici"n del formulario cuando se carga2

$s0 tenemos ya el formulario con sus propiedades, el anc/o y alto del formulario lo esta,leceremos con el ratn pulsando en las es+uinas del formulario" Este anc/o y alto est en funcin de lo +ue pongamos a/ora nosotros dentro del formulario" Empe(aremos aBadiendo una eti+ueta o control .a,el, como +uerais" .o situamos en pantalla, a gusto del 2consumidor2 y le ponemos las siguientes propiedades:
lblFecha Propiedad .ame Alignment Ca tion Valor l-lFecha % ) Center Fecha 7escripcin .om-re de la 0tiqueta Texto centrado 0s la etiqueta del cam o Fecha

El tipo de letra y color a -uesto gusto" Jay +ue /acer lo mismo para las eti+uetas de: 4I4;.6, $;46>, 4IP6 y C6N4ENI76" 1lo se+uir los pasos anteriores" 1i ya /emos aBadido todas las Eti+uetas, aBadiremos las Ca3as de 4e)to o te)t ,o), como +uerais" $Badimos el primero %el de la fec/a' y ponemos las siguientes propiedades:
txtFecha Propiedad .ame Text Valor txtFecha 7escripcin .om-re de la Ca6a de Texto 9onemos la ca6a de texto !acia

$l igual +ue con las eti+uetas, la fuente, color, etc es a -uestro gusto" Jacer lo mismo para las dems ca3as +ue +uedan +ue son: 4I4;.6 y $;46> ya +ue en 4IP6 y C6N4ENI76 pondremos Ca3as Com,o" $Badimos la ca3a com,o del tipo, +ue llamaremos com4ipo %propiedad Name' y pondremos la propiedad 4e)tKLEli3e el tipoL" Jaremos lo mismo con la ca3a com,o de Contenido" Ialtan los ,otones" ;no para $Badir y otro para Vol-er" .os aBadimos y, para finali(ar tenemos esto:

4ran+uilos +ue a+ui a,a3o esta el linM para +ue os lle-eis el cdigo fuente %para los +ue estn diciendo, uff +ue dificil'" $s0 +ue ya lo tenemos, pues -amos a poner un control data para poder aBadir los datos" $cerca del control data, antes de +ue alguien me -enga con eso de +ue es muy malo, lento y patatin y patatan, es el control +ue -iene con -, para reali(ar funciones con ,ases de datos, es fcil y si, es lento con ,ases de datos grandes pero para esto sir-e y para aprender no -eas lo fcil +ue es" 1i alguien +uiere utili(ar el m*todo ms a-an(ado +ue lo /aga" Bueno, despu*s del discursito sigo" $Badimos el control 7ata y cam,iamos las propiedades por:
dbMul Propiedad .ame Ca tion &ata3ase.ame *ecord4ource :isi-le Valor d-'ul d-'ul *uta de la 3ase de &atos 'ultimedia False 7escripcin .om-re del control &ata 9onemos el nom-re que nosotros !emos en dise/o 9ues eso Ta-la que !amos a utili#ar ;ue en e6ecuci"n no se !ea

Aa tenemos la ,ase de datos enla(ada y podemos empe(ar a escri,ir cdigo" $+ui empie(an los e-entos, para los +ue no lo sepan e)plicar* un po+uito lo +ue son" Cada o,3eto %control, formulario, en fin cual+uier cosa' tiene sus propios e-entos" .os e-entos ocurren en determinadas condiciones, cuando se carga un formulario, cuando se pulsa en un ,otn, cuando cam,ia el te)to de un 4e)t Bo), etc" En fin, nosotros de,emos controlar estos e-entos" Empe(aremos por el e-ento .oad del formulario" Pulsamos do,le en el formulario %no en cual+uier control sino en el fondo, en el formulario' y aparecer la -entana de cdigo y el primer e-ento del formulario +ue es el .oad %+ue suerte no:'" Pues empe(aremos con *l con el siguiente cdigo: Private #ub $orm%&oad'( ) aadimos las categor*as + ti!os com,i!o-Add tem ./01Msica. com,i!o-Add tem ./0123M. com,i!o-Add tem ./01 . com,i!o-Add tem .4ideo1/0. com,i!o-Add tem .040. com,i!o-Add tem ./assette. com,i!o-Add tem .4inilo. com,i!o-Add tem .45#. com,i!o-Add tem .B6,A. com,i!o-Add tem .0is7ette 3 182. com,i!o-Add tem .0is7ette " 184. com,i!o-Add tem .0isco 9 P 1::. com,i!o-Add tem .0isco 9 P ":. com,i!o-Add tem .Bac7u!. com/ontenido-Add tem .Po!.

com/ontenido-Add tem .2oc7. com/ontenido-Add tem .Ne; Age. com/ontenido-Add tem .B-#-3-. com/ontenido-Add tem .Msica 3tros. com/ontenido-Add tem .Aventura. com/ontenido-Add tem .Arcade. com/ontenido-Add tem .6muladores. com/ontenido-Add tem .Programaci<n. com/ontenido-Add tem .3rdenador 3tros. 6nd #ub A me dir alguno de -osotros, 8A esto +ue NNNNN /ace:" Pues lo +ue /ace es cargar en los controles Com,o las opciones +ue apareceran al pulsar so,re ellos, tanto en el com,o de 4ipos como en el de Contenidos" Es muy fcil, simplemente: nom,re"$ddItem Llo +ue +uieras aBadirL $/ora, si e3ecutamos el programa, al pulsar so,re el control Com,o, apareceran todas las caracter0sticas +ue /emos puesto" Eso es todo lo +ue pondremos en el e-ento .oad del formulario" Por !ltimo pondremos el cdigo de los ,otones: cm,$Badir y cm,Vol-er, en el e-ento ClicM de cada uno de ellos" Private #ub cmb4olver%/lic7'( =nload Me 6nd #ub A a+ui est el de cm,$Badir, comentado en el mismo cdigo" Private #ub cmbAadir%/lic7'( ) recomendaciones iniciales ) >a+ que controlar los datos que vamos a introducir ) si introducimos una ?ec>a incorrecta 111@ 62232 ) si introducimos una cadena mAs larga de lo que coge 111@ 62232 dbMul-2ecordset-AddNe; ) esto es !ara decirle ) que vamos a aadir dbMul-2ecordset'.titulo.( B ,rimC'tDt,itulo-,eDt( ) aadimos el titulo 'el trim es !ara quitar los es!acios de mAs( dbMul-2ecordset'.autor.( B ,rimC'tDtAutor-,eDt( ) igual con el autor dbMul-2ecordset'.?ec>a.( B $ormat'tDt$ec>a-,eDtE .dd8mm8++++.( ) la ?ec>a utiliFa el ?ormat que es sim!lemente !ara decirle en quG ) ?ormato la aadimos que es dia8mes8ao 'con 4 digitos( dbMul-2ecordset'.ti!o.( B ,rimC'com,i!o-,eDt( ) el ti!o lo cogemos del combo dbMul-2ecordset'.contenido.( B ,rimC'com/ontenido-,eDt( ) igual con el contenido dbMul-2ecordset-=!date ) lo aade de?initivamente ) +a estA todo ) mostramos un mensaHe de que se >a aadido MsgBoD '.Ia estA dentro.( ) vaciamos los cam!os !ara aadir otro tDt,itulo-,eDt B .. tDtAutor-,eDt B .. tDt$ec>a-,eDt B ..

com,i!o-,eDt B .6liHe el ti!o. com,i!o-&ist ndeD B 11 ) indice de la listaE +a lo eD!licaremos com/ontenido-,eDt B .6liHe el contenido. com/ontenido-&ist ndeD B 11 ) indice de la listaE +a lo eD!licaremos tDt$ec>a-#et$ocus ) mandamos el cursor a la ?ec>a ) +a estA 6nd #ub $+ui teneis el Oip con el cdigo fuente de to este rollo +ue os /e metido" E)ctamente $9;I" Aa os de3o, el pr)imo d0a pondremos un d,Drid en para poder eliminar, modificar y to eso" antenimiento

Jasta pronto, a/ saludos a todos los +ue estais siguiendo 2esto2"

Autor: Mario Rosas Len

Curso Visual Basic Prctico Entrega N C


2 de Noviembre de 1998 Autor: Mario Rosas Len 0ara: Ge" del 0rogramador Primero"

7isculpas a todos los +ue espera,ais esta entrega ya +ue /a salido un poco tarde, ya sa,eis, el resfriado, el tra,a3o, en fin, muc/o estres" $dems tam,ien +uiero aclarar un pro,lema +ue /u,o en la entrega anterior so,re el control 7ata" $lgunas personas /an preguntado cual es el control 7ata, as0 +ue es el +ue tiene este iconito en la ,arra de /erramientas:

$nterior:

En la anterior entrega creamos el primer formulario de entrada de datos, a/ora reali(aremos otro formulario para modificar, eliminar y -er los datos +ue tenemos introducidos" Ao lo llamo antenimiento de los 7atos" Preparados por+ue comen(amos 1= """ P """ Q """ < """ F """ E """ C """ @ """ # """ 1 """ .an(amiento %por eso de Pedro 7u+ue'"
6pcin: antenimiento de 7atos"

En este formulario, como /e dic/o antes, podremos -er, modificar y eliminar los datos +ue ya tenemos introducidos" $s0 +ue, como en la entrega anterior, comen(aremos reali(ando el formulario" Venga, pulsad en el icono de VB y comen(amos" Cargad el proyecto del organi(ador multimedia y seguiremos" Como ya di3e en la entrega anterior, creamos un formulario nue-o y ponemos las siguientes propiedades:
frmMantenimiento Propiedad .ame 3order4t5le Ca tion 4tart8 9osition Valor frm'antenimiento + ) Fixed &ialog 'antenimiento de &atos % ) Center 4creen 7escripcin .om-re del formulario( ara referirnos a 1l2 Como di6e en la 0ntrega 7 Ttulo del formulario 9osici"n del formulario cuando se carga2

Aa /emos creado el formulario, esta,lecemos el anc/o y alto seg!n las necesidades y continuamos" Creamos, tal y como di3e en la entrega anterior, las mismas eti+uetas y ca3as de te)to +ue en el formulario de entrada de datos" Podeis utili(ar Copiar y Pegar si +uereis" ;na -e( con todas las eti+uetas y ca3as de te)to aBadiremos el control 7BDrid" 1i no lo tenemos en la ,arra de /erramientas de,emos /acer lo siguiente: Proyecto H Componentes" ;na -e( dentro seleccionar el control icrosoft 7ata Bound Drid como indica la imagen"

$Badimos tres ,otones,

odificar, Eliminar y Vol-er"

$/ora -amos a poner el control data %antes +ue el 7BDrid' para poder modificar, -er y eliminar los datos" El o,3eti-o ser +ue, al pulsar en una fila del 7BDrid se muestren los datos en las ca3as de te)to y en ese momento poder modificarlo o eliminarlo" $Badimos el control 7ata y cam,iamos las propiedades por:
dbMul Propiedad .ame Ca tion &ata3ase.ame *ecord4ource Valor d-'ul d-'ul *uta de la 3ase de &atos 'ultimedia 7escripcin .om-re del control &ata 9onemos el nom-re que nosotros !emos en dise/o 9ues eso Ta-la que !amos a utili#ar

:isi-le

False

;ue en e6ecuci"n no se !ea

Aa tenemos la ,ase de datos enla(ada y podemos aBadir el 7BDrid" Este control -a a mostrar los datos del control 7ata por l0neas %un registro en cada l0nea y un campo en cada columna'" .o ponemos y tendremos algo as0:

$/ora cam,iaremos las propiedades del control 7BDrid"


dbgMalla Propiedad .ame &ata4ource Valor d-g'allal d-'ul 7escripcin .om-re del control &3<rid 0l control data con el que enla#amos

Eso es lo +ue pondremos, a/ora cargamos los campos a mostrar de la siguiente forma: Nos colocamos encima del control 7BDrid con el ratn y pulsamos el ,otn derec/o" Escogemos la opcin >ecuperar Campos y, fi3ate, o,tendremos los siguiente:

1i +ueremos podemos cam,iar el anc/o de las columnas con el comando Editar %pulsando el ,otn derec/o del ratn encima del 7BDrid' o cam,iar las propiedades del control" $/ora enla(aremos las ca3as de te)to y los com,o ,o) con la ,ase de datos de la siguiente forma: El primero ser el t)tIec/a, lo enla(aremos con el campo Iec/a del control data" Cam,iaremos las siguientes propiedades de la ca3a de te)to t)tIec/a: 7ata1ourceKd, ul 7ataIieldKfec/a .a semana pasada cam,ie a VBF, este te permite otra propiedad +ue es el formato %la cual no est en VBE'" El campo t)tIec/a ya est enla(ado, /aremos lo mismo para los dems pero cam,iando los campos por los correspondientes" ;na -e( terminado podemos -er el resultado %,ueno antes /ay +ue llamar a este formulario desde el men! principal, pero eso sa,eis ya como se /ace, o no:'" Pro,ad a e3ecutar la aplicacin y -ereis el resultado %pero antes de,eis introducir algunos datos'" $/ora, de,emos continuar con el cdigo +ue pondremos, primero empe(aremos por el e-ento .oad del formulario" Pulsamos do,le en el

formulario %no en cual+uier control sino en el fondo, en el formulario' y aparecer la -entana de cdigo y el primer e-ento del formulario +ue es el .oad %+ue suerte no:'" Pues empe(aremos con *l con el siguiente cdigo: Private #ub $orm%&oad'( ) aadimos las categor*as + ti!os com,i!o-Add tem ./01Msica. com,i!o-Add tem ./0123M. com,i!o-Add tem ./01 . com,i!o-Add tem .4ideo1/0. com,i!o-Add tem .040. com,i!o-Add tem ./assette. com,i!o-Add tem .4inilo. com,i!o-Add tem .45#. com,i!o-Add tem .B6,A. com,i!o-Add tem .0is7ette 3 182. com,i!o-Add tem .0is7ette " 184. com,i!o-Add tem .0isco 9 P 1::. com,i!o-Add tem .0isco 9 P ":. com,i!o-Add tem .Bac7u!. com/ontenido-Add tem .Po!. com/ontenido-Add tem .2oc7. com/ontenido-Add tem .Ne; Age. com/ontenido-Add tem .B-#-3-. com/ontenido-Add tem .Msica 3tros. com/ontenido-Add tem .Aventura. com/ontenido-Add tem .Arcade. com/ontenido-Add tem .6muladores. com/ontenido-Add tem .Programaci<n. com/ontenido-Add tem .3rdenador 3tros. 6nd #ub Es como en el formulario de entrada, simplemente para +ue al modificar tengamos tam,i*n todas las opciones Por !ltimo pondremos el cdigo de los ,otones: cm,Eliminar, cm, odificar y cm,Vol-er, en el e-ento ClicM de cada uno de ellos" Private #ub cmb4olver%/lic7'( =nload Me 6nd #ub A a+ui est el de cm, odificar, +ue ser" Private #ub cmbModi?icar%/lic7'( dbMul-2ecord#et-6dit dbMul-2ecord#et-=!date 6nd #ub $/ora el de Eliminar: Private #ub cmb6liminar%/lic7'( dbMul-2ecord#et-0elete dbMul-2e?res> 6nd #ub

A preguntareis algunos, 8ya est:" Pues no, este modo es el ms fcil pero ocasiona muc/os pro,lemas como indico a+ui: 1" $l pulsar en el control 7BDrid nos de3a modificar los campos, pro,ad a pulsar en cual+uier celda y modificarla" El pro,lema llega al tener +ue -alidar una entrada como, por e3emplo, la fec/a %poned una fec/a incorrecta -ers +ue c/oR'" #" .a ,ase de datos se modifica sin tener +ue pulsar en el ,otn modificar" @" No se reali(an las compro,aciones pertinentes de fec/as, longitudes, etc +ue son necesarias como indi+u* en el cdigo de la opcin $Badir en la entrega anterior" C" En fin, esto no es una aplicacin comercial en a,soluto" Iallar mas +ue una escopeta de caBa" Intentad solucionarlo y en la pr)ima entrega indicar* cmo /acerlo, pero intentarlo es lo +ue cuenta" Por !ltimo comentar un par de cosas: a' En la imagen de arri,a %componentes' podeis -er +ue el control 7BDrid tiene al final lo siguiente %1P@'" 9ui(s el -uestro no lo tenga, esto es +ue yo tengo instalado el 1er-ice PacM @ +ue no es, ni mas ni menos, +ue un pa+uete para solucionar errores en los componentes de VB" 9ui(s -osotros no llegueis a -er esos errores %en el caso de +ue no tengais el 1P@' pero siempre es con-eniente" Por otra parte, no de,eis preocuparos si no lo teneis, pero podeis ,a3arlo de internet desde la Re, de microsoft %aun+ue son unas 1@ ,'" ,' Dracias a todos los +ue seguis este curso y perdonad por lo tarde +ue /a llegado esta entrega, espero poder ser ms puntual a partir de a/ora" Esto es todo, por a/ora" En la siguiente entrega -eremos 2algo2 de 19." A digo 2algo2 por+ue es un tema demasiado e)tenso, +ui(s podreis -er por a/i alg!n manual en condiciones" 7oRnload del cdigo fuente /asta a/ora: $9;I Jasta pronto"""" /ay +ue -er lo alto +ue /a llegado el Pedro 7u+ue, 8tendrn Internet a/i arri,a:, 8Estar -iendo este curso:, y si lo esta -iendo 8Es +ue se a,urre tanto a/i arri,a:" Esto es como un E)pediente N" Preguntas sin respuesta"

Curso Visual Basic Prctico Entrega N E


9 de Noviembre de 1998 Autor: Mario Rosas Len Para: Web del Programador

Primero"

4arde, como siempre, a+ui teneis la +uinta y no !ltima entrega de este curso prctico de VB"
$nterior:

Como ya os di3e en la anterior entrega /oy os comentar* algo de 19. %1tructured 9uery .angua3e' o algo as0" No lo mostrar* todo, pero si lo suficiente para +ue podais /acer consultas ,astante ,uenas" A, como Pedro 7u+ue ya /a ,a3ado, no se +ue decir" 1lo espero +ue su,a otra -e( a por mi por+ue yo estoy toda-0a en las nu,es"
19. %1tructured 9uery .angua3e'

Pues si, el 19. +ue tanto se oye /a,lar y tan poco se comenta detenidamente" Pues esto es s+l, un lengua3e estructurado de consultas" Con este lengua3e podemos conseguir una consulta del tipo de 2todas las c/icas de la ,ase de datos +ue tengan los o3os -erdes y el pelo negro y ordenadas por edad2" %lo +ue falta es la ,ase de datos'" :H' En nuestro caso %de3ando la ,ase de datos anterior, aun+ue si alguien la tiene +ue la mande' podemos /acer una consulta de este tipo: 24odos los cdHroms cuyo contenido sea a-enturas y +ue su autor sea E$ 1ports2 pero las posi,ilidades de consultas y accesos a la ,ase de datos son inmensas" Bueno, pasamos a cmo /acerlo, es +ue me /e inspirado y no de3o de escri,ir" 8Cmo lo /acemos en -isual ,asic:" Pues, sencillamente, ponemos la sentencia 19. en la propiedad >ecord1ource del control 7ata" 8A cmo co3)))) /ago la sentencia 19.:, pues a eso -amos, no seamos tan impacientes" Podemos decir +ue una sentencia 19. tiene tres partes:

1. 1E.EC4 2. SJE>E 3. 6>7E>


;n e3emplo de sentencia ser0a: 1E.EC4 T I>6 contenido multimedia SJE>E autorK2E$ 1ports2 6>7E> BA

Esto nos 1E.ECCI6N$ %select' 46761 los campos %T' 7E .$ ta,la %from' multimedia 76N7E %R/ere' el autor sea igual a E$ 1ports y +ue se 6>7ENE %order' por %,y' contenido" En esa sentencia est lo ms necesario para +ue podais /acer -uestra primera sentencia propia, ,ueno, no todo" $/ora os e)plicar* lo +ue no est escrito" Primera Parte: SELECT

Pues esta la podeis de3ar casi fi3a, cam,iando la ta,la claro" El o,3eti-o de esta sentencia %+ue es o,ligatoria' es decirle +ue campos +ueremos en la consulta, le decimos +ue todos con el asterisco pero, si +ueremos podemos poner la lista de los campos +ue -amos a utili(ar, por e3emplo: 1E.EC4 autor, titulo, tipo, contenido I>6 multimedia Como ya /e dic/o es 6B.ID$46>I$ y siempre de,e ponerse, si utili(amos 19., si no lo /acemos ,asta con poner el nom,re de la ta,la, como ya /emos /ec/o en el mdulo de mantenimiento" Segunda Parte: WHE E Esta clausula no es o,ligatoria, puedes ponerla o no, pero slo tiene sentido omitirla si lo +ue /acemos es slo ordenar la ,ase de datos" Considerando +ue autorK2E$ 1ports2 es la consulta, en la clausula R/ere podemos poner tantas como +ueramos enla(adas con 6>, $N7, N64, etc" Entonces podr0amos poner: %select' SJE>E autorK2E$ 1ports2 $N7 tituloK2III$ PQ2, nos dar0a como resultado todos los registros cuyo autor sea E$ 1ports y cuyo titulo sea III$ PQ, fcil no:" 1i, si, lo de las comillas, 8por +u* lo de las comillas: pues por el tipo de campo +ue es, es un campo de te)to, pues comillas simples" En esta ta,la os indico los distintos tipos y su forma de consulta en 19."
;206 ;e(to >+mero ?ec!a EJEM0L6 con G<ERE G<ERE campoEte(to K Lte(toE"us&uedaL G<ERE campoEnumero K numero G<ERE campoE ec!a K ec!a DDDDDDDDDDM pro"lema, la ec!a en ormato mesNdiaNao

$ntes lo di por /ec/o pero en las consultas podemos poner cual+uier tipo de lgica, /e utili(ado K pero podemos poner U, V, UV, VK, UK, .IWE %+ue a/ora lo e)plico'" El .IWE, es cmo P$>ECI76 $" Por e3emplo: 1E.EC4 T I>6 multimedia SJE>E autor liMe 2E$T2 , esto /ar0a lo siguiente, coge todos los campos de la ta,la multimedia donde el campo autor tenga sus dos primeras letras como E$" 6sea, tendriamos un registro cuyo autor fuese E$ 1ports, otro +ue fuese E$ Dames, otro E$4 $.., etc, todo los +ue empie(an por E$" 9ui(s el e3emplo ms claro es el siguiente: 1elect T from clientes R/ere apellidos liMe 2>osasT2, y saldr0an todos mis familiares" Pero $4ENCI?N, slo con campos te)to, no funciona con los dems" 6tro truco, para la fec/a" En el caso de +ue +ueramos sa,er todos los registros cuya fec/a est en un determinado mes %+ue se lo damos en una -aria,le', esto ya es cdigo operati-o 1==N1==" !rivate sub /ommand1%clic7'( ) el control 0ata se llama db/on mesB1:

selectB.#6&6/, J $23M multimedia . ;>ereB. W5626 M3N,5'?ec>a(B.KstrC'mes( 181:81LLM + el 181:81L":( ) mes de octubre '!uede salir el

)oseaE todos cu+o mes sea octubre ) ;>ereB. W5626 ?ec>a B6,W66N 28181LLM AN0 1283181LLM. )?ec>a entre el 1 de $ebrero + el 31 de 0iciembre ) ;>ereB. W5626 ?ec>a @ 181N81LLM. ) ?ec>a ma+or que el 1N de 6nero de 1LLM orderB. 32062 BI autor. db/on-2ecord#ourceBselect K ;>ere K order db/om-2e?res> end sub 6s pongo estos e3emplos por+ue es muy importante lo de las fec/as ya +ue yo estu-e muc/o tiempo liado con ellas y, casi siempre, se e+ui-oca uno al ponerlas y /acer las consultas" 1o,re todo si tra,a3a con el sistema de EspaBa +ue es dia5mes5aBo" 6tra cosilla, poned siempre en las consultas el aBo completo %no seamos tan malos como para /acer un programa +ue no funcione con los cuatro d0gitos, luego puede /a,er pro,lemas'" Tercero: ! "E 1implemente, por +ue campo o campos +uieres +ue te ordene el resultado" Por e3emplo, 6>7E> BA autor, titulo" 6rdenar0a el resultado por autor y, dentro de cada autor, por t0tulo" Creo +ue ya est" Podeis pro,ar, en el formulario de antenimiento poneis un ,otn y en su e-ento C.ICW pegais el cdigo +ue /e puesto a+ui arri,a" $Badeis -arios registros a la ,ase de datos y despues pulsais en el ,otn" .o ms fcil ser0a poner una de te)to con .IWE +ue son las +ue antes se -e el resultado" 7e todas formas, lo de,eis /acer en el formulario de mantenimiento por+ue se actuali(ar0a la ,ase de datos y el 7BDrid con lo +ue -eriamos los resultados al instante en pantalla" Bueno no se si /a +uedado claro" .a pr)ima mando un e3emplo +ue en esta ya no me llega" Jasta pronto, a+ui me +uedo escuc/ando a Celine 7ion y su .et2s talM a,out lo-e, es +ue soy un sentimental, no puedo remediarlo :H'

#E>;E>.2A# 1E #ELE..2O> 6 .6>#3L;A#


BienE #O& !ermite realiFar consultas mediante sentencias de selecci<n .#6&6/,.&o q >ace esta sentencia #6&6/, es tomar datos de una base de datos !ara devolverlos a quien se lo !idi< 'en nuestro caso quien se lo !ide es el obHeto ,B&(-

#6&6/, consta de seis clAusulas: las dos !rimeras obligatorias '#6&6/, + $23M( + las otras o!cionales 'W5626E P23=P BIE 5A4 NPE =N 3NE 32062 BI(#6&6/, + $23M $=N/ 3N6# 06 AP2=PAM 6N,3 W5626 P23=P BI 5A4 NP =N 3N 32062 BI /3N#=&,A# A MA# 06 =NA ,AB&A

#ELE.; ) ?R6M
4eamosE con un eHem!loE como ?unciona: #O& B .#6&6/, J $23M tabla1. #et ,B& B B00-3!en2ecordset'#O&( ),B& almacena todos los valores de la tabla Nuestra orden #O& es: seleccionar '#6&6/,( todos los cam!os 'J( de '$23M( la tabla1A>ora vamos a mostrar en la lista lo q almacenamos,B&-Move$irst )nos !osicionamos en el !rimer registro de la tabla 0o =ntil ,B&-63$ ))&a !ro!iedad 63$ se !one ,2=6 cuando se a llegado al ?inal de la tabla List1.AddItem TBL("nombre") TBL.MoveNext 'pasamos al siguiente registro Loop 0e esta maneraE al eHecutarE nos debe a!arecer en la lista todos los nombres de la tabla#i queremos mostrar .nombre. .a!ellido.: ,B&-Move$irst o !ntil TBL."#$ List1.AddItem TBL("nombre") % " " % TBL("apellido") TBL.MoveNext Loop #i queremos listar .nombre. .a!ellido. tiene .edad.: ,B&-Move$irst o !ntil TBL."#$ List1.AddItem TBL("nombre") % " " % TBL("apellido") % " tiene " % TBL("edad") TBL.MoveNext Loop OuG sucede si solo quer*a tomar de la tabla1 los cam!os nombre + edad 'no el a!ellido(- 6n este caso la sentencia #O& quedar*a:

#O& B .#6&6/, nombreEedad $23M tabla1. Por lo tanto el ?ormato de la sentencia #6&6/, >asta a>ora es: #6&6/, cam!o1Ecam!o2E---Ecam!oN $23M nombre%de%la%tabla N3,A: si +a terminamos de trabaHar con la tabla + con la base de datos las !odemos cerrar de la siguiente manera: ,B&-/lose )cierra tabla B00-/lose )cierra base de datos

?3>.26>E# 1E A=R30AM2E>;6
&as ?unciones de agru!amiento son: 12#;2>.;: 0iHimos q si usabamos el J nos seleccionaba todos los cam!os- ,ambiGn >a+ un o!erador llamado 0 #, N/,E Gste elimina las ?ilas o registros du!licados del resultado de la consulta- 6sto se ve bien en el siguiente eHem!lo: #O& B .#6&6/, 0 #, N/, edad $23M tabla1. )almacena todas las edades sin re!etirlas #et ,B& B B00-3!en2ecordset'#O&( ,B&-Move$irst 0o =ntil ,B&-63$ &ist1-Add tem ,B&'.edad.( ,B&-MoveNeDt &oo! .63>;: 6ste o!erador nos devuelve la cantidad de valores en una columna- Por eHem!loE /3=N,'nombre( devolverA el nmero de registros con valores no nulos en el cam!o nombrePero si usamos /3=N,'J(E nos devuelve el nmero de registros inclu+endo aquellos registros con valores nulos#O& B .#6&6/, /3=N,'J( $23M tabla1. )!ara saber la cantidad de registros 'inclu+e los nulos( #et ,B& B B00-3!en2ecordset'#O&( &ist1-Add tem ,B&'.eD!r1:::.( )eD!r1::: es el name del item de ,B& q almacena el resultado del o!erador de agru!amiento #3M: 0evuelve la suma total de los valores de una eD!resi<n de columna o cam!o N=M62 /A 'si no es numerica les da errorQ( - Por eHem!loE #=M'edad( devolverA la sumatoria de las edades#O& B .#6&6/, #=M'edad( $23M tabla1. )sumatoria de las edades #et ,B& B B00-3!en2ecordset'#O&( &ist1-Add tem ,B&'.eD!r1:::.( AV=: 0evuelve el !romedio de los valores de una eD!resi<n de columna- Por eHem!loE A4P'edad( devolverA el !romedio de las edades- 6sto seria dividir #=M'edad(8/3=N,'edad(#O& B .#6&6/, A4P'edad( $23M tabla1. MAP: 0evuelve el valor mAs alto de los contenidos en una eD!resi<n de columna-

#i >acemos: #O& B .#6&6/, MAR'edad( $23M tabla1. Nos dirA la edad mas altaM2>: #i >a+ un MARE !or q no !uede >aber un M NS +a se >abran dado cuenta lo q >ace6ntoncesE si #O& B .#6&6/, M N'edad( $23M tabla1. Nos dirA la edad mas baHa6T6MP&3: quiero saber cuAntos registro tengoE cual es la menor edad + cual es el !romedio de todas las edades 0im B00 As 0atabase 0im ,B& As 2ecordset 0im #O& As #tring #et B00 B 3!en0atabase'.c:Umis documentosUbase1-mdb.( #O& B .#6&6/, /3=N,'J(E M N'edad(E A4P'edad( $23M tabla1. #et ,B& B B00-3!en2ecordset'#O&( &ist1-Add tem .total de reg: . K ,B&'.eD!r1:::.( &ist1-Add tem .M N MA 60A0: . K ,B&'.eD!r1::1.( &ist1-Add tem .P23M60 3 60A06#: . K ,B&'.eD!r1::2.( ,B&-/lose B00-/lose

G<ERE
/on W5626 indicamos condiciones !ara la selecci<n de ciertos registros- 4eamos un eHem!lo: Antes q nada nuestra sentencia #6&6/, quedar*a asi: #6&6/, cam!o1Ecam!o2E---Ecam!oN $23M nombre%de%la%tabla W5626 condicion1 AN0 condicion2 AN0 --- AN0 condicionN 0im B00 As 0atabase 0im ,B& As 2ecordset 0im #O& As #tring #et B00 B 3!en0atabase'.c:Umis documentosUbase1-mdb.( #O& B .#6&6/, J $23M tabla1 W5626 edad V 3:. #et ,B& B B00-3!en2ecordset'#O&( ,B&-Move$irst 0o =ntil ,B&-63$ &ist1-Add tem ,B&'.edad.( ,B&-MoveNeDt &oo! ,B&-/lose B00-/lose /on esta instrucci<n decimos q: seleccione '#6&6/,( todos los cam!os 'J( de '$23M( tabla1 q cum!lan la condici<n 'W5626( edad V 3:

=R630 B,
6sta clAusula se utiliFa !ara agru!ar segun lo q es!eci?iquemos- Por eHem!loE !odemos listar todos los datos de nuestra tabla1E !ero agru!ados !or edad#O& B .#6&6/, edadE nombreE a!ellido $23M tabla1 P23=P BI edadEnombreE a!ellido. #et ,B& B B00-3!en2ecordset'#O&( ,B&-Move$irst 0o =ntil ,B&-63$ &ist1-Add tem ,B&'.nombre.( K . . K ,B&'.a!ellido.( K . tiene . K ,B&'.edad.( ,B&-MoveNeDt &oo! 6ntonces el ?ormato es: P23=P BI eD!resion1E eD!resi<n2E ---E eD!resi<nNMP32,AN,6: ,odas las eD!resiones deben coincidir con lo q !usimos en #6&6/,- Por lo tanto lo siguiente no ?unciona: #O& B .#6&6/, J $23M tabla1 P23=P BI edadEnombreE a!ellido. )no se !uede agru!ar mediante los cam!os seleccionados con J #O& B .#6&6/, edad $23M tabla1 P23=P BI a!ellido. #O& B .#6&6/, nombreE a!ellidoE edad $23M tabla1 P23=P BI edad.

<AV2>=
Asi como la clAusula W5626 es!eci?ica condiciones !ara la selecci<n de registrosE 5A4 NP es!eci?ica condiciones !ara el agru!amiento 'P23=P BI(- Por lo tanto 5A4 NP ?unciona solo si se es!eci?ica un P23=P BI#O& B .#6&6/, edadE nombreE a!ellido $23M tabla1 P23=P BI edadEnombreE a!ellido 5A4 NP edadV3:. /on este eHem!lo agru!amos segn la edadE !ero solo los q su cam!o edad es menos a 3:-

3>26>
/on este o!erador lo q >acemos es Huntar dos resultados de dos sentencias #6&6/, di?erentes- 6l resultado de la union son todos los registros devueltos en ambas sentenciasE + los registros re!etidos se omiten a no ser q utilicemos la !alabra A&&&a ?orma es: #6&6/, sentencia1 =N 3N A&& #6&6/, sentencia2 con sentencia2 veamos q sucede si >acemos lo siguiente )sentencia1 debe coincidir

#O& B .#6&6/, J $23M tabla1 3>26> #6&6/, J $23M tabla1. #et ,B& B B00-3!en2ecordset'#O&( ,B&-Move$irst 0o =ntil ,B&-63$ &ist1-Add tem ,B&'.nombre.( K . . K ,B&'.a!ellido.( K . tiene . K ,B&'.edad.( ,B&-MoveNeDt &oo! 6n este caso unimos la tabla1 con la misma tabla1E !or lo tanto todos los resultados son re!etidos + se omiten4eamos q !asa con A&& #O& B .#6&6/, J $23M tabla1 3>26> ALL #6&6/, J $23M tabla1. #et ,B& B B00-3!en2ecordset'#O&( ,B&-Move$irst 0o =ntil ,B&-63$ &ist1-Add tem ,B&'.nombre.( K . . K ,B&'.a!ellido.( K . tiene . K ,B&'.edad.( ,B&-MoveNeDt &oo! 3tra veF todos los datos se re!iten !ero en este caso le decimos q no omita ningunoE !or lo tanto cada valor de la tabla1 estarA re!etido dos veces5acer esto no tiene sentidoE es decir q la union deber*a ser con la selecci<n de dos tablas di?erentes-

6R1ER B,
Para ordenar los resultados utiliFamos 32062 BI- /uando omitimos esta clAusulaE los resultados se ordenan !or el !rimer cam!o que sea clave en el *ndice que se >a+a utiliFado4eamos las siguientes sentencias: #O& B .#6&6/, J $23M tabla1 32062 BI edad A#/. ) ordenado !or edad en ?orma ascendente #O& B .#6&6/, J $23M tabla1 32062 BI edad. ) ordenado !or edadE !or de?ecto lo ordena en ?orma ascendente #O& B .#6&6/, J $23M tabla1 32062 BI edad 06#/. ) ordenado !or edad en ?orma descendente #O& B .#6&6/, J $23M tabla1 32062 BI 1. )ordenado !or el !rimer cam!o de la tabla #O& B .#6&6/, nombreE a!ellidoE edad $23M tabla1 32062 BI 3E2E1. )ordenado !or edadE a!ellido + nombre 6ntonces !odemos indicar el nombre_de_campoE nmero_de_campo + si es ASCendente o DESCendente-

.6>#3L;A# A MA# 1E 3>A ;ABLA


#u!ongamos q tenemos una base de datos con dos tablas llamadas tabla1 + tabla2- ,abla1 tiene como cam!os nombreE a!ellido + edad- Mientras q la tabla2 tiene nombre + emailBienE !or eHem!lo +o !odria querer los emails de las !ersonas q estan en ambas tablasE esto es q el nombre de la tabla1 tiene q ser igual al nombre de la tabla24eamos como lo indicamos--#O& B .#6&6/, tabla1-nombreEemail $23M tabla1Etabla2 W5626 tabla1-nombreBtabla2-nombre. #et ,B& B B00-3!en2ecordset'#O&( ,B&-Move$irst 0o =ntil ,B&-63$ &ist1-Add tem ,B&'.nombre.( K . . K ,B&'.email.( ,B&-MoveNeDt &oo! Nuestra sentencia #O& quedo as*: 11 ndicamos los cam!os a seleccionar '#6&6/,(- 3bservar q el cam!o nombre a!arece en las dos tablasE !or lo tanto debemos indicar de q tabla los vo+ a seleccionar 'tabla1-nombre(- Por el contrario el cam!o email solo a!arece en la tabla2E !or lo tanto no >ace ?alta indicarle de q tabla lo queremos +a q es obvio de cual va a ser21 0es!ues indicamos cuales tablas van a ser consultadas '$23M(- &e indicamos q tabla1E tabla2- 6l orden es im!ortante !orq de cada registro de la !rimer tabla se e?ectua una busqueda en la segunda31 !or ultimo indicamos la condici<n 'W5626(- 0ecimos q el cam!o nombre de la tabla1 debe ser igual al de la tabla2A>ora vamos a ver el mismo eHem!lo !ero usando A& A#- =n alias es un nombre tem!oral q le asignamos a una tabla- Por eHem!lo a la tabla1 la !odemos llamar t1 + a la tabla2 t2- 0e esta manera es mas ?acil escribir t1 q tabla1#O& B .#6&6/, t1-nombreEemail $23M tabla1 t1Etabla2 t2 W5626 t1-nombreBt2-nombre. 6n el $23M escribimos nombre_tabla alias_tabla. 6n el resto de la sentencia usamos el alias en veF de el nombreA>oraE su!ongamos q tenemos una tercer tabla q contiene nombre + tele?ono como cam!osOueremos consultar los cam!os nombreE email + tele?onos#O& B .#6&6/, t1-nombreEemailEtele?ono $23M tabla1 t1Etabla2 t2E tabla3 t3 W5626 t1-nombre B t2-nombre AN0 t1-nombre B t3-nombre. &o im!ortante de estas consultas es el orden en q se escriben las tablas luego del $23ME +a q esto va a in?luir en la velocidad de la consultaPara terminar la secci<n de consultas vamos a ver las #6&6/, AN 0A0A#- 6sto es una #6&6/, dentro de otra- 6s mu+ sim!le- 4eamos un eHem!lo#O& B .#6&6/, t1-nombreEemailEtele?ono $23M tabla1 t1Etabla2 t2E tabla3 t3 W5626 t1-nombre B t2-nombre AN0 t1-nombre B t3-nombre AN0 '#6&6/, /3=N,'J( $23M tabla1(V 1::. 6s la misma condici<n anterior solo q se agrego una condici<n mas: '#6&6/, /3=N,'J( $23M tabla1(V 1::E esto esE q la tabla1 tenga menos de 1:: registros- 6ntonces cuando insertamos una nueva #6&6/, dentro de otraE debemos !onerla entre !arentesis-

Visual Basic y acceso a bases de datos mediante ADO HHH.laHe"deprogramacion.com

V2#3AL BA#2. , A..E#6 A BA#E# 1E 1A;6# ME12A>;E A16


2ntroduccin
6l !ro!<sito de este tutorial es servir como resumen o gu*a de re?erencia rA!ida !ara aquellas !ersonas que em!leen 4isual Basic !ara acceder a bases de datosE + utilicen el modelo A03&as eD!licaciones son brevesE aunque >a+ abundantes eHem!los a lo largo de todo el teDtoE !or lo que !ara un usuario que tenga algo de eD!eriencia en acceso a bases de datos mediante 4B no deber*a su!onerle ningn !roblema la com!rensi<n del teDto>ota: Se recomienda encarecidamente programar con #ption "xpli&it activado, ya ue de esta !orma evitaremos errores por variables incorrectas, etc.

Apertura de la cone(in
&o !rimero que debemos >acer es aadir las re?erencias de acceso a datos- Para elloE nos movemos a "royecto W #e!erencias + una veF all* aadimos los $icroso!t Active% Data Ob&ects '.( )ibrary=na veF >ec>o estoE !odemos !roceder a escribir c<digoE creando las variables necesarias !ara establecer la coneDi<n: Dim &n'onex As ADODB.Connection &a coneDi<n mediante la cual accederemos a la base de datosDim &md'omando As ADODB.Command 6l comando o consulta a eHecutar en la coneDi<nDim str'adena'onex As String &a cadena que indica el ?ormatoE ubicaci<nE etc- de la base de datos Dim rsLista As ADODB.Recordset 6l conHunto de registros donde se almacenarAn los resultados de la consultaDim par(arametro1 As ADODB.Parameter ) &os distintos !arAmetros eDternos que utiliFaremos en la consulta/uando +a tengamos todas las variables de?inidasE !asamos a !re!arar los !arAmetros !ara la coneDi<n: Set &n'onex = New ADODB.Connection nstanciamos la coneDi<n-

1 Visual Basic y acceso a bases de datos mediante ADO HHH.laHe"deprogramacion.com

str'adena'onex = "Provider=Microsoft.Jet.OL DB.!."#$ % & '(S R )D=nom*re+s+ario#$ % & 'PASS=contrase,a#$ % & 'Data So+rce=c-.*asdedatos.md*" /on?iguramos la cadena de coneDi<n si vamos a acceder a una base de datos de Accessstr'adena'onex = "Provider=S/LOL DB.0#$ % & '(S R )D=nom*re+s+ario#$ % & 'PASS=contrase,a#$ % & ')nitia1 Cata1og=nom*recata1ogo#$ % & 'Data So+rce=*asdedatos" 3 la con?iguramos de esta otra ?orma si vamos a acceder a una base de datos de #O&&n'onex.ConnectionString = str'adena'onex ndicamos a la coneDi<n la cadena de coneDi<n&n'onex.O2en I !or ltimo abrimos la coneDi<n-

.reacin de la consulta
=na veF !re!arada la coneDi<nE !rocedemos a !re!arar el comando: Set &md'omando = New ADODB.Command nstanciamos el comando'omando.ActiveConnection = &n'onex &e indicamos a que coneDi<n !ertenece'omando.Command3e4t = "Cons+1ta S/L$ 6stablecemos la consulta que eHecutarA el comandoSet par(arametro1 = &md'omando.CreateParameter5"cam2o"6 ti2odedatos6 adParam)n2+t6 6 'va1or$7 &md'omando.Parameters.A22end par(arametro1 ) /on?iguramos el !arAmetroE indicando el cam!o de #O& al que corres!ondeE el ti!o de datosE ti!o de !arAmetro + el valor8variable-

Ejecucin de la consulta
=na veF !re!arado tambiGn el comandoE !rocedemos a eHecutarlo + guardar sus resultados: &md'omando. 4ec+te #i nuestra consulta no devuelve datosE eHecutamos el comando-

2 Visual Basic y acceso a bases de datos mediante ADO HHH.laHe"deprogramacion.com

Set rsLista = New ADODB.Recordset Set rsLista = &md'omando. 4ec+te #i nuestra consulta devuelve datosE instanciamos el 2ecord#et + eHecutamos la sentencia indicando que Gste es el destinatario de los datos que devuelva-

Limpieza de varia"les
=na veF >allamos terminado de eHecutar la consulta + >allamos devuelto los datosE !asamos a liberar la memoria ocu!ada !or las distintas variables&n'onex.C1ose /erramos la coneDi<n 'o!cionalE no es necesario >acerloX si no lo indicamos 4B lo >arA !or nosotros(Set &n'onex = Not8ing Set &md'omando = Not8ing Set str'adena'onex = Not8ing 6liminamos las variablesSet rsLista = Not8ing #i +a >emos tratado los resultados devueltosE o los >emos trasladado a otra !arteE eliminamos tambiGn el 2ecord#et-

Ane(o 2: tipos de datos ) tipos de par$metros ;ipos de datos m$s comunes ;ipos de par$metros
adBinar9 adBoo1ean adC8ar adC+rrenc9 adDate adDecima1 adDo+*1e ad)nteger adSma11)nt ad3in9)nt ad:arC8ar ad:ariant adParam)n2+t adParam)n2+tO+t2+t adParamO+t2+t adParamRet+rn:a1+e adParam(n;nown

Вам также может понравиться