CursoVB04

download CursoVB04

of 18

Transcript of CursoVB04

  • 7/25/2019 CursoVB04

    1/18

    CURSO DE VB

    CAPTULO 41

    ndice de contenidoBLOQUES DE DECISIN..................................................................................................................2

    BLOQUE IF...THEN...ELSE...END IF...........................................................................................2UN CASO ESPECIAL: EL ELSEIF...........................................................................................3

    LA FUNCIN IIF............................................................................................................................4IIF ANIDADOS..........................................................................................................................5

    BLOQUE SELECT CASE...END SELECT...................................................................................6VALOR DIRECTO.....................................................................................................................6VALOR CON COMPARADOR LGICO.................................................................................8

    BLOQUE FOR...NEXT...................................................................................................................BLOQUE FOR EACH...NEXT.....................................................................................................!2BLOQUE "HILE..."END..........................................................................................................!3BLOQUE DO...LOOP # SUS VARIACIONES............................................................................!4

    DO "HILE... LOOP.................................................................................................................!4

    DO UNTIL... LOOP.................................................................................................................!6OTRAS VARIACIONES DE ESCRITURA DEL BLOQUE DO............................................!$UN BLOQUE ESPECIAL: "ITH...END "ITH..............................................................................!$

    1 La BD donde estn los ejemplos de este captulo os la podis bajar aqu.

    1Vistame en http://siliconproject.com.ar/neckkito/

    http://db.tt/kK6FTmrNhttp://db.tt/kK6FTmrN
  • 7/25/2019 CursoVB04

    2/18

    BLOQUES DE DECISIN

    BLOQUE IF...THEN...ELSE...END IF

    a hemos !isto en captulos anteriores el uso de esta"unci#n$ pero !amos a detenernos bre!emente en ella dadoque hablamos de bloques de decisi#n.

    %!identemente$ el esquema de "uncionamiento de este bloque es el si&uiente:

    '( se cumple una condici#n)eali*a unas acciones

    '( +, se cumple la condici#n)eali*a ,tras acciones

    --B-

    Lo anterior es la !ersi#n e0tensa del (2. La se&unda parte$ la '( +,$ se puede omitir.

    (ncluso ha3 una !ersi#n s4per5reducida$ que representa una sola lnea de c#di&o$ en la cualno necesitamos decirle que --B%.

    Vamos a !er las tres posibilidades a tra!s de un ejemplo.

    1.5 %n una base de datos nue!a creamos un "ormulario en blanco. %n l insertamos trescuadros de te0to.

    6.5 'acamos las propiedades del primer cuadro de te0to 3 nos !amos a la pesta7a ,tras +ombre$ 3 le escribimos t0t1. %l se&undo ser t0t6 3 el tercero t0t)esultado

    8.5 -7adimos un bot#n de comando$ al que pondremos de nombre cmd'uma. %n el e!ento -lhacer click le &eneramos el si&uiente c#di&o:

    9ri!ate 'ub cmd'uma;lickBloque (" super5reducido (" (s+ull

  • 7/25/2019 CursoVB04

    3/18

    ?e.t0t)esultado G (nt

  • 7/25/2019 CursoVB04

    4/18

    'i secumplecondici#n %+@,+%'>#di&o

    %), '( secumpleotracondici#n %+@,+%'>#di&o6

    --B-

    Vamos a !erlo con un ejemplo. -pro!echaremos nuestro"ormulario 2'uma. -7adimos un bot#n de comando 3 leponemos de nombre cmd%lse(". -l e!ento -l hacer click le&eneramos el si&uiente c#di&o

  • 7/25/2019 CursoVB04

    5/18

    Vamos a aplicar lo anterior a un ejemplo. %n nuestro "ormulario 2'umas a7adimos un bot#n decomando$ al que llamaremos cmd((". - ese bot#n de comando le &eneramos el si&uientec#di&o:9

    ri!ate 'ub cmd((";lick

  • 7/25/2019 CursoVB04

    6/18

    Valor !erdadero De!uel!e el primer mensaje: (mpar 3 m4ltiplo de cinco Valor "also De!uel!e el se&undo mensaje: (mpar

    +i que decir tiene que hubiramos podido anidar ms ((2dentro de los ((2 anidados. L#&icamente la lectura delc#di&o 3a sera bastante en&orrosa.

    omo nota "inal os dir que la "unci#n ((2 se puede utili*artambin en los objetos onsulta de -ccess. ero$ eimportante$ debis distin&uir el mbito de uso:

    'i lo utili*amos en c#di&o VB- los ar&umentos !an separados por comas. 'i lo utili*amos en onsultas los ar&umentos !an separados por punto 3 coma.

    ,jo con eso.

    BLOQUE SELECT CASE...END SELECT

    ara tomar decisiones en "unci#n de ms de dos condiciones el bloque '%L%@ -'%...%+D'%L%@ es nuestro bloque. Vamos a echar un !ista*o a su "uncionamiento.

    Di!idiremos este ep&ra"e en dos subep&ra"es: que la condici#n sea un !alor directo o quenecesitemos reali*ar una comparaci#n l#&ica.

    VALOR DIRECTO

    'i queremos que la condici#n sea un !alor directo utili*aremos la si&uiente estructura:

    '%L%@ -'% !alor-'% condici#n1

    >#di&o1-'% condici#n6

    >#di&o6-'% condici#n8

    >#di&o89%+D '%L%@

    Vamos a !erlo a tra!s de un ejemplo. reamos un nue!o "ormulario 3 lo llamamos 2'elect.-7adimos un cuadro de te0to$ al que pondremos por nombre t0tFno. -7adimos otro cuadro dete0to 3 le ponemos de nombre t0tDos.

    -7adimos un cuadro combinado 3 lo llamamos cbo,peracion. 'acamos sus propiedades 3!amos a decirle qu !alores puede mostrar ese combo. ara ello nos !amos a la pesta7a Datos

    @ipo de ori&en de la "ila seleccionamos Lista de !alores. +os !amos ahora$ en la misma pesta7a$ a ori&en de la "ila$ 3 escribimos lo si&uiente:

    H5H

    %s decir$ el combo nos mostrar si sumamos$ restamos o multiplicamos.

    Vamos a practicar a asi&naci#n de un c#di&o a un e!ento de combo. -s pues se&uimos con laspropiedades del combo 3 nos !amos a la pesta7a %!entos Despus de actuali*ar$ 3 le

    &eneramos el si&uiente c#di&o

  • 7/25/2019 CursoVB04

    7/18

    9ri!ate 'ub cbo,peracion;-"terFpdate

  • 7/25/2019 CursoVB04

    8/18

    omo !emos$ a7adimos el -'% %L'% despus de todos los -'%.

    Debemos tener en cuenta que '%L%@ -'% reali*a unanlisis secuencial. MEu si&ni"ica esoN Eue reali*a lacomprobaci#n empe*ando$ por orden$ por el primer -'% 3acabando por el 4ltimo. uando encuentra el -'% que

    cumple la condici#n ejecuta el c#di&o 3 sale del proceso.

    M qu si&ni"ica esoN

    ues que para optimi*ar recursos deberamos pro&ramar en los primeros -'% las opcionesque consideremos ms probables$ dejando para las 4ltimas las condiciones que consideremosms improbables

  • 7/25/2019 CursoVB04

    9/18

    ?s&Bo0 A%l primer n4mero es menor que el se&undoA$ !b(n"ormation$ A?'SA >'i ambos son i&uales

    ase (s G !6 ?s&Bo0 A-mbos n4meros son i&ualesA$!b(n"ormation$ A?'SA ase %lse ?s&Bo0 A+o se ha podido reali*ar la comparaci#nA$

    !b(n"ormation$ A?'SA %nd 'elect%nd 'ub9

    omo !eis la mecnica es prcticamente idntica al !alor directo$ s#lo que utili*ando uncomparador. +i que decir tiene que el anterior ejemplo ha sido puesto para que !eis que sepuede comparar con un !alor !ariable$ pero que e!identemente podemos comparar con un!alor "ijo de manera directa. %s decir$ si tenemos un ran&o de !alores predeterminadopodemos aplicar esos !alores directamente$ teniendo en cuenta la secuencialidad del c#di&o.

    or ejemplo$ si mi ran&o de !alores !a del 58

  • 7/25/2019 CursoVB04

    10/18

    del proceso.

    omentar tambin que$ si nos &usta ms$ podemos indicarqu !alor es el +%U@. %s decir que el esquema anteriortambin se habra podido escribir as:

    2,) !alorG1 @, 8

    >-cciones+%U@ !alor

    Vamos a !erlo a tra!s de un ejemplo$ 3 practicaremos de pasadaun poco la "unci#n (nputBo0$ que 3a !imos:

    %n nuestra base de datos de pruebas !amos a crear un "ormulario en blanco 3 lo &uardaremoscomo 22echas. reamos un cuadro de te0to 3 le ponemos de nombre t0t2echa.

    Truco: para e!itarnos tener que introducir controles de tipo de datos en el c#di&o en laspropiedades de t0t2echa nos !amos a la pesta7a 2ormato 2ormato le marcamos 2echa corta. -s -ccess 3a nos controlar que el "ormato introducido sea de "echa$ porque si no lo es

    el propio -ccess lan*a un mensaje de ad!ertencia

  • 7/25/2019 CursoVB04

    11/18

    >Fna !e* "inali*ado el proceso !2echa me reco&e el resultado. Lo mostramos. ?s&Bo0 ALa "echa "inal es A Q !2echa$ !b%0clamation$ A-L 2(+WWWWA%nd 'ub9

    reo que el c#di&o est lo su"icientemente comentado parano tener que a7adir nada ms. 'implemente "ijaos que

    podemos decirle las repeticiones que queremosdirectamente -cciones

    +%U@

    o2,) !alorG1 @, 8 '@% 8

    >-cciones+%U@

    +i que decir tiene que &racias a nuestro '@% podemos utili*ar este bucle como una cuentare&resi!a$ si nos interesara para nuestro c#di&o. %n este caso deberamos escribir$ porejemplo:

    2,) !alorG1 @, 8 '@% 51>-cciones

    +%U@

    Vamos a complicar un poco la cosa. (ma&inemos que queremos que se !a3a incrementandouna unidad como hasta ahora pero si se cumple una condici#n se interrumpa el proceso. araello podemos utili*ar un %U(@ 2,)$ que lo que hace es que$ como habris intuido$ "or*ar lasalida del bucle.

    Vamos a !er un ejemplo qui* un poco absurdo$ pero l#&icamente lo que interesa es co&er lamecnica.

    %n nuestro "ormulario 22echas !amos a a7adir un nue!o bot#n de comando$ al que llamaremoscmd(nterrumperoceso. Lo que !amos a hacer es lo si&uiente:

    %l usuario introduce una "echa alculamos tres das posteriores a esa "echa. %so ser nuestra condici#n deinterrupci#n. Le decimos al c#di&o que nos calcule J das ms a la "echa. L#&icamente$ cuando se lle&ue al tercer da obli&aremos al proceso a interrumpirse 3 asalir del bucle.

    Vamos a !er c#mo se hace. %l c#di&o sera el si&uiente:

    9ri!ate 'ub cmd(nterrumperoceso;lickDe"inimos las !ariables

    11Vistame en http://siliconproject.com.ar/neckkito/

  • 7/25/2019 CursoVB04

    12/18

    Dim !2echa -s Date >o&er el !alor en t0t2echa Dim !2echa'ale -s Date Dim i -s (nte&er >ontador para el bucle 2,)...+%U@

    >apturamos los !alores de las !ariables !2echa G ?e.t0t2echa.Value >Del "ormulario en el queesto3

  • 7/25/2019 CursoVB04

    13/18

    %0it 'ub %nd (" +e0t ?s&Bo0 A+o se encontr# el "ormularioA%nd 'ub9

    omo !emos$ el bucle recorre todos los "ormularios de laBD 3 compara sus nombres con la condici#n del (2. 'i loencuentra se ejecuta dicha condici#n.

    'i ahora$ en la lnea K(" "rm.+ame G A2'electA @henC$ cambiamos2'elect por mi2orm$ podremos !er los resultados en el caso deque no se cumpla la condici#n.

    omo 3a he comentado no le dedicaremos ms tiempo a este bloque -cciones

    Y%+D

    %s decir$ permite una iteracci#n de las mismas acciones mientras se !a3a cumpliendo lacondici#n.

    Vamos a !er un ejemplo mu3 sencillo 3 di!ertido (niciali*amos las !ariables acertado G 2alse

    >(niciamos el bucle Yhile acertado G 2alse nFser G (nputBo0

  • 7/25/2019 CursoVB04

    14/18

    Yend

    ?s&Bo0 AX-certaste el n4meroWA$ !b%0clamation$ A,[WWWWA%nd 'ub9

    omo podemos apreciar$ el bucle se repite mientras la

    condici#n Kacertado G 2alseC se manten&a. or lo tanto$cuando se acierta el n4mero lo 4nico que debemos hacer escambiar el !alor del booleano a @)F% para "or*ar la salidadel proceso.

    %ste bucle no tiene ma3or secreto.

    BLOQUE DO...LOOP Y SUS VARIACIONES

    %l bucle D,...L,, tiene dos !ariantes. Le podemos decir al c#di&o$ de manera &enrica$

    I-\ ?(%+@)-' Kse cumpla una condici#nC

    o tambin

    I-\ I-'@- Kse cumpla una condici#nC

    Vamos a !er por separado ambas opciones$ aunque la mecnica es prcticamente idntica paralas dos.

    DO WILE!!! LOOP

    Vamos a crear un nue!o "ormulario$ al que pondremos de nombre 2Do. reamos un cuadro de

    te0to$ al que le ponemos de nombre t0tValor$ 3 creamos otro cuadro de te0to al que lepondremos de nombre t0t)esults.

    -7adimos un bot#n de comando$ al que llamaremos cmdalcula$ 3 le &eneramos el si&uientec#di&o:9ri!ate 'ub cmdalcula;lickDe"inimos las !ariables Dim !Valor -s Lon& Dim !,bjeti!o -s Lon& Dim !%ncontrado -s Boolean

    >(niciali*amos las !ariables !Valor G ?e.t0tValor.Value !,bjeti!o G !Valor 1 !%ncontrado G 2alse

    >(niciamos los clculos hasta encontrar el !alor objeti!o Do Yhile !%ncontrado G 2alse !Valor G !Valor 1 (" !Valor G !,bjeti!o @hen !%ncontrado G @rue %nd (" Loop

    1OVistame en http://siliconproject.com.ar/neckkito/

  • 7/25/2019 CursoVB04

    15/18

    ?s&Bo0 A'e encontr# el !alor objeti!oA$ !b(n"ormation$ A,[A ?e.t0t)esults.Value G !Valor%nd 'ub9

    Lo que hace el c#di&o$ si lo anali*amos$ es que estableceuna condici#n booleana$ representada por la !ariabla

    !%ncontrado$ a la cual decimos que es 2-L'%. %l bucle Doobli&a a ir sumando una unidad a !Valor en cada iteracci#n3 cuando encuentra el !alor objeti!o cambiamos el !alor de!%ncontrado a @)F%$ lo que obli&a a "inali*ar el bucle.

    omo siempre$ no interesa el ejemplo en s sino la mecnica de su "uncionamiento.

    odemos reali*ar una interrupci#n del c#di&o a tra!s de

    %U(@ D,

    lo que nos permitira salir del bucle aunque no se cumpliera la condici#n. Vamos a modi"icar el

    c#di&o anterior para establecer esa interrupci#n. Lo modi"icaremos de la manera si&uiente:9ri!ate 'ub cmdalcula;lickDe"inimos las !ariables Dim !Valor -s Lon& Dim !,bjeti!o -s Lon& Dim !%ncontrado -s Boolean

    >(niciali*amos las !ariables !Valor G ?e.t0tValor.Value !,bjeti!o G !Valor 1 !%ncontrado G 2alse

    >(niciamos los clculos hasta encontrar el !alor objeti!o Do Yhile !%ncontrado G 2alse !Valor G !Valor 1 (" !Valor G 6J @hen ?s&Bo0 A'e interrumpir el c#di&oA$ !britical$ A(+@%))F(]+A %0it Do %nd (" (" !Valor G !,bjeti!o @hen !%ncontrado G @rue %nd (" Loop

    ?e.t0t)esults.Value G !Valor%nd 'ub9

    omo !emos$ hemos a7adido una condici#n que nos permite interrumpir el c#di&o. 'i el !alor"uera 6J$ por ejemplo$ actuara el %U(@ D,. 'i en nuestro te0tbo0 introducimos el n4mero 6 nose cumplira la condici#n de interrupci#n$ 3 actuara la !ariable booleanaH si introducimos eln4mero 8 s se cumplir la condici#n de interrupci#n$ 3 se nos obli&ar a salir del bucle sinhaber hallado el resultado objeti!o. ,s animo a que lo probis para !er los resultados.

    1JVistame en http://siliconproject.com.ar/neckkito/

  • 7/25/2019 CursoVB04

    16/18

    DO UNTIL... LOOP

    omo habris podido intuir$ este bucle 3 el anterior son losmismos perros con distintos collares. La mecnica de su"uncionamiento es e0actamente la misma.

    ara no dejarlo sin ejemplo os propon&o el si&uiente$aunque deberais ser capaces de hacerlo 3a !osotros sina3uda: introducido un n4mero en nuestro te0tbo0 el c#di&odebe ejecutarse hasta que el !alor objeti!o sea el triple queese n4mero.

    XensadloW

    si al&uien ho3 tiene el da malo$ le dejo aqu c#mo sera ese c#di&o:

    9ri!ate 'ub cmdalculaU8;lickDe"inimos las !ariables

    Dim !Valor -s Lon&

    Dim !,bjeti!o -s Lon&

    Dim !%ncontrado -s Boolean

    >(niciali*amos las !ariables

    !Valor G ?e.t0tValor.Value !,bjeti!o G !Valor 8

    !%ncontrado G 2alse

    >(niciamos los clculos hasta encontrar el !alor objeti!o

    Do Fntil !%ncontrado G @rue

    !Valor G !Valor 1

    (" !Valor G !,bjeti!o @hen

    !%ncontrado G @rue %nd ("

    Loop

    ?s&Bo0 A'e encontr# el !alor objeti!oA$ !b(n"ormation$ A,[A

    ?e.t0t)esults.Value G !Valor

    %nd 'ub

    9

    1PVistame en http://siliconproject.com.ar/neckkito/

  • 7/25/2019 CursoVB04

    17/18

    +i que decir tiene que aqu tambin podramos utili*ar el %U(@ D, para "or*ar la salida delproceso.

    OTRAS VARIACIONES DE ESCRITURA DEL BLOQUE DO

    ara !uestra in"ormaci#n os comentar que lo queacabamos de !er del bloque D,... admite ciertas

    !ariaciones en su escritura. 'on !ariaciones que 3o no sueloutili*ar porque pienso

  • 7/25/2019 CursoVB04

    18/18

    reamos un "ormulario en blanco$ al que llamaremos 2Yith$ e introducimos en l una etiqueta$a la que llamaremos lblYith. %scribimos cualquier cosa en dicha etiqueta.

    -hora a7adimos un bot#n de comando$ al que llamaremoscmdambiaropiedades$ 3 le &eneraremos el si&uientee!ento:

    9

    ri!ate 'ub cmdambiaropiedades;lick