0% encontró este documento útil (0 votos)
322 vistas121 páginas

Curso de Visual Basic Avanzado

Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
322 vistas121 páginas

Curso de Visual Basic Avanzado

Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 121

Curso de Avanzado

Curso de Visual Basic Avanzado

SEPTIEMBRE 1999

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

Curso de Visual Basic Avanzado

INTRODUCCIN AL MANUAL..............................................................................................................7 1. FORMULARIOS Y EVENTOS.............................................................................................................8 INTRODUCCIN...........................................................................................................................................8 CONOCIMIENTOS TERICOS........................................................................................................................9 Formularios, controles y eventos..........................................................................................................9 Ciclo de vida de un formulario..............................................................................................................9 La ventana Debug................................................................................................................................10 EJEMPLO PROPUESTO................................................................................................................................11 EJEMPLO RESUELTO..................................................................................................................................12 Formulario 1........................................................................................................................................12 Formulario 2........................................................................................................................................13 2. IDENTIFICACIN DE OBJETOS (CONTROLES) EN UN FORMULARIO..............................14 INTRODUCCIN.........................................................................................................................................14 CONOCIMIENTOS TERICOS......................................................................................................................15 Cmo utili ar controles! eventos y "ro"iedades.................................................................................1# Controles comunes! Label, $e%t&o%, Command&utton, C'ec(&o%.....................................................1) *dentificar el ti"o de un control...........................................................................................................1+ Coleccin Controls de un formulario..................................................................................................1+ EJEMPLO PROPUESTO................................................................................................................................18 EJEMPLO RESUELTO..................................................................................................................................19 3. CLASES Y OBJETOS (I).....................................................................................................................20 INTRODUCCIN.........................................................................................................................................20 CONOCIMIENTOS TERICOS......................................................................................................................21 Los ob,etos en -isual &asic.................................................................................................................21 Conce"to de enca"sulacin ./ublic v.s. /rivate0................................................................................22 1tili acin de variables de ob,eto.......................................................................................................22 *nstruccin /ro"erty............................................................................................................................23 -ariables est2ticas...............................................................................................................................23 EJEMPLO PROPUESTO................................................................................................................................25 EJEMPLO RESUELTO..................................................................................................................................26 Formulario...........................................................................................................................................2) Clase Fic'a..........................................................................................................................................2) 4. CLASES Y OBJETOS (II)....................................................................................................................28 INTRODUCCIN.........................................................................................................................................28 CONOCIMIENTOS TERICOS......................................................................................................................29 Cmo crear colecciones de ob,etos! la clase Collection.....................................................................29 /ro"iedades y m3todos del ob,eto Collection.....................................................................................29 Cmo acceder a los elementos de una coleccin! claves e 4ndices.....................................................30 5gregar elementos a una coleccin.....................................................................................................31 6liminacin de elementos de una coleccin........................................................................................31 7ecu"eracin de elementos de una coleccin.....................................................................................32 Control 89croll&ar.............................................................................................................................33 :2s conce"tos de clases! eventos *nitiali e y $erminate....................................................................3; EJEMPLO PROPUESTO................................................................................................................................35 <b,etivo...............................................................................................................................................3# Desarrollo del e,em"lo........................................................................................................................3) EJEMPLO RESUELTO.................................................................................................................................38 Formulario...........................................................................................................................................3= Clase 5genda.......................................................................................................................................;1 5. TECNOLO !A ACTIVE"...................................................................................................................43 INTRODUCCIN.........................................................................................................................................43

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

Curso de Visual Basic Avanzado CONOCIMIENTOS TERICOS......................................................................................................................44 >u3 es un com"onente 5ctive?...........................................................................................................;; $i"os de com"onentes 5ctive?............................................................................................................;; Creacin din2mica de matrices...........................................................................................................;# /reservar el contenido de las matrices din2micas..............................................................................;# :atrices de controles..........................................................................................................................;) /ublicar un control 5ctive? en un "2gina @eb..................................................................................;) EJEMPLO PROPUESTO................................................................................................................................48 <b,etivo...............................................................................................................................................;= Desarrollo del e,em"lo........................................................................................................................;= EJEMPLO RESUELTO..................................................................................................................................50 #. ACCESO A BASES DE DATOS (DAO Y JET).................................................................................52 INTRODUCCIN.........................................................................................................................................52 CONOCIMIENTOS TERICOS......................................................................................................................53 D5< y Aet.............................................................................................................................................#3 6structura de una a"licacin de bases de datos en -isual basic con D5< y Aet...............................#3 6l modelo de ob,etos D5<..................................................................................................................#; /rogramacin con D5< y Aet.............................................................................................................#; EJEMPLO PROPUESTO................................................................................................................................58 <b,etivo...............................................................................................................................................#= Desarrollo del e,em"lo........................................................................................................................#9 EJEMPLO RESUELTO..................................................................................................................................61 :odDefiniciones..................................................................................................................................)1 Frm5genda..........................................................................................................................................)1 Cla5genda...........................................................................................................................................); ClaD5<BAet.........................................................................................................................................)# 7. ACCESO A BASES DE DATOS (DAO Y ODBCDIRECT).............................................................70 INTRODUCCIN.........................................................................................................................................70 CONOCIMIENTOS TERICOS......................................................................................................................71 <"ciones de utili acin de <D&C con D5<.......................................................................................+1 6structura de una a"licacin de bases de datos en -isual basic con D5< y <D&CDirect...............+1 /rogramacin con D5< y <D&CDirect.............................................................................................+1 EJEMPLO PROPUESTO................................................................................................................................73 <b,etivo...............................................................................................................................................+3 Desarrollo del e,em"lo........................................................................................................................+3 EJEMPLO RESUELTO..................................................................................................................................74 ClaD5<B<D&CDirect........................................................................................................................+; 8. ACCESO A BASES DE DATOS (RDO).............................................................................................78 INTRODUCCIN.........................................................................................................................................78 CONOCIMIENTOS TERICOS......................................................................................................................79 6l modelo de ob,etos 7D<..................................................................................................................+9 6structura de una a"licacin de bases de datos en -isual basic con 7D<........................................+9 /rogramacin con 7D<......................................................................................................................=0 EJEMPLO PROPUESTO................................................................................................................................82 <b,etivo...............................................................................................................................................=2 Desarrollo del e,em"lo........................................................................................................................=2 EJEMPLO RESUELTO..................................................................................................................................83 Cla7D<...............................................................................................................................................=3 $. EL RE ISTRO DE %INDO%S..........................................................................................................87 INTRODUCCIN.........................................................................................................................................87 CONOCIMIENTOS TERICOS......................................................................................................................88 >u3 es el registro de @indoCs............................................................................................................== Cmo acceder al registro de @indoCs................................................................................................== 6structura del registro de @indoCs....................................................................................................== Cmo utili ar el 5/* de @indoCs........................................................................................................=9 EJEMPLO PROPUESTO................................................................................................................................93

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

Curso de Visual Basic Avanzado <b,etivo...............................................................................................................................................93 Desarrollo del e,em"lo........................................................................................................................93 EJEMPLO RESUELTO..................................................................................................................................95 Frm/resentacion.................................................................................................................................9# Frm7egistro.........................................................................................................................................9+ :od7egistro........................................................................................................................................9+ A&'NDICE A( ES&ECIFICACIONES) LIMITACIONES Y FORMATOS DE ARC*IVOS DE VISUAL BASIC.......................................................................................................................................101 REQUISITOS DEL SISTEMA PARA APLICACIONES DE VISUAL BASIC.......................................................101 LIMITACIONES DE LOS PRO ECTOS........................................................................................................101 LIMITACIONES DE CONTROLES...............................................................................................................101 DEmero total de controles.................................................................................................................101 Limitaciones "ara determinados controles ......................................................................................102 LIMITACIONES DE CDI!O......................................................................................................................102 /rocedimientos, ti"os y variables......................................................................................................102 $abla de entradas de mdulo............................................................................................................102 LIMITACIONES DE LOS DATOS................................................................................................................103 Datos de formulario, mdulos est2ndar y mdulos de clase.............................................................103 /rocedimientos, ti"os y variables......................................................................................................103 $i"os definidos "or el usuario...........................................................................................................103 6s"acio de "ila..................................................................................................................................103 Limitaciones de los recursos del sistema..........................................................................................103 7ecursos de @indoCs........................................................................................................................103 "ORMATOS DE ARC#IVOS DE PRO ECTO................................................................................................104 6%tensiones de arc'ivos de "royecto.................................................................................................10; 5rc'ivos varios y de tiem"o de diseFo..............................................................................................10; 5rc'ivos de tiem"o de e,ecucin.......................................................................................................10# 6structuras de formularios................................................................................................................10# DEmero de versin.............................................................................................................................10# Descri"cin del formulario...............................................................................................................10) &loGues de control.............................................................................................................................10) <rden de los bloGues de control........................................................................................................10) &loGues de control incrustados.........................................................................................................10+ Controles de menE.............................................................................................................................10+ $eclas de m3todo abreviado..............................................................................................................10= Comentarios en la descri"cin del formulario..................................................................................10= /ro"iedades de la descri"cin de un formulario.............................................................................10= 9inta%is...............................................................................................................................................10= -alores binarios de "ro"iedades.......................................................................................................10= /ro"iedad *con..................................................................................................................................109 /ro"iedad $ab*nde%..........................................................................................................................109 1nidades de medida..........................................................................................................................109 -alores de colores.............................................................................................................................109 <b,etos de "ro"iedades.....................................................................................................................110 Cdigo de &asic.................................................................................................................................110 6rrores al cargar arc'ivos de formulario.........................................................................................110 :ensa,es de registro de error en la carga de un formulario............................................................110 Formato del arc'ivo de "royecto ..vb"0............................................................................................112 A&'NDICE B( CONVENCIONES DE CODIFICACIN..................................................................114 $POR QU% E&ISTEN LAS CONVENCIONES DE CODI"ICACIN'.................................................................114 CONVENCIONES DE CODI"ICACIN M(NIMAS..........................................................................................114 CONVENCIONES DE NOMBRES DE OBJETOS.............................................................................................114 PRE"IJOS SU!ERIDOS PARA CONTROLES.................................................................................................115 PRE"IJOS SU!ERIDOS PARA LOS OBJETOS DE ACCESO A DATOS )DAO*.................................................116 PRE"IJOS SU!ERIDOS PARA MEN+S........................................................................................................116 SELECCIN DE PRE"IJOS PARA OTROS CONTROLES................................................................................117 CONVENCIONES DE NOMBRES DE CONSTANTES VARIABLES...............................................................117 /refi,os de alcance de variables........................................................................................................11=

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

Curso de Visual Basic Avanzado Constantes.........................................................................................................................................11= -ariables............................................................................................................................................11= $i"os de datos de variables...............................................................................................................119 Dombres descri"tivos de variables y "rocedimientos.......................................................................119 $i"os definidos "or el usuario...........................................................................................................119 CONVENCIONES DE CODI"ICACIN ESTRUCTURADA..............................................................................119 Convenciones de comentarios al cdigo...........................................................................................119 Dar formato al cdigo.......................................................................................................................120 5gru"acin de constantes .................................................................................................................121 <"eradores H y I..............................................................................................................................121 Crear cadenas "ara :sg&o%, *n"ut&o% y consultas 9>L.................................................................121

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

Curso de Visual Basic Avanzado

Introduccin al manual
Visual Basic se a convertido en un im!ortante entorno de desarrollo "ue cu#re todos los as!ectos de la !rogramaci$n !ro%esional& desde las a!licaciones %inancieras a la construcci$n de com!onentes !ara 'nternet( )n la actualidad !uede considerarse como la erramienta !or e*celencia !ara la !rogramaci$n en entornos +indo,s& gracias a su !otencia& com!ara#le a la de lengua-es tradicionalmente considerados su!eriores como . o .//& !ero %undamentalmente !or su sencille0 y %acilidad de uso( )ste manual est dirigido a a"uellas !ersonas "ue& teniendo nociones #sicas de Visual Basic& deseen ad"uirir conocimientos s$lidos de los !rinci!ios y t1cnicas involucradas en el desarrollo de a!licaciones con este entorno de desarrollo( )n concreto& en este curso se darn las #ases !ara ad"uirir conocimientos en2 .lases y o#-etos 3ecnologa active 4 5cceso a #ases de datos 675O& J)3& O7B.87'9).3& 97O: )l registro de +indo,s

;i #ien en todos los ca!tulos se e*!ondrn los conocimientos te$ricos "ue los autores emos estimado su%icientes !ara desenvolverse con soltura en cada tema !ro!uesto& este manual no !retende ser un li#ro de re%erencia de Visual Basic 6!ara eso e*isten multitud de li#ros t1cnicos& o la !ro!ia ayuda de Visual Basic:( Los autores emos !re%erido limitar en la medida de lo !osi#le la carga te$rica del manual& !otenciando el as!ecto !rctico con la inclusi$n de e-em!los !ro!uestos y resueltos& totalmente %uncionales& "ue ayudarn al lector en la com!rensi$n de los contenidos del curso( 3odos los ca!tulos de este manual siguen la misma estructura2 <na introducci$n en la "ue se e*!ondrn los temas a tratar y el o#-etivo del ca!tulo( .onocimientos te$ricos del ca!tulo( <n e-em!lo en el "ue se !onen en !rctica los conocimientos reci1n ad"uiridos = !or su!uesto& una soluci$n al e-em!lo !ro!uesto(

Visual Basic !ro!orciona una gran cantidad de elementos "ue !ermiten aumentar la !otencia de nuestras a!licaciones considera#lemente( 5un"ue el estudio individual de dic os o#-etos se esca!a al !ro!$sito de este curso& en los e-em!los iremos !ro!oniendo el uso de di%erentes ti!os de o#-etos !ara ir aumentando nuestro vocabulario en Visual Basic(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

>

Curso de Visual Basic Avanzado

1. ormularios ! eventos
Introduccin
)l !rimer !aso !ara crear una a!licaci$n con Visual Basic es crear la inter%a0& la !arte visual de la a!licaci$n con la "ue va a interactuar el usuario( Los %ormularios y controles son los elementos de desarrollo #sicos "ue se usan !ara crear la inter%a0? son los o#-etos con los "ue se tra#a-a !ara desarrollar la a!licaci$n( Los %ormularios son o#-etos "ue e*!onen las !ro!iedades "ue de%inen su a!ariencia& los m1todos "ue de%inen su com!ortamiento y los eventos "ue de%inen la %orma en "ue interact@an con el usuario( Aediante el esta#lecimiento de las !ro!iedades del %ormulario y la escritura de c$digo de Visual Basic !ara res!onder a sus eventos se !ersonali0a el o#-eto !ara cu#rir las necesidades de la a!licaci$n( 3odos los lengua-es de !rogramaci$n !ara +indo,s com!arten la misma caracterstica2 la orientaci$n a eventos( Las a!licaciones creadas !ara +indo,s no siguen una estructura de e-ecuci$n lineal( )sto im!lica "ue un !rograma no va a seguir una secuencia %i-a de instrucciones& e-ecutndose lnea a lnea& sino "ue de#e res!onder a las acciones "ue el usuario& el sistema o!erativo u otras a!licaciones reali0an so#re 1l? estas acciones se conocen en Visual Basic como eventos( 3odos los elementos "ue !odemos utili0ar en la construcci$n de una a!licaci$n en Visual Basic 6%ormularios& controles 5ctive4& etc: reci#en unos eventos !redeterminados como "etFocus& #ostFocus o Activate( Bodemos controlar estos eventos introduciendo el c$digo "ue deseemos en la corres!ondiente su#rutina de atenci$n al evento( )l o#-etivo de este ca!tulo es recordar los conocimientos #sicos& !ero im!rescindi#les& !ara el mane-o de %ormularios en Visual Basic( Caremos inca!i1 en el conce!to de %ormulario como o#-eto& con sus !ro!iedades& m1todos y eventos( ;e com!ro#ar "ue un %ormulario s$lo se elimina de memoria cuando se eliminan todas las re%erencias al mismo& e*ctamente igual "ue cual"uier o#-eto( .omentaremos es!ecialmente los eventos "ue !uede reci#ir un %ormulario& tanto en el !roceso de carga como en la e-ecuci$n de la a!licaci$n y en el !roceso de descarga del mismo(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

Curso de Visual Basic Avanzado

Conocimientos tericos ormularios$ controles ! eventos


Los %ormularios y controles de Visual Basic son o#-etos "ue e*!onen sus !ro!ios m1todos& !ro!iedades y eventos( Las !ro!iedades se !ueden considerar como atri#utos de un o#-eto& los m1todos como sus acciones y los eventos como sus res!uestas( <n o#-eto de uso diario como el glo#o de un niEo tiene tam#i1n !ro!iedades& m1todos y eventos( )ntre las !ro!iedades de un glo#o se incluyen atri#utos visi#les como el !eso& el dimetro y el color( Otras !ro!iedades descri#en su estado 6in%lado o desin%lado: o atri#utos "ue no son visi#les& como su edad( Bor de%inici$n& todos los glo#os tienen estas !ro!iedades? lo "ue vara de un glo#o a otros son los valores de estas !ro!iedades( <n glo#o tiene tam#i1n m1todos o acciones in erentes "ue !uede e%ectuar( 3iene un m1todo in%lar 6la acci$n de llenarlo de elio: o un m1todo desin%lar 6e*!eler su contenido: y un m1todo elevarse 6si se de-a esca!ar:( 7e nuevo& todos los glo#os !ueden e%ectuar estos m1todos( Los glo#os tienen adems res!uestas !rede%inidas a ciertos eventos e*ternos( Bor e-em!lo& un glo#o res!ondera al evento de !inc arlo desin%lndose o al evento de soltarlo elevndose en el aire( .omo o#-etos "ue son& los %ormularios !ueden e-ecutar m1todos y res!onder a eventos( )l evento Resize de un %ormulario se desencadena siem!re "ue se cam#ia el tamaEo de un %ormulario& ya sea !or una acci$n del usuario o a trav1s del c$digo( )sto !ermite reali0ar acciones como mover o cam#iar el tamaEo de los controles de un %ormulario cuando an cam#iado sus dimensiones( )l evento Activate se !roduce siem!re "ue un %ormulario se convierte en el %ormulario activo? el evento Deactivate se !roduce cuando otro %ormulario u otra a!licaci$n se convierte en activo( )stos eventos son adecuados !ara iniciar o %inali0ar acciones del %ormulario( Bor e-em!lo& en el evento Activate !odramos escri#ir c$digo !ara resaltar el te*to de un determinado cuadro de te*to? con el evento 7eactivate !odramos guardar los cam#ios e%ectuados en un arc ivo o en una #ase de datos( Bara acer visi#le un %ormulario se invoca el m1todo Show( Bor e-em!lo& la sentencia Form1(; o, mostrara el %ormulario Form1( 'nvocar el m1todo Show tiene el mismo e%ecto "ue esta#lecer a True la !ro!iedad Visible del %ormulario(

Ciclo de vida de un %ormulario


.om!render el ciclo de vida de un %ormulario es #sico !ara el !rogramador de Visual Basic& !uesto "ue son estos elementos los "ue !ermitirn al usuario interactuar con la a!licaci$n( ;$lo com!rendiendo "u1 acciones !odrn reali0arse so#re los %ormularios y en "u1 momentos !odremos controlar adecuadamente la e-ecuci$n de nuestros !rogramas( )n la vida de un %ormulario !uede !asar !or cinco estados di%erentes( )n orden cronol$gico son2 Creado& el %ormulario e*iste como o#-eto& !ero todava no es visi#le( .uando un %ormulario est siendo creado& se genera el evento Initialize( )n esta %ase del !roceso de carga de un %ormulario no !odemos actuar so#re los o#-etos "ue lo com!onen(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

Curso de Visual Basic Avanzado Car'ado& ya !odemos acceder a los controles del %ormulario& !ero 1ste no es visi#le( <n %ormulario se encuentra en este estado en el !roceso de carga& cuando se oculta o cuando se esta#lece a False su !ro!iedad Visible( .uando se inicia el !roceso de carga de un %ormulario& se genera el evento Load( Mostrado& el estado normal de un %ormulario( Bodemos acceder a todos los elementos "ue lo com!onen y !odemos actuar so#re ellos& !ues el %ormulario es visi#le( 7urante este estado& cada ve0 "ue ay "ue re!intar el %ormulario 6!or e-em!lo& cuando una ventana "ue se a situado so#re 1ste desa!arece: se genera el evento Paint( 5dems& si el %ormulario recu!era el %oco des!u1s de a#erlo !erdido 6!or e-em!lo& al cam#iar a otra a!licaci$n con 5lt/3a# y volver des!u1s al %ormulario:& se genera el evento Activate( (escar'ado& una ve0 terminado este !roceso el %ormulario no es visi#le& y sus com!onentes no son accesi#les( )l !roceso de descarga se !roduce cuando se cierra el %ormulario 6!ulsando el #ot$n & e-ecutando el m1todo Unload del %ormulario& etc:( )l !roceso de descarga de un %ormulario& a su ve0& generar dos eventos2 uer!"nload y "nload 6en este orden:( )n los dos eventos !odemos detener el !roceso de descarga esta#leciendo el valor del !armetro Cancel a cual"uier n@mero distinto de G( )n general& a!rovec aremos estos eventos !ara li#erar la memoria ocu!ada !or los elementos "ue !ertenecen al %ormulario antes de "ue este se cierre& salvar el tra#a-o "ue est1 !endiente de guardado& etc( Eliminado& aun"ue un %ormulario est1 descargado& mientras e*iste cual"uier re%erencia al mismo no ser eliminado totalmente de memoria( .uando se !roduce esta circunstancia 6el %ormulario est descargado y nadie ace re%erencia a 1l: se genera el evento Terminate& y el %ormulario desa!arece de memoria(

#a ventana (e)u'
;i #ien este elemento del entorno de desarrollo de Visual Basic no tiene una relaci$n directa con el tema "ue se trata en este ca!tulo& "ueremos recordar su %uncionalidad& !uesto "ue !ara el !rogramador es una erramienta im!ortante en el !roceso de desarrollo de una a!licaci$n( )n dic o !roceso es necesario dis!oner de un elemento donde !oder mostrar mensa-es& valores de varia#les& etc( "ue nos ayuden en la de!uraci$n de los !rogramas( )l o#-eto Debu# de Visual Basic nos !ermite escri#ir en la !antalla 'nmediato 6 Debu# Inmediate $indow: utili0ando el m1todo Print( 3am#i1n !odemos com!ro#ar el valor de una varia#le si utili0amos la sentencia ?nombre_variable en la ventana 'nmediato& o esta#lecer dic o valor con la sentencia nombre_variable=valor

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

1G

Curso de Visual Basic Avanzado

%&em'lo 'ro'uesto
.on este e-em!lo veremos los estados !or los "ue !asa un %ormulario durante su ciclo de vida( 5dems& com!ro#aremos c$mo un %ormulario no se elimina de memoria asta "ue no se li#eran todas las re%erencias al mismo en el !rograma( 1( .rearemos los siguientes %ormularios

2( )n el %ormulario 1& insertaremos c$digo en las su#rutinas 'nitiali0e& Load& 5ctivate& Baint& Huery<nload& <nload y 3erminate& !ara "ue cada ve0 "ue se lance el evento corres!ondiente mostremos en la ventana 7e#ug el %ormulario so#re el "ue se a generado el evento y el nom#re del evento( 3( 5Eadiremos c$digo en el .licI del #ot$n !ara mostrar el %ormulario 2( 3am#i1n mantendremos una re%erencia al %ormulario 2 6!ara evitar "ue se lance su evento 3erminate al cerrarse:( 4( 'nsertaremos c$digo en las su#rutinas Load& <nload y 3erminate del %ormulario 2& !ara mostrar en la !antalla 7e#ug el %ormulario y el evento "ue se !roduce en cada caso(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

11

Curso de Visual Basic Avanzado

%&em'lo resuelto ormulario 1


JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK J )-em!lo 1 del .urso de Visual Basic 5van0ado J J )l o#-etivo de este e-em!lo es reconocer los eventos "ue un J %ormulario !uede reci#ir& as como el orden en el "ue se J reci#en JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK O!tion )*!licit Brivate ;u# .ommand1K.licI6: 7im FrmLuevoFormulario 5s Form J Muardamos un enlace al %ormulario 2& !ara "ue no J salte su 3erminate cuando lo cerremos 6saltar J el 3erminate del %ormulario 2 cuando salte el J 3erminate del %ormulario 1 y se !ierda la re%erencia J al segundo %ormulario: ;et FrmLuevoFormulario N Formulario2 FrmLuevoFormulario(; o, )nd ;u# Brivate ;u# FormK5ctivate6: 7e#ug(Brint OFormulario12 )vento 5ctivateO )nd ;u# Brivate ;u# FormK'nitiali0e6: 7e#ug(Brint OFormulario12 )vento 'nitiali0eO )nd ;u# ;u# FormKLoad6: 7e#ug(Brint OFormulario12 )vento LoadO )nd ;u# Brivate ;u# FormKHuery<nload6.ancel 5s 'nteger& <nloadAode 5s 'nteger: 7e#ug(Brint OFormulario12 )vento Huery<nloadO )nd ;u# Brivate ;u# FormKBaint6: 7e#ug(Brint OFormulario12 )vento BaintO )nd ;u# Brivate ;u# FormK3erminate6: 7e#ug(Brint OFormulario12 )vento 3erminateO )nd ;u# Brivate ;u# FormK<nload6.ancel 5s 'nteger: 7e#ug(Brint OFormulario12 )vento <nloadO )nd ;u#

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

12

Curso de Visual Basic Avanzado

ormulario *
JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK J )-em!lo 1 del .urso de Visual Basic 5van0ado J J )l o#-etivo de este e-em!lo es reconocer los eventos "ue un J %ormulario !uede reci#ir& as como el orden en el "ue se J reci#en JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK O!tion )*!licit Brivate ;u# FormKLoad6: 7e#ug(Brint OFormulario22 )vento LoadO )nd ;u# Brivate ;u# FormK3erminate6: 7e#ug(Brint OFormulario22 )vento 3erminateO )nd ;u# Brivate ;u# FormK<nload6.ancel 5s 'nteger: 7e#ug(Brint OFormulario22 )vento <nloadO )nd ;u#

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

13

Curso de Visual Basic Avanzado

*. Identi%icacin de o)+etos ,controles- en un %ormulario


Introduccin
Los controles son o#-etos "ue estn contenidos en los o#-etos de %ormularios( .ada ti!o de control tiene su !ro!io con-unto de !ro!iedades& m1todos y eventos& "ue lo acen adecuado !ara una %inalidad determinada( 5lgunos de los controles "ue !uede usar en las a!licaciones son ms adecuados !ara escri#ir o mostrar te*to& mientras "ue otros controles !ermiten tener acceso a otras a!licaciones y !rocesan los datos como si la a!licaci$n remota %ormara !arte del c$digo( )ste ca!tulo !resenta los conce!tos #sicos del tra#a-o con %ormularios y controles& y las !ro!iedades& m1todos y eventos "ue tienen asociados( ;e e*!lican tam#i1n algunos de los controles estndar& y c$mo es !osi#le di%erenciar en tiem!o de e-ecuci$n los ti!os de controles utili0ados en nuestros %ormularios(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

14

Curso de Visual Basic Avanzado

Conocimientos tericos Cmo utilizar controles& eventos ! .ro.iedades


<n evento es una acci$n reconocida !or un %ormulario o un control& es decir& un suceso "ue a sido !rovocado !or el usuario& el sistema o!erativo u otros !rogramas en e-ecuci$n y "ue re!ercute en un elemento de nuestra a!licaci$n( Bor e-em!lo& son eventos la !ulsaci$n de una tecla o el !aso del !untero de rat$n so#re un o#-eto( 5 trav1s de los eventos !odemos determinar el com!ortamiento del o#-eto con su entorno(:( Las a!licaciones controladas !or eventos e-ecutan c$digo Basic como res!uesta a un evento( .ada %ormulario y control de Visual Basic tiene un con-unto de eventos !rede%inidos( ;i se !roduce uno de dic os eventos y el !rocedimiento de evento asociado tiene c$digo& Visual Basic llama a ese c$digo( 5un"ue los o#-etos de Visual Basic reconocen automticamente un con-unto !rede%inido de eventos& nostros decidimos cundo y c$mo se res!onder a un evento determinado( 5 cada evento le corres!onde una secci$n de c$digo 6un !rocedimiento de evento:( .uando deseamos "ue un control res!onda a un evento& escri#imos c$digo en el !rocedimiento de ese evento(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

15

Curso de Visual Basic Avanzado

Los ti!os de eventos reconocidos !or un o#-eto varan& !ero muc os ti!os son comunes a la mayora de los controles( Bor e-em!lo& la mayora de los o#-etos reconocen el evento Clic(2 si un usuario ace clic en un %ormulario& se e-ecuta el c$digo del !rocedimiento de evento Clic( del %ormulario? si un usuario ace clic en un #ot$n de comando& se e-ecuta el c$digo del !rocedimiento de evento Clic( del #ot$n( )l c$digo en cada caso ser di%erente( Las !ro!iedades de los controles determinan su as!ecto& c$mo se mostrar al usuario( )stas !ro!iedades de%inen sus atri#utos2 color& tamaEo& %orma& etc( 5l igual "ue en el caso de los eventos& los o#-etos de Visual Basic com!arten una serie de !ro!iedades comunes& como )ame o Visible& y otras es!ec%icas de su ti!o(

Controles comunes& #a)el$ Te/tBo/$ CommandButton$ C0ec1Bo/


)n Visual Basic ay un con-unto de controles comunes "ue son usados en la gran mayora de a!licaciones( )n la siguiente ta#la se muestra el uso normal de estos controles2 Control La#el 6)ti"ueta: 3e*tBo* 6.uadro de te*to: .ommandButton 6Bot$n: . ecIBo* 6.asilla de activaci$n: 2so t3.ico ! descri.cin )reve Aostrar un te*to descri!tivo "ue el usuario no !uede modi%icar( )l te*to se es!eci%ica en la !ro!iedad Ca'tion. Aostrar un te*to "ue !uede ser editado( La !rinci!al !ro!iedad es Te*t& "ue determina el te*to "ue se(muestra en dic o control( .omen0ar o terminar un !roceso( .uando el usuario !ulsa este #ot$n& se !roduce el evento Clic(( ;eleccionar una o!ci$n 6no e*cluyente: de entre un con-unto de o!ciones( ;u !rinci!al !ro!iedad es Value& "ue indica si est seleccionada 61: o no 6G:( ;eleccionar una valor dentro una lista( La !ro!iedad Te*t determina el elemento seleccionado !or el usuario(

ListBo* 6.uadro de lista:

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

16

Curso de Visual Basic Avanzado

Identi%icar el ti.o de un control


)*isten dos %unciones "ue nos !ermiten identi%icar el ti!o de control "ue estamos tratando2 T!'e)ame y T!'e+, La %unci$n 3y!eLame nos !ermite conocer el nom#re de la clase a la "ue !ertenece un o#-eto& lo "ue nos !osi#ilita adecuar el c$digo "ue escri#imos al ti!o de o#-eto "ue estemos tratando& as como crear %unciones generales !ara diversos ti!os de controles( ;i tenemos un #ot$n 6.ommandButton1: en nuestro %ormulario& utili0ando la sentencia 3y!eLame 6.ommandButton1: O#tendramos la cadena O.ommandButtonO& es decir& la clase a la "ue !ertenece el #ot$n( La %unci$n 3y!eO% es algo ms restrictiva( 7e#e ir en una sentencia de condici$n 6una sentencia del ti!o if ... then ...(:( )sta %unci$n nos !ermite identi%icar la clase a la "ue !erteneceel o#-eto& !ara !oder o!erar en consecuencia( <n e-em!lo de uso sera2 '% 3y!eO% Ai.ontrol 's .ommandButton 3 en ((( else ((( endi%

Coleccin Controls de un %ormulario


<n %ormulario no es ms "ue un lienzo donde se pintan controles( )s decir& !odemos entender un %ormulario como un o#-eto "ue !osee una coleccin de controles( )sta colecci$n se llama Controls( Bodemos acceder a cada uno de los controles de un %ormulario a trav1s de esta colecci$n( ;in necesidad de conocer a !riori su nom#re& #astara recorrer toda la colecci$n y acer una rutina !ara lan0ar el c$digo a e-ecutar !ara cada ti!o de controles del %ormulario(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

1>

Curso de Visual Basic Avanzado

%&em'lo 'ro'uesto
)n este e-em!lo distinguiremos los ti!os de o#-etos "ue tiene un %ormulario& accediendo a las !ro!iedades del o#-eto en el "ue nos encontremos durante el recorrido de la colecci$n de o#-etos( 1( .rearemos el siguiente %ormulario2

2( )n el Load del %ormulario& insertaremos c$digo !ara "ue una ve0 cargado el %ormulario tengamos en la ventana de 7e#ug el nom#re y el ti!o de todos los o#-etos "ue se an cargado( 3( )n %unci$n del ti!o de o#-eto& cam#iaremos su color de %ondo2 1 La#el2 ro-o . ecIBo*2 verde 3e*tBo*2 a0ul .ommandButton2 amarillo

Lota2 !ara !oder cam#iar el color de %ondo de un .ommandButton& es necesario esta#lecer a 1 6Mra! ical: su !ro!iedad ;tyle( 1999 Jorge Ordovs Oromenda y Vicente Lema Osca 1D

Curso de Visual Basic Avanzado

%&em'lo resuelto
JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK J )-em!lo 2 del .urso de Visual Basic 5van0ado J J )l o#-etivo de este e-em!lo es identi%icar los o#-etos contenidos J en un %ormulario y o!erar con ellos en %unci$n de su ti!o( JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK O!tion )*!licit Brivate ;u# FormKLoad6: 7im O#-.ontrol 5s O#-ect J 9ecorremos todos los controles del %ormulario For )ac O#-.ontrol 'n Ae(.ontrols J )n %unci$n del ti!o de control& cam#iaremos su color de J %ondo ;elect .ase 3y!eLame6O#-.ontrol: .ase OLa#elO O#-.ontrol(BacI.olor N v#9ed .ase O3e*tBo*O O#-.ontrol(BacI.olor N v#Blue .ase O. ecIBo*O O#-.ontrol(BacI.olor N v#Mreen .ase O.ommandButtonO O#-.ontrol(BacI.olor N v#=ello, )nd ;elect J ;acaremos su nom#re y ti!o de o#-eto a la !antalla J 7e#ug 7e#ug(Brint 3y!eLame6O#-.ontrol: P O2 O P O#-.ontrol(Lame Le*t O#-.ontrol )nd ;u#

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

19

Curso de Visual Basic Avanzado

4. Clases ! o)+etos ,IIntroduccin


Casta a ora emos visto los o#-etos "ue !ro!orciona Visual Basic& !ero nosotros tam#i1n !odemos crear o#-etos( )n este ca!tulo se darn los conocimientos #sicos necesarios !ara entender c$mo !odemos utili0ar o#-etos en Visual Basic( .ada o#-eto de Visual Basic se de%ine mediante una clase( Bodemos entender las clases como un Omodelo conce!tualO de los o#-etos( Bara com!render la relaci$n entre un o#-eto y su clase& !odemos !ensar en un cu#o de !laya y un castillo de arena( )l cu#o es la clase( 7e%ine las caractersticas de cada castillo de arena& como su tamaEo y %orma( ;e utili0a la clase !ara crear 6instanciar: o#-etos( Los o#-etos son los castillos de arena y como era de es!erar todos tienen las mismas !ro!iedades y eventos( )n el ca!tulo anterior emos a#lado de las !ro!iedades y los eventos de un o#-eto( Bero adems de estas caractersticas los o#-etos !ro!orcionan un con-unto de mtodos& "ue determinan las acciones "ue el o#-eto !uede reali0ar( La !rogramaci$n orientada a o#-etos !ro!orciona un en%o"ue totalmente distinto al utili0ado en la !rogramaci$n clsica 6estructuras& ti!os de datos& !rogramaci$n secuencial(((:( Bien a!licada& la !rogramaci$n orientada a o#-etos minimi0a el tiem!o dedicado a la de!uraci$n de los !rogramas& y %acilita la reutili0aci$n del c$digo( 5s mismo este modelo de !rogramaci$n nos !ermite controlar "u1 caractersticas de nuestros o#-etos son visibles !ara las a!licaciones "ue los utili0an& lo "ue se denomina encapsulacin(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

2G

Curso de Visual Basic Avanzado

Conocimientos tericos #os o)+etos en Visual Basic


Los o#-etos estn encapsulados? es decir& contienen su !ro!io c$digo y sus !ro!ios datos& lo cual %acilita su mantenimiento ms "ue los m1todos de escritura de c$digo tradicionales( Los o#-etos de Visual Basic tienen propiedades, mtodos y eventos. Las !ro!iedades son los datos "ue descri#en un o#-eto( Los m1todos son lo "ue !uede acer con el o#-eto( Los eventos son tareas "ue reali0a el o#-eto? !odemos escri#ir c$digo !ara e-ecutarlo cuando se !rodu0can eventos( Los o#-etos de Visual Basic se crean a !artir de clases; as& un o#-eto se dice "ue es una instancia de una clase. La clase de%ine las interfaces de un o#-eto& si el o#-eto es !@#lico y en "u1 circunstancias se !uede crear( Bara utili0ar un o#-eto tiene "ue mantener una referencia a l en una variable de ob eto. )l ti!o de enlace determina la velocidad con la "ue se tiene acceso a los m1todos de un o#-eto mediante la varia#le de o#-eto( Una varia#le de o#-eto !uede ser un enlace en tiempo de compilacin 6el ms lento: o un enlace en tiempo de dise!o(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

21

Curso de Visual Basic Avanzado

5l con-unto de !ro!iedades y m1todos se le llama interfaz. La inter%a0 !redeterminada de un o#-eto de Visual Basic es una interfaz dual "ue admite las %ormas de enlace anteriormente mencionadas( ;i una varia#le de o#-eto est correctamente definida 6es decir& (im 5 As nombre_clase:& utili0ar la %orma ms r!ida de enlace( 5dems de su inter%a0 !redeterminada& los o#-etos de Visual Basic !ueden im!lementar inter%aces adicionales !ara !ro!orcionar polimorfismo( )l !olimor%ismo le !ermite mani!ular muc os ti!os de%erentes de o#-etos sin !reocu!arse de su ti!o( Las interfaces m"ltiples son una caracterstica del Aodelo de o#-etos com!onentes 6.OA:? !ermiten "ue los !rogramas evolucionen con el tiem!o& agregando nueva %uncionalidad sin a%ectar al c$digo e*istente(

Conce.to de enca.sulacin ,Pu)lic v.s. Private<na de las caractersticas ms im!ortantes de la !rogramaci$n orientada a o#-etos es el conce!to de enca.sulacin2 un o#-eto #ien desarrollado es a"uel "ue !uede ser utili0ado !or otros elementos de %orma e%iciente& !ero sin "ue 1stos cono0can c$mo %unciona internamente( )sto nos !ermite cam#iar la %orma en "ue un o#-eto funciona sin "ue los elementos "ue utili0an el o#-eto noten dic o cam#io( )n Visual Basic& las !ro!iedades y m1todos de una clase !ueden ser de dos ti!os2 Pu)lic& accesi#les !or cual"uier elemento del !royecto( Private& accesi#les s$lo !or los elementos de la clase donde estn de%inidos(

2tilizacin de varia)les de o)+eto


<tili0ar una varia#le de o#-eto es similar a utili0ar una varia#le convencional& !ero con un !aso adicional2 asignar un o#-eto a la varia#le( Brimero& declararemos la varia#le con una sentencia (im variable As clase Luego& asignaremos un o#-eto a esa varia#le& utili0ando la instrucci$n Set2 Set variable N ob eto Bero atencin2 el o#-eto 0a de e/istir !ara !oder ser asignado a una varia#le de o#-eto( )s decir& !reviamente emos tenido "ue utili0ar la instrucci$n 6e7& #ien en la misma sentencia en la "ue declaramos la varia#le de o#-eto2 (im varia#le As 6e7 .lase O #ien en otro lugar del c$digo2 Set varia#le N 6e7 .lase La sentencia 6e7 crea una instancia de la clase es!eci%icada 6es decir& crea un o#-eto nuevo a !artir del modelo "ue es la clase:( .uando ya no sean de utilidad necesitamos li#erar la memoria y los recursos "ue los o#-etos consumen( )n la mayora de los casos el sistema o!erativo se encargar de esta tarea si se nos olvida a nosotros& !ero no ay "ue con%iarse 6!od1is imaginar el rendimiento de una

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

22

Curso de Visual Basic Avanzado m"uina en la "ue tengamos& !or e-em!lo& 5 instancias de +ord al mismo tiem!o(((:( Bara li#erar la memoria y los recursos "ue consume un o#-eto utili0aremos la sentencia2 Set varia#le N 6ot0in'

Instruccin Pro'ert!
.omo se mencion$ anteriormente& es desea#le "ue un elemento e*terno a un o#-eto no !ueda acceder de %orma incontrolada a sus !ro!iedades( Bodemos controlar esto creando todas las !ro!iedades de ti!o Private& !ero((( Qy si "ueremos "ue sean accesi#les !or los elementos "ue utilicen el o#-eto& !ero sin arriesgarnos a "ue 1stos realicen acciones no !ermitidasR( Bor e-em!lo& !odemos necesitar "ue el 3BV 63erminal Bunto de Venta: de una tienda !ueda modi%icar el saldo de una tar-eta 6lo "ue se corres!ondera con la com!ra de un cliente:? sin em#argo& no tiene sentido "ue dic o 3BV !ermita al vendedor com!ro#ar el saldo de la cuenta del cliente& o acer una trans%erencia a su !ro!ia cuenta( Visual Basic !ermite acceder y modi%icar el valor de una !ro!iedad !rivada a trav1s de los procedimientos de propiedad o Pro'ert!( ;e !ro!orcionan tres ti!os de !rocedimientos2 Procedimiento Pro.ert! "et Pro.ert! #et Pro.ert! Set Pro.sito 7evuelve el valor de una !ro!iedad )sta#lece el valor de una !ro!iedad )sta#lece el valor de una !ro!iedad de o#-eto 6es decir& una !ro!iedad "ue contiene una re%erencia a un o#-eto:

Lormalmente se de%ine una !are-a Pro'ert! -et.Pro'ert! Let !or cada !ro!iedad !rivada de una clase( Pro'ert! -et nos !ermite acceder al valor almacenado en dic a !ro!iedad& mientras "ue Pro'ert! Let nos !osi#ilita asignarle un valor( Pro'ert! Set tam#i1n !ermite esta#lecer el valor de una !ro!iedad !rivada( La di%erencia entre este !rocedimiento y Pro'ert! Let es el modo en el "ue se asigna valor a la !ro!iedad( Visual Basic llama a Pro.ert! Set si se utili0a la instrucci$n Set y a Pro.ert! #et en caso contrario( )sta !ro!iedad se utili0a !ara matener el estndar de los o#-etos& ya "ue !ara asignarles un valor se usa la !ala#ra reservada Set.

Varia)les est8ticas
5un"ue este tema no est directamente relacionado con el tema del ca!tulo& "ueremos recordar este conce!to !ara !oder a!licarlo en el e-em!lo !ro!uesto( La vida de una varia#le est directamente relacionada con la %orma y el lugar donde se declara( )l valor de las varia#les declaradas a nivel de m$dulo y !@#licas se !reserva durante todo el tiem!o de e-ecuci$n( ;in em#argo& las varia#les locales declaradas con (im s$lo e*isten mientras se e-ecuta el !rocedimiento en el cual se an declarado( La !r$*ima ve0 "ue se e-ecute el !rocedimiento se reiniciali0arn todas sus varia#les locales( ;in em#argo es !osi#le !reservar el valor de una varia#le local si se declara como est#tica, utili0ando la !ala#ra clave Static2 Static nombre_variable as tipo_dato

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

23

Curso de Visual Basic Avanzado

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

24

Curso de Visual Basic Avanzado

%&em'lo 'ro'uesto
)l o#-etivo de este e-em!lo es conocer el !roceso de creaci$n e instanciaci$n de una clase en Visual Basic( 3am#i1n se !retende "ue el lector se %amiliarice con el ciclo de vida de un o#-eto y la necesidad de li#erar la memoria asociada con cada uno de los o#-etos creados( Bara !racticar estos conce!tos crearemos una agenda tele%$nica #sica( 1( 7iseEaremos el siguiente %ormulario2

2( 7e%iniremos una clase Fic a con cinco !ro!iedades2 nombre, apellidos, direccin, telfono y n"mero( Bara cada una de las !ro!iedades crearemos sus corres!ondientes m1todos de !ro!iedad Pro'ert! -et y Pro'ert! Let( 3( 'm!lementaremos tam#i1n un m1todo $uestra%& "ue muestre mediante un ms#bo* el valor de las !ro!iedades de un o#-eto Fic a creado !reviamente( 4( )n el %ormulario& una ve0 esta#lecidas las !ro!iedades de la %ic a 6nom#re& a!ellidos(((: se !ulsar el #ot$n !ara crear una nueva %ic a( ;er necesario crear un nuevo o#-eto de la clase Fic a y esta#lecer sus !ro!iedades( 5( Bara esta#lecer la !ro!iedad n@mero de la %ic a& crearemos una varia#le esttica "ue incrementaremos en una unidad cada ve0 "ue se !ulse el #ot$n& de %orma "ue nunca creemos dos %ic as con el mismo n@mero( 6( <na ve0 creada la nueva %ic a& llamaremos a su m1todo Auestra6:& !ara "ue nos enseEe el valor de sus !ro!iedades( >( Bor @ltimo& no !odemos olvidarnos de destruir el o)+eto creado igualndolo a )othin#(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

25

Curso de Visual Basic Avanzado

%&em'lo resuelto ormulario


JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK J )-em!lo 3 del .urso de Visual Basic 5van0ado J J )l o#-etivo de este e-em!lo es %amilliari0arnos con el uso de o#-etos( JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK O!tion )*!licit Brivate ;u# But.rearFic aK.licI6: 7im O#-Fic a 5s .laFic a ;tatic 'ntLumFic a 5s 'nteger J .reamos un nuevo o#-eto de la clase %ic a ;et O#-Fic a N Le, .laFic a J 'ncrementamos el n@mero de %ic as creadas 'ntLumFic a N 'ntLumFic a / 1 J )sta#lecemos las !ro!iedades de la nueva %ic a O#-Fic a(;trLom#re N 3*tLom#re O#-Fic a(;tr5!ellidos N 3*t5!ellidos O#-Fic a(;tr7ireccion N 3*t7ireccion O#-Fic a(;tr3ele%ono N 3*t3ele%ono O#-Fic a('ntLumero N 'ntLumFic a J Llamamos al m1todo AetAostrar del o#-eto !ara J "ue muestre los datos de la %ic a O#-Fic a(AetAostrar J )liminamos el o#-eto creado ;et O#-Fic a N Lot ing )nd ;u#

Clase ic0a
JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK J )-em!lo 3 del .urso de Visual Basic 5van0ado J J 7e%inici$n de la clase F'.C5& todos los o#-etos %ic as tendrn esta inter%ace( JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK O!tion )*!licit J Bro!iedades de la clase .laFic a Brivate Var'ntLumero 5s 'nteger Brivate Var;trLom#re 5s ;tring Brivate Var;tr5!ellidos 5s ;tring Brivate Var;tr7ireccion 5s ;tring

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

26

Curso de Visual Basic Avanzado Brivate Var;tr3ele%ono 5s ;tring J A1todos !ara acceder a la !ro!iedad Var'ntLumero Bu#lic Bro!erty Met 'ntLumero6: 5s ;tring 'ntLumero N Var'ntLumero )nd Bro!erty Bu#lic Bro!erty Let 'ntLumero6Bar'ntLumero 5s ;tring: Var'ntLumero N Bar'ntLumero )nd Bro!erty J A1todos !ara acceder a la !ro!iedad Var;trLom#re Bu#lic Bro!erty Met ;trLom#re6: 5s ;tring ;trLom#re N Var;trLom#re )nd Bro!erty Bu#lic Bro!erty Let ;trLom#re6Bar;trLom#re 5s ;tring: Var;trLom#re N Bar;trLom#re )nd Bro!erty J A1todos !ara acceder a la !ro!iedad Var;tr5!ellidos Bu#lic Bro!erty Met ;tr5!ellidos6: 5s ;tring ;tr5!ellidos N Var;tr5!ellidos )nd Bro!erty Bu#lic Bro!erty Let ;tr5!ellidos6Bar;tr5!ellidos 5s ;tring: Var;tr5!ellidos N Bar;tr5!ellidos )nd Bro!erty J A1todos !ara acceder a la !ro!iedad Var;tr7ireccion Bu#lic Bro!erty Met ;tr7ireccion6: 5s ;tring ;tr7ireccion N Var;tr7ireccion )nd Bro!erty Bu#lic Bro!erty Let ;tr7ireccion6;tr7ireccion 5s ;tring: Var;tr7ireccion N ;tr7ireccion )nd Bro!erty J A1todos !ara acceder a la !ro!iedad Var;tr3ele%ono Bu#lic Bro!erty Met ;tr3ele%ono6: 5s ;tring ;tr3ele%ono N Var;tr3ele%ono )nd Bro!erty Bu#lic Bro!erty Let ;tr3ele%ono6Bar;tr3ele%ono 5s ;tring: Var;tr3ele%ono N Bar;tr3ele%ono )nd Bro!erty J A1todo !ara mostrar los datos de una %ic a Bu#lic ;u# AetAostrar6: AsgBo* OL@mero2 O P Var'ntLumero P v#.rL% P K OLom#re2 O P Var;trLom#re P v#.rL% P K O5!ellidos2 O P Var;tr5!ellidos P v#.rL% P K O7irecci$n2 O P Var;tr7ireccion P v#.rL% P K O3el1%ono2 O P Var;tr3ele%ono& & OFic aO )nd ;u#

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

2>

Curso de Visual Basic Avanzado

9. Clases ! o)+etos ,IIIntroduccin


Casta a ora emos a!rendido c$mo se crea e instancia una clase sencilla& y los conce!tos ms im!ortantes de la !rogramaci$n orientada a o#-etos en Visual Basic( )n este ca!tulo a!renderemos a desarrollar clases mas com!le-as utili0ando colecciones de clases mas sencillas( Bara ello a!renderemos a usar colecciones de clases& y aremos inca!i1 en la o!timi0aci$n en tiem!o y recursos del sistema al acer #@s"uedas& inserciones ySo #orrados mediante indices o claves de una colecci$n( 3am#i1n se !retende "ue el lector se %amiliarice con el uso de controles menos utili0ados como la #arra de des!la0amiento ori0ontal 6C;crollBar:(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

2D

Curso de Visual Basic Avanzado

Conocimientos tericos Cmo crear colecciones de o)+etos& la clase Collection


<na colecci$n es una %orma de agru!ar elementos relacionados( Visual Basic !ro!orciona una gran cantidad de colecciones !rede%inidas 6 Forms& Controls& etc:& !ero adems !ermite la creaci$n de colecciones !ersonali0adas utili0ando la clase gen1rica Collection( Los o#-etos Collection almacenan cada elemento en una varia#le Variant( 7e esta %orma& la lista de cosas "ue se !ueden agregar a un o#-eto Collection es igual "ue la lista de cosas "ue se !ueden almacenar en una varia#le Variant( )ntre ellas se incluyen los ti!os de datos& los o#-etos y las matrices estndar& !ero no los ti!os de%inidos !or el usuario( Las varia#les Variant siem!re ocu!an 16 #ytes& inde!endientemente de lo "ue contienen & !or lo "ue el uso de o#-etos Collection no es tan e%iciente como el uso de matrices( ;in em#argo& no es necesario a!licar ReDim a un o#-eto Collection& lo "ue !roduce un c$digo ms lim!io y ms %cil de mantener( 5dems& los o#-etos Collection o%recen un acceso !or clave e*tremadamente r!ido& "ue no o%recen las matrices( 5 !esar del tamaEo de las varia#les Variant& a#r muc as ocasiones en las "ue tenga ms sentido utili0ar un o#-eto Collection !ara almacenar todos los ti!os de datos enumerados anteriormente( ;in em#argo& siem!re tenemos "ue tener !resente "ue si #ien los o#-etos Collection nos !ermitirn escri#ir un c$digo lim!io y %cil de mantener& estamos !agando el !recio de almacenar los elementos en varia#les Variant(

Pro.iedades ! m:todos del o)+eto Collection


Los o#-etos Collection dis!onen de !ro!iedades y m1todos "ue se !uede utili0ar !ara insertar& eliminar y recu!erar los elementos de la colecci$n( Pro.iedad o m:todo (escri.cin A1todo Add 5grega elementos a la colecci$n( Bro!iedad Count 7evuelve el n@mero de elementos de la colecci$n( ;$lo lectura( A1todo Item 7evuelve un elemento& !or ndice o !or clave( A1todo Remove )limina un elemento de la colecci$n& !or ndice o !or clave( )stas !ro!iedades y m1todos s$lo !ro!orcionan los servicios ms #sicos de las colecciones( Bor e-em!lo& el m1todo Add no !uede com!ro#ar el ti!o de o#-eto "ue se agrega a la colecci$n !ara asegurar "ue la colecci$n contenga un @nico ti!o de o#-eto( Bodemos !ro!orcionar una %uncionalidad ms ro#usta& y !ro!iedades& m1todos y eventos adicionales& si creamos nuestra !ro!ia clase de colecci$n& como aremos en el e-em!lo corres!ondiente a este ca!tulo(

As e*actamente& una varia#le Variant ocu!a siem!re 16 #ytes incluso si los datos se encuentran almacenados en cual'uier otra parte. Bor e-em!lo& si asignamos una cadena o una matri0 a una varia#le de ti!o Variant& 1sta contiene un !untero a una co!ia de la cadena o de los datos de la matri0( )n los sistemas de 32 #its s$lo se utili0an como !untero 4 #ytes de la varia#le Variant y realmente no ay ning@n dato en ella( ;i almacenamos un o#-eto& la varia#le de ti!o Variant contiene la re%erencia de o#-eto& como si %uera una varia#le de o#-eto( 'gual "ue ocurre con las cadenas y las matrices& solamente se utili0an 4 #ytes( Los ti!os de datos num1ricos se almacenan ocu!ando siem!re los 16 #ytes( 1999 Jorge Ordovs Oromenda y Vicente Lema Osca 29

Curso de Visual Basic Avanzado

Cmo acceder a los elementos de una coleccin& claves e 3ndices


Los servicios #sicos de agregar& eliminar y recu!erar elementos de una colecci$n de!enden de claves e ndices( <na clave es un valor Strin#( Buede ser un nom#re& un n@mero de documento de identidad& un n@mero de la seguridad social o sim!lemente un dato de ti!o Inte#er convertido en ti!o Strin#( )l m1todo Add nos !ermite asociar una clave con un elemento& como se descri#e ms adelante( <n (ndice es un dato de ti!o #on' entre uno 61: y el n@mero de elementos de la colecci$n ( Bodemos controlar el valor inicial del ndice de un elemento mediante los !armetros be,ore y a,ter& !ero su valor !uede cam#iar si agregamos o eliminamos otros elementos(

<na colecci$n !uede tener base cero o base uno& de!endiendo de su ndice inicial 6lo !rimero "uiere decir "ue el ndice del !rimer elemento de la colecci$n es cero y lo segundo "uiere decir "ue es uno:( )-em!los de colecciones con #ase cero son las colecciones Forms y Controls( )l o#-eto Collection es un e-em!lo de colecci$n con #ase uno( Las colecciones ms antiguas de Visual Basic suelen tener #ase cero& mientras "ue las ms recientes suelen tener #ase uno( )s ms intuitivo utili0ar las colecciones con #ase uno& ya "ue su ndice va desde uno a Count& donde Count es la !ro!iedad "ue devuelve el n@mero de elementos de una colecci$n( Bor otra !arte& el ndice de una colecci$n con #ase cero va desde cero al valor de la !ro!iedad Count menos uno(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

3G

Curso de Visual Basic Avanzado

Bodemos utili0ar el ndice !ara recorrer los elementos de una colecci$n( Bor e-em!lo& si insertamos el c$digo siguiente en el Load de un %ormulario a!arecera en la !antalla Debu# el nom#re de los controles "ue estn !egados en 1l2 7im 'nt.ontador as 'nteger For 'nt.ontador N G 3o .ontrols(.ount 8 1 7e#ug(Brint .ontrols6'nt.ontador:(Lame P v#.rL% Le*t )*iste otra %orma de acceder a los elementos de una colecci$n "ue !ro!orciona un mayor rendimiento2 utili0ar la sentencia For %ach( )sta o!ci$n es nota#lemente ms r!ida "ue la iteraci$n mediante ndice& aun"ue esto no es cierto en todas las im!lementaciones de colecciones2 de!ende de c$mo almacena la colecci$n los datos internamente( Bodemos codi%icar de nuevo el e-em!lo anterior utili0ando esta sentencia2 7im Var7ato as Variant For )ac Var7ato 'n .ontrols 7e#ug(Brint Var7ato(Lame P v#.rL% Le*t Var7ato

A're'ar elementos a una coleccin


Bara agregar un elemento a una colecci$n utili0aremos el m1todo Add( La sinta*is es la siguiente2 coleccin.Add ,elemento As Variant ;$ clave As Variant< ;$ )e%ore As Variant< ;$ a%ter As Variant< Bor e-em!lo& imaginemos un o#-eto Bersona "ue tiene una !ro!iedad 7L' "ue lo identi%ica de %orma @nica& y una colecci$n de !ersonas denominada .olBersonas( Bara agregar un o#-eto nuevo a la colecci$n utili0aramos la sentencia2 .olBersonas(5dd Bersona& Bersona(7L' ;e su!one "ue la !ro!iedad 7L' es un ti!o Strin#( ;i esta !ro!iedad es un n@mero 6!or e-em!lo& un ti!o Lon#:& utili0aramos la %unci$n CStr !ara convertirlo al valor Strin# re"uerido !or las claves2 .olBersonas(5dd Bersona& .;tr6Bersona(7L': )l m1todo Add ace!ta argumentos con nom#re( Bara agregar una !ersona nueva como tercer elemento de la colecci$n& !odemos escri#ir2 .olBersonas(5dd Bersona& Bersona(7L'& a%ter2N2 Bodemos utili0ar los argumentos con nom#re be,ore y a,ter !ara mantener ordenada una colecci$n de o#-etos( Bor e-em!lo& before:=1 inserta un elemento al !rinci!io de la colecci$n& ya "ue los o#-etos Collection estn #asados en uno(

Eliminacin de elementos de una coleccin


Bara eliminar un elemento de una colecci$n& utili0aremos el m1todo Remove( La sinta*is es la siguiente2

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

31

Curso de Visual Basic Avanzado coleccin(Remove (ndice )l argumento (ndice !uede ser la !osici$n del elemento "ue desea eliminar o su clave( ;i la clave del tercer elemento de la colecci$n de !ersonas es O123456>+O& !odemos utili0ar cual"uiera de estas dos instrucciones !ara eliminarlo2 .olBersonas(9emove 3 o #ien .olBersonas(9emove O123456>+O

Recu.eracin de elementos de una coleccin


Bara recu!erar un elemento de una colecci$n& utili0aremos el m1todo Item( La sinta*is es la siguiente2 ;Set< variable = coleccin(Item,(ndice.omo ocurre con el m1todo Remove& el ndice !uede ser la !osici$n dentro de la colecci$n o la clave del elemento( )n el mismo e-em!lo "ue !ara el m1todo Remove& cual"uiera de estas dos instrucciones recu!erar el tercer elemento de la colecci$n2 ;et Bersona N .olBersonas('tem63: o #ien ;et Bersona N .olBersonas('tem6 O123456>+O: ;i utili0amos n@meros enteros como claves& de#emos em!lear la %unci$n CStr !ara convertirlos a cadenas antes de !asarlos a los m1todos Item o Remove( Los o#-etos Collection siem!re asumen "ue un n@mero entero es un ndice( )l m1todo Item es el m1todo !redeterminado de los o#-etos Collection& !or lo "ue !odemos omitirlo cuando "ueramos acceder a un elemento de una colecci$n( 7e esta %orma& el e-em!lo de c$digo anterior tam#i1n se !uede escri#ir de la siguiente manera2 ;et Bersona N .olBersonas63: o #ien ;et Bersona N .olBersonas6 O123456>+O: Los o#-etos Collection mantienen sus n@meros de ndice automticamente al agregar y eliminar elementos( )l ndice num1rico de un elemento dado !uede variar a lo largo del tiem!o( Lo es conveniente& !or tanto& guardar un valor num1rico de ndice y es!erar recu!erar el mismo elemento ms tarde( Lo me-or es utili0ar claves !ara este !ro!$sito(

Lo es conveniente !ermitir "ue los o#-etos Collection decidan si el valor "ue estn reci#iendo es un ndice o una clave( ;i deseamos "ue un valor se inter!rete como clave y la varia#le "ue contiene el valor no es de ti!o Strin#& de#emos utili0ar CStr !ara convertirla( ;i deseamos "ue un valor se inter!rete como ndice y la varia#le "ue contiene el valor no es de un ti!o de datos num1ricos& de#emos utili0ar CLn# !ara convertirla(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

32

Curso de Visual Basic Avanzado

Control >ScrollBar
Las #arras de des!la0amiento !ro!orcionan un medio sencillo de recorrer largas listas de elementos o grandes cantidades de in%ormaci$n al des!la0arse ori0ontal o verticalmente dentro de una a!licaci$n o de un control( Las #arras de des!la0amiento son un elemento com@n de la inter%a0 de +indo,s 95 y de +indo,s L3( Barra de des!la0amiento ori0ontal 6/Scroll0ar: Barra de des!la0amiento vertical 6VScroll0ar: Los controles >ScrollBar y VScrollBar no son igual "ue las #arras de des!la0amiento incor!oradas "ue se !ueden encontrar en +indo,s o "ue las ad-untas a los cuadros de te*to& los cuadros de lista& los cuadros com#inados o los %ormularios A7' de Visual Basic( 7ic as #arras de des!la0amiento a!arecen automticamente cuando la a!licaci$n o el control contiene ms in%ormaci$n de la "ue se !uede !resentar con el tamaEo actual de la ventana 6o #ien& en el caso de los cuadros de te*to y los %ormularios A7'& cuando la !ro!iedad ScrollBars est esta#lecida a True:(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

33

Curso de Visual Basic Avanzado

)n las versiones anteriores de Visual Basic& las #arras de des!la0amiento se solan utili0ar como dis!ositivos de entrada( ;in em#argo& las recomendaciones de la inter%a0 de +indo,s sugieren a ora "ue se utilicen como dis!ositivos de entrada los controles Slider en lugar de los controles ScrollBar( )l control Slider de +indo,s 95 se incluye en la )dici$n Bro%esional y la )dici$n )m!resarial de Visual Basic( Los controles Scroll0ar siguen siendo @tiles en Visual Basic !or"ue !ro!orcionan ca!acidad de des!la0amiento a las a!licaciones o a los controles "ue no la !ro!orcionan de %orma automtica( Los controles Scroll0ar utili0an los eventos Scroll y Chan#e !ara su!ervisar el movimiento del cuadro de des!la0amiento a lo largo de la #arra de des!la0amiento( Evento . ange ;croll (escri.cin Ocurre des!u1s de mover el cuadro de des!la0amiento( Ocurre al mover el cuadro de des!la0amiento( Lo ocurre si se ace clic en las %lec as o en la #arra de des!la0amiento(

)l evento Scroll !ro!orciona acceso al valor de la #arra de des!la0amiento cuando 1sta se arrastra( )l evento Chan#e se !roduce des!u1s de li#erar el cuadro de des!la0amiento o cuando se ace clic en la #arra o en las %lec as de des!la0amiento( La !ro!iedad Value 6"ue de %orma !redeterminada es G: es un valor entero "ue se corres!onde con la !osici$n del cuadro de des!la0amiento dentro de la #arra de des!la0amiento( .uando la !osici$n del cuadro de des!la0amiento tiene el valor mnimo& 1ste se mueve a la !osici$n situada ms a la i0"uierda 6en las #arras de des!la0amiento ori0ontal: o a la !osici$n ms alta 6en las #arras de des!la0amiento vertical:( .uando el cuadro de des!la0amiento tiene el valor m*imo& se mueve a la !osici$n situada ms a la derec a o a la ms #a-a( 7e %orma similar& un valor a medio camino entre los lmites del intervalo coloca el cuadro de des!la0amiento en la mitad de la #arra de des!la0amiento( 5dems de utili0ar los clics del rat$n !ara cam#iar el valor de la #arra de des!la0amiento& el usuario tam#i1n !uede arrastrar el cuadro de des!la0amiento a cual"uier !osici$n de la #arra( )l valor resultante de!ende de la !osici$n del cuadro de des!la0amiento& !ero siem!re se encuentra dentro del intervalo de%inido !or las !ro!iedades 1in y 1a* esta#lecidas !or el usuario(

M8s conce.tos de clases& eventos Initialize ! Terminate


3odas las clases !ro!orcionan dos eventos !rede%inidos2 Initialize y Terminate( Lormalmente el !rocedimiento de evento Initialize contiene el c$digo "ue se e-ecuta en el momento de la creaci$n del o#-eto( )l evento Terminate suele contiene el c$digo necesario !ara li#erar el o#-eto cuando 1ste se destruye( ;u!one una #uena norma de !rogramaci$n asegurarnos& utili0ando este m1todo& "ue toda la memoria utili0ada !or un o#-eto se li#era en el momento de su destrucci$n(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

34

Curso de Visual Basic Avanzado

%&em'lo 'ro'uesto ?)+etivo


)l o#-etivo es crear una agenda de tel1%onos en la "ue !odamos consultar %cilmente las %ic as& as como insertar nuevas %ic as o #orrar %ic as e*istentes( Bara ello& crearemos una nueva clase ClaA'enda2 Pro.iedades2 Col ic0as2 colecci$n de las %ic as almacenadas en la agenda M:todos2 Pro.ert! Int6um ic0as2 devuelve el n@mero de %ic as almacenadas en la agenda unction Crear ic0a,Str6om)re$ StrA.ellidos$ Str(ireccion$ StrTele%ono- as Inte'er2 crea una nueva %ic a y la inserta en la colecci$n .olFic as( 7evuelve el n@mero de la %ic a( unction Borrar ic0a,Int6um ic0a-2 #orra la %ic a cuyo n@mero se !asa como argumento( unction ic0a,IntIndice- As Cla ic0a2 devuelve la %ic a corres!ondiente a la !osici$n 'nt'ndice en la colecci$n de %ic as .olFic as Su) Class@Terminate,-2 eliminaremos todas las %ic as de la colecci$n .olFic as& as como la !ro!ia colecci$n& antes de "ue el o#-eto se elimine de memoria )n el %ormulario !odremos reali0ar tres acciones2 Crear una nueva %ic0a2 !rimero !ulsaremos el #ot$n 6ueva %ic0a& con lo "ue se #orrarn los cuadros de te*to y se incrementar el lmite su!erior de la #arra de scroll( <na ve0 introducidos los datos de la nueva %ic a& !ulsaremos el #ot$n Crear %ic0a& donde se llamar al m1todo Crear ic0a de la clase ClaA'enda& o#teniendo el n@mero de %ic a resultante& "ue nos servir !ara !oder #orrarla en caso necesario( Consultar una %ic0a e/istente2 utili0ando la #arra de scroll !odremos consultar todas las %ic as de la agenda( .ada ve0 "ue cam#ie el valor de la #arra de scroll& actuali0aremos el %ormulario !ara mostrar los datos de la %ic a corres!ondiente 6!or e-em!lo& si el valor de la #arra de scroll es 3& mostraremos la cuarta %ic a de la colecci$n? ay "ue recordar "ue el lmite in%erior de la #arra de scroll es G& mientras "ue una colecci$n em!ie0a en 1:( .ada ve0 "ue cam#iemos de %ic a& actuali0aremos el n@mero de la %ic a actual( Borrar la %ic0a actual2 utili0aremos el n@mero de %ic a actual !ara llamar al m1todo Borrar ic0a de la clase ClaA'enda( 7ecrementaremos el lmite m*imo de la #arra de scroll& y actuali0aremos el %ormulario !ara "ue muestra los datos de la %ic a siguiente o anterior a la #orrada(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

35

Curso de Visual Basic Avanzado

(esarrollo del e+em.lo


1( .rearemos el siguiente %ormulario2

2( .rearemos una clase 5genda con una !ro!iedad !rivada .olFic as de ti!o Collection& "ue no tendr m1todos Pro'ert! asociados( .rearemos un m1todo Pro'ert! -et llamado Int6um ic0as "ue nos devuelva el n@mero de %ic as de la colecci$n .olFic as( 3( 'm!lementaremos un m1todo !@#lico .rearFic a "ue reci#e como argumentos el nom#re& a!ellido& direcci$n y tel1%ono y crea una %ic a nueva 6utili0aremos la clase Fic a de%inida en el e-em!lo 3:& asignndole un n@mero 6este n@mero ser una es!ecie de Tcam!o autonum1ricoU& "ue generaremos incrementalmente:( 5dems de crear la nueva %ic a& la introduce en la colecci$n .olFic as& !oniendo como clave el n@mero de la %ic a 6como la clave tiene "ue ser una cadena& ay "ue acer la conversi$n a string de dic o n@mero:( 4( 'm!lementaremos tam#i1n un m1todo !@#lico BorrarFic a& "ue reci#e como argumento la clave de la %ic a "ue "ueremos eliminar( )ste m1todo elimina la %ic a de memoria y tam#i1n de la colecci$n( 5( 3am#i1n crearemos un m1todo !@#lico Fic a& "ue reci#e como argumento el ndice de la %ic a dentro de la colecci$n .olFic as y devuelve la %ic a corres!ondiente( 6( .omo @ltimo elemento de la clase& en el evento Terminate li#eraremos todo el es!acio de memoria "ue !odamos tener reservado !ara las %ic as y la colecci$n( >( )n el %ormulario crearemos un o#-eto de la clase 5genda& y una varia#le 'ntLumFic a5ctual "ue indicar el n@mero de la %ic a cuyos datos a!arecen en el %ormulario( .omo estas varia#les van a ser utili0adas en todas las %unciones del %ormulario& las crearemos como varia#les glo#ales del %ormulario( D( 5l !ulsar el #ot$n TLueva %ic aU& de#emos aumentar la !ro!iedad 1a* de la #arra de scroll& !osicionarnos en el @ltimo elemento y lim!iar los datos 6nom#re& a!ellidos& direcci$n y tel1%ono:& !re!arando el %ormulario !ara insertar una nueva %ic a( 6 A?+oB& !ara la !rimera %ic a& no es necesario incrementar el lmite m*imo de la #arra de scroll& ni lim!iar el %ormulario:(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

36

Curso de Visual Basic Avanzado 9( <na ve0 insertados los datos de la nueva %ic a& !ulsaremos el #ot$n T.rear %ic aU& donde llamaremos al m1todo .rearFic a del o#-eto 5genda y actuali0aremos el ttulo del %rame& donde !ondr TFic a LU 6siendo L el n@mero de la nueva %ic a& "ue o#tendremos como valor de retorno del m1todo .rearFic a:( 1G( .ada ve0 "ue cam#ie la #arra de scroll 6evento Chan#e: de#emos actuali0ar los datos del %ormulario& mostrando la in%ormaci$n de la %ic a corres!ondiente en la colecci$n .olFic as del o#-eto 5genda( .rearemos una %unci$n 5ctuali0arBarra;croll "ue se encargar de ello 6A?+oB2 la %unci$n de#e com!ro#ar si ay %ic as en la colecci$n& y tam#i1n si estamos insertando una %ic a nueva& en cuyo caso en lugar de actuali0ar los datos del %ormulario& los lim!iar(:( 3am#i1n tenemos "ue o#tener el n@mero de la %ic a actual( 11( .uando !ulsemos el #ot$n TBorrar %ic aU llamaremos al m1todo BorrarFic a del o#-eto 5genda !asndole el n@mero de la %ic a actual( <na ve0 #orrada& decrementaremos el valor m*imo de la #arra de scroll 6A?+oB2 cuidado cuando #orramos la @ltima %ic a: y actuali0aremos los datos del %ormulario llamando a la %unci$n 5ctuali0arBarra;croll( 12( Bara terminar& s$lo nos %alta controlar cuando estn a#ilitados los cuadros de te*to& los #otones y dems elementos !ara "ue "uede lo ms co erente !osi#le(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

3>

Curso de Visual Basic Avanzado

%&em'lo Resuelto ormulario


JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK J )-em!lo 4 del .urso de Visual Basic 5van0ado J J 7e%inici$n del %ormulario& este ser el inter%a0 del usuario( JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK O!tion )*!licit 7im O#-5genda 5s Le, .la5genda 7im 'ntLumFic a5ctual 5s 'nteger Brivate ;u# ButBorrarFic aK.licI6: J .on%irmamos el #orrado '% AsgBo*6OQ7esea eliminar la %ic a actualRO& v#=esLo& OBorrado de %ic aO: N v#Lo 3 en )*it ;u# )nd '% J Borramos la %ic a actual O#-5genda(BorrarFic a 'ntLumFic a5ctual J 5ctuali0amos el n@mero de elementos de la #arra de scroll '% O#-5genda('ntLumFic as V G 3 en C;croll1(Aa* N O#-5genda('ntLumFic as 8 1 )lse C;croll1(Aa* N G )nd '% J 5ctuali0amos la #arra de scroll 5ctuali0arBarra;croll )nd ;u# Brivate ;u# But.rearFic aK.licI6: J .reamos una nueva %ic a con los datos introducidos !or el J usuario& y o#tenemos el c$digo de la %ic a creada 'ntLumFic a5ctual N O#-5genda(.rearFic a63*tLom#re& 3*t5!ellidos& 3*t7ireccion& K 3*t3ele%ono: J 5ctuali0amos el ttulo del %rame Frame1(.a!tion N OFic a O P 'ntLumFic a5ctual J 7es a#ilitamos el #ot$n de crear %ic a y el %rame But.rearFic a()na#led N False Frame1()na#led N False J Ca#ilitamos los #otones de nueva %ic a y #orrar J %ic a& as como la #arra de scroll ButLuevaFic a()na#led N 3rue ButBorrarFic a()na#led N 3rue C;croll1()na#led N 3rue

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

3D

Curso de Visual Basic Avanzado )nd ;u# Brivate ;u# ButLuevaFic aK.licI6: J 5ctuali0amos la #arra de scroll '% O#-5genda('ntLumFic as N G 3 en J .on la !rimera %ic a creada& a#ilitamos J la #arra de scroll C;croll1()na#led N 3rue Frame1()na#led N 3rue )lse J 'ncrementamos el n@mero de elementos de J la #arra de scroll C;croll1(Aa* N C;croll1(Aa* / 1 C;croll1(Value N C;croll1(Aa* )nd '% J Ca#ilitamos el #ot$n de crear %ic a y el %rame But.rearFic a()na#led N 3rue Frame1()na#led N 3rue J 7es a#ilitamos los #otones de nueva %ic a y #orrar J %ic a& as como la #arra de scroll ButLuevaFic a()na#led N False ButBorrarFic a()na#led N False C;croll1()na#led N False )nd ;u# Brivate ;u# FormKLoad6: J 7es a#ilitamos el %rame& la #arra de scroll& J el #ot$n de crear %ic a y el #ot$n de #orrar %ic a Frame1()na#led N False C;croll1()na#led N False But.rearFic a()na#led N False ButBorrarFic a()na#led N False J )sta#lecemos los lmites de la #arra de scroll C;croll1(Aa* N G )nd ;u# Brivate ;u# FormK<nload6.ancel 5s 'nteger: J )liminamos la agenda ;et O#-5genda N Lot ing )nd ;u# Brivate ;u# C;croll1K. ange6: J 5ctuali0amos la #arra de scroll 5ctuali0arBarra;croll )nd ;u# Brivate Function 5ctuali0arBarra;croll6: 7im O#-Fic a 5s .laFic a J .om!ro#amos si no ay %ic as o estamos creando una %ic a nueva '% C;croll1(Aa* N O#-5genda('ntLumFic as 3 en J Lim!iamos los datos del %rame 3*tLom#re N v#Lull;tring 3*t5!ellidos N v#Lull;tring 3*t7ireccion N v#Lull;tring 3*t3ele%ono N v#Lull;tring

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

39

Curso de Visual Basic Avanzado

J 5ctuali0amos el ttulo del %rame Frame1(.a!tion N v#Lull;tring J 7es a#ilitamos el #ot$n de #orrado ButBorrarFic a()na#led N False )lse J O#tenemos la %ic a corres!ondiente de la agenda J 6#uscamos !or ndice& no !or c$digo de %ic a: ;et O#-Fic a N O#-5genda(Fic a6C;croll1(Value / 1: J ;acamos los datos de la %ic a 3*tLom#re N O#-Fic a(;trLom#re 3*t5!ellidos N O#-Fic a(;tr5!ellidos 3*t7ireccion N O#-Fic a(;tr7ireccion 3*t3ele%ono N O#-Fic a(;tr3ele%ono J 5ctuali0amos el c$digo de la %ic a actual 'ntLumFic a5ctual N O#-Fic a('ntLumFic a J 5ctuali0amos el %rame Frame1(.a!tion N OFic a O P 'ntLumFic a5ctual )nd '% )nd Function

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

4G

Curso de Visual Basic Avanzado

Clase A'enda
JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK J )-em!lo 4 del .urso de Visual Basic 5van0ado J J 7e%inici$n de la clase 5M)L75& a"u estarn los datos de cada agenda y los m1todos J !ara actuar con ellos( JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

O!tion )*!licit Brivate .olFic as 5s Le, .ollection J .olecci$n de %ic as de la agenda

J A1todo !ara o#tener el n@mero de %ic as de la agenda Bu#lic Bro!erty Met 'ntLumFic as6: 5s 'nteger 'ntLumFic as N .olFic as(.ount )nd Bro!erty J A1todo !ara crear una %ic a nueva en la agenda Bu#lic Function .rearFic a6ByVal ;trLom#re 5s ;tring& K ByVal ;tr5!ellidos 5s ;tring& ByVal ;tr7ireccion 5s ;tring& K ByVal ;tr3ele%ono 5s ;tring: 5s 'nteger ;tatic 'ntLum3otalFic as 5s 'nteger 7im O#-Fic a 5s .laFic a J 'ncrementamos el Ocam!o auton@mericoO 'ntLum3otalFic as 'ntLum3otalFic as N 'ntLum3otalFic as / 1 J .reamos un nuevo o#-eto de la clase %ic a ;et O#-Fic a N Le, .laFic a J )sta#lecemos las !ro!iedades de la nueva %ic a O#-Fic a(;trLom#re N ;trLom#re O#-Fic a(;tr5!ellidos N ;tr5!ellidos O#-Fic a(;tr7ireccion N ;tr7ireccion O#-Fic a(;tr3ele%ono N ;tr3ele%ono O#-Fic a('ntLumFic a N 'ntLum3otalFic as J 'nsertamos la nueva %ic a en la colecci$n de %ic as& !oniendo J como Iey el c$digo de la %ic a& !ara !oder #uscarla des!u1s J !or c$digo 6convertimos a string el c$digo !or"ue el Iey J tiene "ue ser un string: .olFic as(5dd O#-Fic a& .;tr6O#-Fic a('ntLumFic a: J 7evolvemos el c$digo de la %ic a creada .rearFic a N 'ntLum3otalFic as )nd Function J A1todo !ara #orrar una %ic a de la agenda Bu#lic Function BorrarFic a6ByVal 'ntLumFic a 5s 'nteger: 7im O#-Fic a 5s .laFic a J O#tenemos la %ic a corres!ondiente de la colecci$n J de %ic as 6!ara !oder #uscar !or Iey& tenemos "ue J convertir el n@mero a string& !ues en caso contrario J #uscamos !or ndice:

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

41

Curso de Visual Basic Avanzado ;et O#-Fic a N .olFic as('tem6.;tr6'ntLumFic a:: J )liminamos la %ic a de la colecci$n .olFic as(9emove 6.;tr6'ntLumFic a:: J )liminamos la %ic a ;et O#-Fic a N Lot ing )nd Function J A1todo !ara eliminar todas las %ic as de una agenda cuando J 1ste es eliminada Brivate ;u# .lassK3erminate6: 7im O#-Fic a 5s .laFic a J )liminamos todas las %ic as de la colecci$n For )ac O#-Fic a 'n .olFic as ;et O#-Fic a N Lot ing Le*t O#-Fic a )nd ;u# J A1todo !ara o#tener una %ic a es!ec%ica de la agenda 6no #usca J !or Iey sino !or ndice: Bu#lic Function Fic a6ByVal 'nt'ndice 5s 'nteger: 5s .laFic a ;et Fic a N .olFic as('tem6'nt'ndice: )nd Function

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

42

Curso de Visual Basic Avanzado

C. Tecnolo'3a ActiveD
Introduccin
)l o#-etivo de este ca!tulo es mostrar al lector el !roceso de creaci$n de com!onentes 5ctive4& y su utili0aci$n en un !royecto( 3am#i1n se !retende "ue el lector se %amiliarice con el !roceso de !u#licaci$n de un control 5ctive4 en una !gina +e#& como muestra de la versatilidad de este ti!o de com!onentes( .on este ca!tulo se ace una introducci$n al curso )ctive *, "ue es la continuaci$n de los cursos Visual Basic 5(G 6#sico y avan0ado:(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

43

Curso de Visual Basic Avanzado

Conocimientos tericos Eu: es un com.onente ActiveD


<n com!onente 5ctive4 es un arc ivo ()4)& (7LL u (O.4 "ue cum!le la es!eci%icaci$n 5ctive4 !ara !ro!orcionar o#-etos( Bara entendernos& un control 5ctive4 es una e*tensi$n del cuadro de erramientas de Visual Basic( Los controles 5ctive4 se usan como cual"uiera de los controles estndar incor!orados& como el control . ecIBo*( .uando agregamos un control 5ctive4 a un !rograma& !asa a %ormar !arte del entorno de desarrollo y de tiem!o de e-ecuci$n y !ro!orciona nueva %uncionalidad a la a!licaci$n( Los controles 5ctive4 incrementan la ca!acidad del !rogramador de Visual Basic conservando algunos m1todos& !ro!iedades y eventos ya %amiliares& como la !ro!iedad )ame& "ue se com!ortan como ca#ra es!erar( Bero& adems& los controles 5ctive4 incor!oran m1todos y !ro!iedades "ue aumentan enormemente la %le*i#ilidad y ca!acidad del !rogramador de Visual Basic( La tecnologa 5ctive4 !ermite a los !rogramadores ensam#lar estos com!onentes so%t,are reutili0a#les en sus a!licaciones( Los controles 5ctive4& "ue se llama#an antes controles OL)& son elementos estndar de inter%a0 de usuario "ue nos !ermiten ensam#lar r!idamente %ormularios y cuadros de dilogo( Los controles 5ctive4 tam#i1n dan vida a 'nternet& agregando una nueva y atractiva %uncionalidad a las !ginas del +orld +ide +e#( Visual Basic siem!re a !resentado diversos controles "ue !odamos utili0ar en nuestras a!licaciones( 5 ora !odemos crear nuestros !ro!ios controles !ara utili0arlos con Visual Basic y otras erramientas de !rogramaci$n( 7iseEar un control 5ctive4 !uede resultar tan %cil como diseEar un %ormulario de Visual Basic2 !odemos utili0ar los comandos gr%icos de Visual Basic con los "ue estamos %amiliari0ados !ara di#u-ar el control o #ien crear un gru!o de controles con los controles e*istentes( Los controles 5ctive4 se !ueden de!urar en !roceso& de %orma "ue !uede !asar directamente desde el c$digo del %ormulario de !rue#a al c$digo del !royecto de control 5ctive4( Visual Basic %acilita crear !a"uetes de controles 5ctive4 !er%eccionados al agregar a los controles !ginas de !ro!iedades& constantes con nom#re y eventos( Bodemos com!ilar nuestros controles 5ctive4 directamente en el arc ivo e-ecuta#le de nuestra a!licaci$n o en arc ivos (oc*& "ue se !ueden utili0ar con erramientas de !rogramaci$n como Visual Basic y Aicroso%t Visual .//& con !roductos !ara el usuario %inal como Aicroso%t O%%ice y en 'nternet(

Ti.os de com.onentes ActiveD


)*isten tres ti!os de com!onentes 5ctive42 Controles ActiveD& Los controles 5ctive4 son elementos estndar de inter%a0 de usuario "ue !ermiten construir r!idamente a!licaciones& como si de un puzzle se tratara( Visual Basic !ro!orciona un con-unto de controles !rede%inidos& y !ermite la creaci$n de controles de usuario( Bor e-em!lo& !odramos acer una ca-a de te*to "ue controlara si los caracteres introducidos son num1ricos& mostrando los n@meros introducidos con la coma de los decimales o de los millares& y utili0arlo como el convencional te*tbo*(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

44

Curso de Visual Basic Avanzado ActiveD (## ,li)rer3as-& Los com!onentes 5ctive4 !ro!orciona c$digo "ue se !uede volver a utili0ar en %orma de o#-etos( <na a!licaci$n 6 cliente: !uede crear un o#-eto a !artir de un com!onente 5ctive4 6servidor: y utili0ar sus !ro!iedades y m1todos( Los com!onentes 5ctive4 7LL se e-ecutan dentro del es!acio de direcciones del !rograma "ue los utili0a( ActiveD EDE& <n com!onente 5ctive4 )4) es muy similar a un com!onente 5ctive4 7LL( La @nica di%erencia es "ue un com!onente 5ctive4 )4) se e-ecuta en su !ro!io es!acio de direcciones& lo "ue !ermite "ue el cliente !uede e-ecutar un m1todo del com!onente y continuar con su e-ecuci$n mientras el com!onente reali0a el tra#a-o& manteniendo el control de la e-ecuci$n del !rograma !rinci!al si se "uedara #lo"ueada la llamada a una %unci$n del 5ctive 4( La !ega es "ue gasta mas recursos& !ues la comunicaci$n entre el cliente y el servidor es ms com!le-a(

Creacin din8mica de matrices


Cay ocasiones en las "ue no conocemos a !riori lo grande "ue de#e ser una matri0( Buede "ue deseemos !oder cam#iar el tamaEo de la matri0 en tiem!o de e-ecuci$n( <na matri0 dinmica se !uede cam#iar de tamaEo en cual"uier momento( Las matrices dinmicas son una de las caractersticas ms %le*i#les y c$modas de Visual Basic& y nos ayudan a administrar de %orma e%iciente la memoria( Bor e-em!lo& !odemos utili0ar una matri0 grande durante un tiem!o corto y li#erar memoria del sistema cuando no necesite volver a utili0ar la matri0( La alternativa consiste en declarar la matri0 con el mayor tamaEo !osi#le y !asar !or alto los elementos de la matri0 "ue no necesitemos( ;in em#argo& esta soluci$n& si se utili0a demasiado& !uede acer "ue el sistema o!erativo %uncione con muy !oca memoria( )l !rimer !aso en la creaci$n de una matri0 dinmica es su declaraci$n2 en un !rimer momento& la matri0 no tendr ninguna dimensi$n( Bor e-em!lo& la siguiente sentencia de%ine un arra+ de enteros& !ero no es!eci%ica cuntos elementos va a contener2 7im 'ntAatri06: 5s 'nteger Bara asignar el n@mero real de elementos utili0aremos la instrucci$n ReDim( Bor e-em!lo& con la siguiente sentencia !ermitiremos "ue el arra+ anterior almacene 1G enteros2 9e7im 'ntAatri0 6G 3o 9: La instrucci$n ReDim !uede a!arecer sola en un !rocedimiento( 5 di%erencia de las instrucciones Dim y Static& ReDim es una instrucci$n e-ecuta#le? ace "ue la a!licaci$n realice una acci$n en tiem!o de e-ecuci$n( La instrucci$n ReDim ace!ta la misma sinta*is "ue se utili0a en las matrices %i-as( .ada ReDim !uede cam#iar el n@mero de elementos& as como los lmites in%erior y su!erior de cada dimensi$n( ;in em#argo& si la matri0 a sido declarada con un n@mero de elementos determinado& no !odremos utili0ar la sentencia Redim !ara alterarlo( Bor e-em!lo& si de%inimos la matri0 anterior de esta %orma2 7im 'ntAatri065: 5s 'nteger Lo !odremos utili0ar !osteriormente la sentencia Redim !ara alterar su tamaEo(

Preservar el contenido de las matrices din8micas


.ada ve0 "ue e-ecutamos la instrucci$n ReDim se !erdern todos los valores almacenados en ese momento en la matri0( Visual Basic resta#lece los valores al valor Em.t! 6en matrices

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

45

Curso de Visual Basic Avanzado Variant:& a cero 6en matrices num1ricas:& a una cadena de longitud cero 6en matrices de cadenas: o a 6ot0in' 6en matrices de o#-etos:( )sto resulta muy @til cuando deseemos !re!arar la matri0 !ara contener datos nuevos o cuando deseemos reducir el tamaEo de la matri0 !ara "ue ocu!e menos memoria( Buede "ue a veces nos interese cam#iar el tamaEo de la matri0 sin !erder los datos de la misma( Bara ello !odemos utili0ar ReDim con la !ala#ra clave Preserve( Bor e-em!lo& !odemos am!liar una matri0 en un elemento sin !erder los valores de los elementos e*istentes mediante la %unci$n "0ound !ara acer re%erencia al lmite su!erior2 9e7im Breserve 'ntAatri06<Bound6'ntAatri0: / 1: ;$lo se !uede cam#iar el lmite su!erior de la @ltima dimensi$n de una matri0 multidimensional cuando se utili0a la !ala#ra clave Preserve? si cam#iamos alguna otra dimensi$n o el lmite in%erior de la @ltima dimensi$n& se !roducir un error en tiem!o de e-ecuci$n( 5s !ues& !odemos utili0ar un c$digo como el siguiente2 9e7im Breserve 'ntAatri061G& <Bound6'ntAatri0& 2: / 1: Bero no !odemos utili0ar este c$digo2 9e7im Breserve 'ntAatri06<Bound6'ntAatri0& 1: / 1& 1G:

Matrices de controles
Visual Basic !ermite crear matrices de controles dinmicamente y situar los nuevos controles a voluntad en un %ormulario( ;u!ongamos "ue tenemos un control llamado Ai.tl 6!or e-em!lo& un ,ommand-utton:( Bara crear un nuevo control& utili0aramos la sentencia2 Load Ai.tl6L: donde L es el ndice del nuevo control( <na ve0 creado& !odemos situar el nuevo control en la !osici$n "ue deseemos esta#leciendo a!ro!iadamente su !ro!iedad To' y Le,t& y acerlo visi#le esta#leciendo a True la !ro!iedad Visible(

Pu)licar un control ActiveD en un .8'ina Fe)


<na ve0 creado el control 5ctive4& ay "ue seguir los siguientes !asos2 1( Menerar el arc ivo (O.4 corres!ondiente ! 'uardar el .ro!ecto des.u:s( 2( )-ecutar el Asistente .ara instalar a.licaciones. 3( ;eleccionar el !royecto corres!ondiente al control 5ctive4& marcando la o!ci$n Instalacin .ara trans%erencia desde Internet. 4( 7urante el !roceso de creaci$n de los arc ivos& es!eci%icaremos el directorio donde se crearn los arc ivos& as como el lugar desde donde el cliente "ue a#ra la !gina +e# donde estar el control 5ctive4 #a-ar los arc ivos (.5B de los com!onentes de nuestro control 6si es necesario:( 3am#i1n contestaremos a%irmativamente a la !regunta de si "ueremos incluir la 7LL de la !gina de !ro!iedades 6necesario si "ueremos e-ecutar el control desde %uera de Visual Basic& como es el caso:(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

46

Curso de Visual Basic Avanzado

)l asistente nos crear !rinci!almente dos arc ivos con el nom#re del control 5ctive4& uno con e*tensi$n (.5B "ue contiene el !ro!io control 6y otros elementos utili0ados !or 1l& si !rocede: y otro con e*tensi$n (C3A en el "ue se muestra un e-em!lo de !gina C3AL "ue utili0a el control 5ctive4(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

4>

Curso de Visual Basic Avanzado

%&em'lo 'ro'uesto ?)+etivo


)l o#-etivo es crear un control 5ctive4 "ue simule el -uego de las .res en ra+a( <na ve0 creado& generaremos una !gina +e# donde !egaremos el control con este e-em!lo !odemos ver la !otencia "ue tiene esta erramienta& ya "ue con el uso de un control !odemos tener una a!licaci$n #astante com!licada corriendo detrs& siendo muy %cil el im!lantaci$n !ara usos !osteriores(

(esarrollo del e+em.lo


1: .rearemos un control 5ctive4 TresEnRa!a2 Inter%az& ;imularemos un ta#lero de 3*3& !ero s$lo crearemos el frame "ue lo contiene y 26 #ot$n( )sta#leceremos las !ro!iedades del #ot$n 6color& nom#reW:& es!ecialmente la !ro!iedad Inde/=G 6va a ser el !rimero de una matri0 de controles:(

Pro.iedades2 StrTurno2 almacena el carcter corres!ondiente al turno actual 6TOU o T4U: Int6umeroHu'adas& recoge el n@mero de movimientos reali0ados M:todos2 Su) 2serControl@Initialize2 a !artir de un @nico #ot$n creado en tiem!o de diseEo en el control 5ctive4& generar una matr0 ordenada de 3*3 #otones 6ndices de G a D:( Su) Inicializar ormulario& iniciali0ar el ca!tion de los #otones& el turno y el n@mero de -ugadas( unction >a!TresEnRa!a,- As Boolean2 com!ro#ar cuando ay tres en raya& en %unci$n del ca!tion de los #otones "ue es donde nos indica el -ugador "ue lo eligi$ 6O o 4:( Su) ButCelda@Clic1,Inde/ As Inte'er-& reali0ar todo el !roceso del -uego 6com!ro#ar si ay tres en raya& com!ro#ar si el #ot$n ya a sido !ulsado& y en caso contrario cam#iar el ca!tion del mismo& com!ro#ar si se an marcado ya todas las casillas& incrementar el n@mero de -ugadas reali0adas(((: 2: <na ve0 creado el control& a#riremos un .ro!ecto nuevo 6de ti!o )4) estndar: en el "ue aEadiremos un %ormulario en #lanco ! nuestro .ro!ecto TresEnRa!a( Begaremos el control 3res)n9aya& "ue a!arecer en la ca-a de erramientas& y de!uraremos el control a#ierto como !royecto& ya "ue si no tendramos "ue de!urarlo e-ecutndolo directamente& y !ara solucionar

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

4D

Curso de Visual Basic Avanzado un !osi#le error volvernos al VB !ara reali0ar la modi%icaci$n& recom!ilar y acer el e-ecuta#le& mientras "ue de esta %orma con reescri#ir y e-ecutar tenemos el !ro#lema resuelto( 3: .uando el control %uncione #ien& a#riremos el !royecto inicial& generaremos el arc ivo 3res)n9aya(oc*& 'uardaremos el .ro!ecto y cerraremos Visual Basic( 4: )-ecutaremos el 5sistente !ara instalar a!licaciones y crearemos los %ic eros necesarios !ara !u#licar nuestro control en una !gina +e#(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

49

Curso de Visual Basic Avanzado

%&em'lo resuelto
JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK J )-em!lo 5 del .urso de Visual Basic 5van0ado J J .$digo del control de 39); )L 95=5& %unciones necesarias !ara el control de la !artida J y control de movimientos de los -ugadores( JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
O!tion )*!licit 7im ;tr3urno 5s ;tring 7im 'ntLumeroJugadas 5s 'nteger Brivate ;u# But.eldaK.licI6'nde* 5s 'nteger: '% But.elda6'nde*:(.a!tion N v#Lull;tring 3 en J Bintamos la marca en la But.elda corres!ondiente But.elda6'nde*:(.a!tion N ;tr3urno J .om!ro#amos si ay 3 en lnea '% Cay3res)n9aya6: 3 en AsgBo* OXCas ganadoYO& v#OZOnly Or v#)*clamation& O3res en 9ayaO 'niciali0arFormulario )*it ;u# )nd '% J .am#iamos de ;tr3urno '% ;tr3urno N OOO 3 en ;tr3urno N O4O )lse ;tr3urno N OOO )nd '% J .om!ro#amos si se an reali0ado todos los movimientos J !osi#les '% 'ntLumeroJugadas N 9 3 en '% AsgBo*6OCa a#ido un em!ate( QHuieres -ugar otra ve0RO& v#=esLo Or v#Huestion& O3res en 9ayaO: N v#=es 3 en 'niciali0arFormulario )nd '% )nd '% J 'ncrementamos el n@mero de movimientos reali0ados 'ntLumeroJugadas N 'ntLumeroJugadas / 1 )nd '% )nd ;u# Brivate Function Cay3res)n9aya6: 5s Boolean 7im 'nt'& 'ntJ 5s 'nteger J Filas ori0ontales For 'nt' N G 3o 2 '% But.elda63 [ 'nt':(.a!tion \V v#Lull;tring 5nd K But.elda63 [ 'nt':(.a!tion N But.elda63 [ 'nt' / 1:(.a!tion 5nd K But.elda63 [ 'nt':(.a!tion N But.elda63 [ 'nt' / 2:(.a!tion 3 en Cay3res)n9aya N 3rue )*it Function )nd '% Le*t J Filas verticales For 'nt' N G 3o 2 '% But.elda6'nt':(.a!tion \V v#Lull;tring 5nd K

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

5G

Curso de Visual Basic Avanzado


But.elda6'nt':(.a!tion N But.elda63 / 'nt':(.a!tion 5nd K But.elda6'nt':(.a!tion N But.elda66 / 'nt':(.a!tion 3 en Cay3res)n9aya N 3rue )*it Function )nd '% Le*t J 7iagonales '% But.elda6G:(.a!tion \V v#Lull;tring 5nd K But.elda6G:(.a!tion N But.elda64:(.a!tion 5nd K But.elda6G:(.a!tion N But.elda6D:(.a!tion 3 en Cay3res)n9aya N 3rue )*it Function )nd '% '% But.elda62:(.a!tion \V v#Lull;tring 5nd K But.elda62:(.a!tion N But.elda64:(.a!tion 5nd K But.elda62:(.a!tion N But.elda66:(.a!tion 3 en Cay3res)n9aya N 3rue )*it Function )nd '% Cay3res)n9aya N False )nd Function Bu#lic ;u# 'niciali0arFormulario6: 7im 'nt' 5s 'nteger J Lim!iamos las celdas For 'nt' N G 3o D But.elda6'nt':(.a!tion N v#Lull;tring Le*t J 'niciali0amos el ;tr3urno ;tr3urno N O4O J 'niciali0amos el n@mero de movimientos 'ntLumeroJugadas N 1 )nd ;u# Brivate ;u# <ser.ontrolK'nitiali0e6: 7im 'nt'& 'ntJ 5s 'nteger J .reamos los nuevos #otones For 'nt' N 1 3o D Load But.elda6'nt': But.elda6'nt':(Visi#le N 3rue Le*t J .olocamos los #otones For 'nt' N G 3o 2 J .olocamos el #ot$n i0"uierdo de la %ila corres!ondiente But.elda63 [ 'nt':(3o! N But.elda63 [ 'nt':(3o! / 'nt' [ But.elda6G:(Ceig t J .olocamos los dos #otones restantes de la %ila For 'ntJ N 1 3o 2 But.elda63 [ 'nt' / 'ntJ:(3o! N But.elda63 [ 'nt':(3o! But.elda63 [ 'nt' / 'ntJ:(Le%t N But.elda63 [ 'nt' / 'ntJ 8 1:(Le%t / But.elda63 [ 'nt' / 'ntJ 8 1:(+idt Le*t Le*t J 'niciali0amos el ta#lero 'niciali0arFormulario )nd ;u#

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

51

Curso de Visual Basic Avanzado

I. Acceso a )ases de datos ,(A? ! HetIntroduccin


)n Visual Basic e*isten m@lti!les m1todos de acceso a #ases de datos( )n este ca!tulo& y en los dos siguientes& se !retende %amiliari0ar al lector con tres de los m1todos ms utili0ados !ara acceso a #ases de datos& tanto locales como remotas( <tili0ar uno u otro de!ende de nuestras necesidades2 unos m1todos son ms a!tos !ara a!licaciones sencillas sin cone*i$n a #ases de datos e*ternas& mientras "ue otros a!ortan un mayor rendimiento al ser utili0ados contra servidores inteligentes como ;HL ;erver( Visual Basic !ro!orciona tam#i1n un con-unto de controles enlazados a datos 6como los controles D0-rid2 D0Combo2 D0List2 RemoteData(((: "ue %acilitan el acceso y el !rocesamiento de la in%ormaci$n almacenada en una #ase de datos( 7ic os controles no van a ser tratados en este manual& !or dos ra0ones2 la !rimera ra0$n es "ue estos controles no nos !ermiten de%inir su %uncionamiento !ara controlar c$mo acceden a la #ase de datos& lo "ue en la mayora de las ocasiones suele ser un re"uisito %undamental& y la segunda ra0$n es "ue una ve0 asimile el lector los tres ca!tulos "ue vamos a !resentar& no de#era tener ning@n !ro#lema en !ro%undi0ar !or s mismo& si %uera necesario& en su %uncionamiento( )ste ca!tulo mostrar al lector en "u1 consiste y c$mo se utili0a el !rimero de los m1todos de acceso a datos& 75O 67ata 5ccess O#-ects:& !ara acceder a #ases de datos locales a trav1s del motor Jet( 7e %orma !aralela se !retende "ue el lector sea consciente de la venta-a del uso de clases !ara la reutili0aci$n del c$digo(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

52

Curso de Visual Basic Avanzado

Conocimientos tericos (A? ! Het


)l modelo 75O es una inter%a0 de !rogramaci$n "ue !osi#ilita un control total de la #ase de datos( )s decir& 75O %acilita una colecci$n de clases de o#-etos "ue !ro!orcionan las !ro!iedades y los m1todos "ue nos !ermitirn llevar a ca#o todas las o!eraciones necesarias !ara administrar una #ase de datos2 %unciones !ara crear #ases de datos& de%inir ta#las& cam!os e ndices& esta#lecer relaciones entre las ta#las& des!la0arse !or la #ase de datos y crear consultas so#re ella& etc( )l motor de #ase de datos Het convierte estas o!eraciones& de%inidas so#re o#-etos de acceso de datos& en o!eraciones %sicas "ue se e%ect@an directamente so#re los !ro!ios arc ivos de las #ases de datos y "ue controlan todos los mecanismos de inter%a0 con las distintas #ases de datos com!ati#les( Cay tres categoras de #ases de datos "ue Visual Basic reconoce a trav1s de 75O y del motor Jet2 Bases de datos nativas de Visual Basic2 a"uellas "ue utili0an el mismo %ormato "ue Aicroso%t 5ccess( )l motor Jet crea y mani!ula directamente estas #ases de datos& "ue !ro!orcionan la m*ima %le*i#ilidad y velocidad( Bases de datos e/ternas2 las "ue utili0an el m1todo de acceso secuencial inde*ado 6';5A:& como dB5;) '''& dB5;) 'V& Aicroso%t Fo*Bro& Barado*& arc ivos de te*to& o-as de clculo de Aicroso%t )*cel o Lotus& etc( Bases de datos ?(BC2 #ases de datos cliente8servidor "ue cum!len el estndar O7B.( 5un"ue es !osi#le tra#a-ar contra una #ase de datos utili0ando Jet y O7B.& e*isten otros m1todos ms recomenda#les "ue veremos en los e-em!los > y D(

Estructura de una a.licacin de )ases de datos en Visual )asic con (A? ! Het
<na a!licaci$n de #ases de datos en Visual Basic "ue utili0a 75O y Jet consta de tres !artes& como se muestra en la siguiente %igura2

)l inter%a0 de usuario es lo "ue el usuario ve y con lo "ue interact@a con la #ase de datos( .omo se ve en la %igura& todo acceso a la #ase de datos se reali0a a trav1s del motor de #ase de datos 6Jet: ya "ue es a"u donde estn los m1todos y %unciones de acceso a #ase de datos( )l motor de #ase de datos es un intermediario entre el inter%a0 de usuario y el almac1n de datos& lo "ue !ermite a#straer a la a!licaci$n de la #ase de datos utili0ada& %acilitando la reutili0aci$n del c$digo(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

53

Curso de Visual Basic Avanzado

El modelo de o)+etos (A?


)l modelo de o#-etos de acceso a datos es la inter%a0 orientada a o#-etos del motor de #ase de datos Jet( ;e trata de una -erar"ua de clases "ue corres!onde a una visi$n l$gica de un sistema de #ase de datos relacional 6la #ase de datos !ro!iamente dic a& las ta#las de%inidas en ella y sus cam!os& ndices& etc:( )stas clases se utili0an !ara crear o#-etos de acceso a datos "ue se de%ieren a la #ase de datos en !articular "ue se desea mani!ular( Las clases de los o#-etos de acceso a datos se organi0an en una -erar"ua& en la "ue la mayora de las clases !ertenecen a una clase de colecci$n& "ue a su ve0 !ertenece a otra clase en la -erar"ua( 5"u se muestra la -erar"ua com!leta de 75O(

Pro'ramacin con (A? ! Het


)n las siguientes lneas vamos a comentar c$mo !rogramar una a!licaci$n "ue acceda a una #ase de datos Jet a trav1s de 75O& e*!licando las acciones ms comunes "ue de#eremos im!lementar( )*isten muc as !osi#ilidades "ue no comentaremos( ;in em#argo& el e-em!lo !ro!uesto es lo su%icientemente com!leto como !ara servir a los !ro!$sitos de la mayora( ;i !rogramamos con Visual Basic 5(G& es necesario incluir en el !royecto una re%erencia a 1icroso,t DA+ 345 +b&ect Librar!( .omo e-em!lo vamos a utili0ar una #ase de datos creada en 5ccess y guardada en Jc/0bd0$i-1.mdb2( La #ase de datos contiene una sola ta#la& Ai3a#la& cuya estructura es la siguiente2 6om)re cam.o 7L' Lom#re 5!ellidos del Ti.o 3e*to 3e*to 3e*to

5 ora veremos la estructura de un !rograma en el "ue se mantiene esta #ase de datos(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

54

Curso de Visual Basic Avanzado A.ertura de la )ase de datos& )l o#-eto D0%n#ine contiene y controla todos los otros o#-etos en la -erar"ua de los o#-etos de 75O( )s @nico !or a!licaci$n 6no !ueden crearse otros o#-etos 7B)ngine:( <tili0aremos el $or(s'ace 6es!acio de tra#a-o: !or de%ecto de este o#-eto !ara a#rir la #ase de datos& es!eci%icando el path com!leto del arc ivo2 7im VarB7 as 7ata#ase ;et VarB7 N 7B)ngine(+orIs!aces6G:(O!en7ata#ase6Tc2]#d]AiB7(md#U: 2tilizacin de Recordsets& <n o#-eto Recordset re!resenta los registros de una ta#la o los registros "ue resultan de e-ecutar una consulta( )s anlogo a los cursores utili0ados en otros lengua-es( )*isten varios ti!os& cada uno de los cuales tiene sus venta-as e inconvenientes2 db+'enTable& tiene acceso a la #ase de datos directamente& es decir& "ue tiene acceso a la ta#la directamente( Las #@s"uedas son ms r!idas "ue con otros ti!os de Recordset& !ero no !ermite uniones ni !uede ser utili0ado con otros modelos de acceso a datos como 97O( db+'enSna'shot& contiene una co!ia %i-a de los datos tal y como e*isten en el momento en el "ue se accedi$( .onsume menos recursos "ue otros Recordset 6db+'enTable& db+'enD!naset:& !or lo "ue !uede e-ecutar consultas y devolver datos ms r!idamente& so#re todo si utili0a O7B.( Lo es actuali0a#le& !or lo "ue no recoge los cam#ios "ue !uedan reali0arse en la #ase de datos mientras se utili0a& es $!timo !ara usos de lectura de datos( db+'enD!naset6 es un con-unto de re%erencias a los registros de una o ms ta#las( Los cam#ios reali0ados en la #ase de datos son automticamente actuali0ados en un Recordset de este ti!o( ;in em#argo& las #@s"uedas son ms lentas ya "ue las acciones "ue se acen no solo se e-ecutan en la memoria& si no "ue se re%le-an a la ve0 en la #ase de datos( db+'enForward+nl!6 es un ti!o de Sna'shot en el "ue s$lo se !ermite el des!la0amiento acia delante so#re el con-unto de resultados o#tenido en una consulta( )s el Recordset "ue menos %uncionalidad !ro!orciona& con la venta-a de "ue es el ms r!ido( )n el siguiente cuadro se recogen los ti!os de Recordset "ue de#en utili0arse !ara reali0ar las acciones ms comunes& de %orma "ue se ma*imice en la medida de lo !osi#le el rendimiento de la a!licaci$n2 Accin .onsultar los datos contenidos en una sola ta#la 'nsertar un registro nuevo en una ta#la 9ecorrer un Recordset utili0ando 1ove)e*t Buscar un registro utili0ando Find Buscar un registro con Find y #orrarlo con Delete Recordset recomendado db+'enTable db+'enTable db+'enForward+nl! db+'enSna'shot db+'enD!naset

Siem.re ay "ue cerrar los Recordsets a#iertos una ve0 de-en de ser @tiles utili0ando el m1todo Close( Lo cerrar un Recordset a#ierto !uede su!oner estar tra#a-ando con datos no actuali0ados& no !oder a#rir o cerrar transacciones& etc( )n las siguientes lneas se e*!onen varios e-em!los de uso de Recordsets utili0ando en muc os casos sentencias es.ec3%icas de 75O !ara acceder a #ases de datos Jet( )ste ti!o de sentencias estn !ensadas !ara el acceso a #ases de datos locales a trav1s del motor Jet& y no de)en ser utili0adas !ara acceder a servidores de #ases de datos no locali0ados en el cliente 6es ms& en ocasiones no !ueden ser utili0adas %uera de este conte*to:( ;u utili0aci$n en este ti!o de entornos !uede su!oner una im!ortante #a-ada en el rendimiento de la a!licaci$n& siendo !re%eri#le el uso de 75O con O7B.7irect o 97O& como veremos en los siguientes e-em!los(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

55

Curso de Visual Basic Avanzado E+em.los de utilizacin de Recordsets& Bara insertar un registro nuevo 67L'NU123456>DU& Lom#reNU5nastasioU& 5!ellidosNUB1re0 AartnU: en la ta#la JAi3a#laJ2 7im 9set3a#la as 9ecordset ;et 9set3a#la N VarB7(O!en9ecordset6TAi3a#laU&d#O!en3a#le: +it 9set3a#la (5ddLe, Y7L' N T123456>DU YLom#re N T5nastasioU Y5!ellidos N TB1re0 AartnU (<!date )nd +it Bara contar el n@mero de elementos en la ta#la Ai3a#la utili0aremos la !ro!iedad RecordCount del Recordset2 7im 9set3a#la as 9ecordset 7im Lum)lementos as integer ;et 9set3a#la N VarB7(O!en9ecordset6TAi3a#laU&d#O!en3a#le: Lum)lementos N 9set3a#la(9ecord.ount Bara mostrar en la !antalla Debu# los datos de cada registro de la ta#la TAi3a#laU utili0aremos el m1todo 1ove)e*t del Recordset& "ue o#tiene el siguiente registro del con-unto( 5ccederemos a los cam!os del registro utili0ando la sinta*is Recordset7Abierto8 )ombre7del7cam'o( La !ro!iedad %+F del Recordset nos indicar cuando se a llegado al %inal del con-unto de registros2 7im 9set3a#la as 9ecordset ;et 9set3a#la N VarB7(O!en9ecordset6TAi3a#laU&d#O!enFor,ardOnly: +it 9set3a#la 7o <ntil ()OF 7e#ug(Brint T7L'2 U P Y7L' P v#.9LF P K TLom#re2 T P YLom#re P v#.9LF P K T5!ellidos2 T P Y5!ellidos (AoveLe*t Loo! )nd +it Bara #uscar los datos del registro con 7L'NU123456>DU utili0aremos el m1todo FindFirst del Recordset& "ue o#tiene el .rimer re'istro del con-unto de registros del Recordset "ue cum!le una cierta condici$n& una ve0 encontrado el registro mostraremos los datos en el de)u'( <tili0aremos la !ro!iedad )o1atch !ara sa#er si se a encontrado el registro #uscado& ya "ue ser true si se a llegado al %inal del recorset sin encontrar un regostro con los datos es!eci%icados2 7im 9set3a#la as 9ecordset ;et 9set3a#la N VarB7(O!en9ecordset6TAi3a#laU&d#O!en;na!s ot: +it 9set3a#la (FindFirst T7L'N123456>DU '% (LoAatc 3 en 7e#ug(Brint T9egistro no encontradoU )lse 7e#ug(Brint T7L'2 U P Y7L' P v#.9LF P K TLom#re2 T P YLom#re P v#.9LF P K

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

56

Curso de Visual Basic Avanzado T5!ellidos2 T P Y5!ellidos )nd '% )nd +it Bara #orrar el registro con 7L'NU123456>DU utili0aremos el m1todo FindFirst y el m1todo Delete del Recordset& "ue elimina el registro actual del con-unto de registros2 7im 9set3a#la as 9ecordset ;et 9set3a#la N VarB7(O!en9ecordset6TAi3a#laU&d#O!en;na!s ot: +it 9set3a#la (AoveLast (FindFirst T7L'N123456>DU '% Lot (LoAatc 3 en (7elete )nd +it Cemos visto los m1todos de acceso a registros& a ora veremos los m1todos de movimiento dentro del recodset& el uso es similar a los de acceso a los registros& !or eso s$lo los enunciaremos2 Move istr& )l cursor se sit@a en el !rimer registro( Move#ast& )l registro en el "ue nos situamos es el @ltimo del recordset( Move6e/t& Los vamos al siguiente registro al "ue nos encontremos( MovePrevious& 9etrocedemos un registro en el recordset( Move Jn& 5van0amos n registros a !artir de la !osici$n actual( )s im!ortante controlar la situaci$n en la "ue nos encontremos en el recordset a la ora de des!la0arnos& ya "ue el acceso a una !osici$n "ue no est1 dentro del recordset !roducira un error en tiem!o de e-ecuci$n(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

5>

Curso de Visual Basic Avanzado

%&em'lo 'ro'uesto ?)+etivo


)l o#-etivo de este e-em!lo es am!liar el e-em!lo de la agenda de %orma "ue los datos est1n a ora almacenados en una #ase de datos( La a!licaci$n se diseEar en tres ca!as2 3nterfaz de usuario 6Frm5genda:2 ca!a "ue !ermite al usuario interactuar con el !rograma 6id1ntico al utili0ado en la agenda "ue ya tenemos:( ,lase a4enda 6.la5genda:2 ca!a intermedia entre el inter%a0 de usuario y la clase de acceso a la #ase de datos( .lase de acceso a la base de datos 6.la75OKJet:2 ca!a "ue se comunica con el motor de #ase de datos( )l o#-etivo es "ue esta ca!a sea lo su%icientemente inde!endiente del ti!o de acceso a la #ase de datos elegido 675O con Jet& 75O con O7B.7irect o 97O: como !ara !ermitir "ue sea sustituido !or otro sin cam#iar la ca!a su!erior( .ada ca!a s$lo !odr relacionarse con su ca!a inmediata su!erior e in%erior& como muestra el di#u-o2

)l o#-etivo es aislar cada ca!a de la im!lementaci$n de las dems& de %orma "ue las ca!as in%eriores !uedan ser cam#iadas sin "ue las modi%icaciones re!ercutan en las ca!as su!eriores( )n !articular& el o#-etivo "ue se !retende en este e-em!lo y los dos siguientes es crear una ca!a de acceso a la #ase de datos di%erente en cada e-em!lo& !ero utili0ando el mismo inter%a0 de usuario y la misma agenda(

)sta inde!endencia entre las di%erentes ca!as es lo "ue con%iere su !otencia al modelo de desarrollo estructurado en ca!as& !ermitiendo una gran %le*i#ilidad en el desarrollo y mantenimiento de las a!licaciones( 1999 Jorge Ordovs Oromenda y Vicente Lema Osca 5D

Curso de Visual Basic Avanzado

(esarrollo del e+em.lo


.rearemos la #ase de datos !ara la agenda 6#d5genda(md#: en 5ccess& "ue contendr una @nica ta#la A'enda cuya ar"uitectura se muestra en la ta#la siguiente2 Cam.o LumFic a Lom#re 5!ellidos 7ireccion 3ele%ono Ti.o Pro.iedades 5utonum1rico .am!o clave 3e*to 3e*to 3e*to 3e*to

)l lector utili0ar los siguientes elementos2 ,laFicha2 ya de%inida en anteriores e-em!los( $od1efiniciones2 m$dulo con las de%iniciones utili0adas en la a!licaci$n( Frm)4enda2 %ormulario corres!ondiente a la ca!a de inter%a0( 7esarrollaremos la clase corres!ondiente a la ca!a de agenda 6.la5genda:( .ontendr un o#-eto !rivado O#-5ccesoB7& de ti!o .la75OKJet& a trav1s del cual !odr interactuar con la #ase de datos( )sta clase !ro!orcionar los siguientes m1todos2 Pu)lic Pro.ert! "et Int6um ic0as,- As Inte'er 2 A1todo !ara o#tener el n@mero de %ic as de la agenda( Llamar al m1todo LumFic as del o#-eto O#-5ccesoBd( Pu)lic unction Crear ic0a,B!Val Str6om)re As Strin'$ B!Val StrA.ellidos As Strin'$ B!Val Str(ireccion As Strin'$ B!Val StrTele%ono As Strin'- As Inte'er 2 A1todo !ara crear una %ic a nueva en la agenda( .rear un o#-eto de la clase .laFic a y se lo !asar al m1todo MuardarFic a del o#-eto O#-5ccesoB7( Pu)lic unction Borrar ic0a,B!Val Int6um ic0a As Inte'er-2 A1todo !ara #orrar una %ic a de la agenda( <tili0ar el m1todo BorrarFic a del o#-eto O#-5ccesoB7( Pu)lic unction ic0a,?.tional B!Val IntIndice As Inte'er$ ?.tional B!Val Int6um ic0a As Inte'er- As Cla ic0a2 A1todo !ara o#tener una %ic a es!ec%ica de la agenda& ya sea !or ndice o !or n@mero de %ic a( <tili0ar el m1todo O#tenerFic a del o#-eto O#-5ccesoB7( Private Su) Class@Terminate,-2 5l eliminar la agenda es necesario cerrar la #ase de datos y eliminar el o#-eto O#-5ccesoB7( 7esarrollaremos tam#i1n la clase corres!ondiente a la ca!a de acceso a la #ase de datos& "ue utili0ar 75O y Jet 6.la75OKJet:( )sta ca!a !ro!orcionar los siguientes m1todos2 Pu)lic Pro.ert! "et 6um ic0as,- As Inte'er 2 A1todo !ara o#tener el n@mero de %ic as de la ta#la 5genda( Pu)lic unction A)rirA'enda,- As Codi'oRetorno2 A1todo !ara a#rir la #ase de datos( Pu)lic datos( unction CerrarA'enda,- As Codi'oRetorno 2 A1todo !ara cerrar la #ase de

;e recomienda al lector& !ara %acilitar la com!rensi$n de estos ca!tulos dedicados al acceso a #ases de datos desde Visual Basic& "ue utilice los c$digos !ro!orcionados en el manual !ara estos tres elementos& y desarrolle !ersonalmente las clases "ue im!lementan las dems ca!as( 1999 Jorge Ordovs Oromenda y Vicente Lema Osca 59

Curso de Visual Basic Avanzado Pu)lic unction "uardar ic0a,B!Val ?)+ ic0a As Cla ic0a$ ?.tional B!Re% Int6um ic0a As Inte'er- As Codi'oRetorno2 A1todo !ara guardar una %ic a( 7evuelve el n@mero de %ic a asignado !or la #ase de datos como cam!o autonum1rico( Pu)lic unction ?)tener ic0a,B!Re% ?)+ ic0a As Cla ic0a$ ?.tional B!Val IntIndice As Inte'er$ ?.tional B!Val Int6um ic0a As Inte'er- As Codi'oRetorno 2 A1todo !ara o#tener una %ic a es!ec%ica de la ta#la 5genda( Bermite #uscar !or ndice o !or n@mero de %ic a( Pu)lic unction Borrar ic0a,B!Val Int6um ic0a- As Codi'oRetorno 2 A1todo !ara #orrar una %ic a de la ta#la 5genda( Private Su) Class@Initialize,-2 5l crear un o#-eto de esta clase& de#e de llamarse automticamente a su corres!ondiente m1todo 5#rir5genda( ;eguiremos unas normas sencillas -unto con unos comentarios #reves& claros y concisos "ue %acilitarn la !osterior com!rensi$n del !rograma( 3odos los m1todos de la clase de acceso a la #ase de datos incluirn al comien0o la sentencia +n error #oto TratamientoError& con su corres!ondiente secci$n de tratamiento de error& !ara interce!tar los !osi#les errores del motor de la #ase de datos( 5dems& todas las %unciones devolvern un c$digo de retorno es!eci%icado !or el ti!o Cdi'oRetorno de%inido en el m$dulo Aod7e%iniciones& "ue determinar si an !odido reali0ar correctamente su %unci$n( Los m1todos de la clase de acceso a la #ase de datos utili0arn el motor Jet !ara acceder a la #ase de datos& a trav1s de las %unciones "ue 75O !ro!orciona(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

6G

Curso de Visual Basic Avanzado

%&em'lo resuelto
<tili0aremos la clase Cla ic0a ya de%inida(

Mod(e%iniciones
JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK J )-em!lo 6 del .urso de Visual Basic 5van0ado J J 5rc ivo con el estndar de devoluci$n de las %unciones( JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK O!tion )*!licit Bu#lic )num .odigo9etorno )rror N G OI N 1 )nd )num

rmA'enda
JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK J )-em!lo 6 del .urso de Visual Basic 5van0ado J J 'nter%a0 del usuario con la #ase de datos& a"u estn los m1todos de mantenimiento de J la #ase de datos( JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK O!tion )*!licit 7im O#-5genda 5s Le, .la5genda 7im 'ntLumFic a5ctual 5s 'nteger Brivate ;u# ButBorrarFic aK.licI6: J .on%irmamos el #orrado '% AsgBo*6OQ7esea eliminar la %ic a actualRO& v#=esLo& OBorrado de %ic aO: N v#Lo 3 en )*it ;u# )nd '% J Borramos la %ic a actual O#-5genda(BorrarFic a 'ntLumFic a5ctual J 5ctuali0amos el n@mero de elementos de la #arra de scroll '% O#-5genda('ntLumFic as V G 3 en C;croll1(Aa* N O#-5genda('ntLumFic as 8 1 )lse C;croll1(Aa* N G )nd '% J 5ctuali0amos la #arra de scroll 5ctuali0arFormulario )nd ;u# Brivate ;u# But.rearFic aK.licI6:

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

61

Curso de Visual Basic Avanzado J .reamos una nueva %ic a con los datos introducidos !or el J usuario& y o#tenemos el c$digo de la %ic a creada 'ntLumFic a5ctual N O#-5genda(.rearFic a63*tLom#re& 3*t5!ellidos& 3*t7ireccion& K 3*t3ele%ono: J .om!ro#amos si no a !odido insertar una nueva %ic a& lo "ue J suceder si 'ntLumFic a5ctualNG '% 'ntLumFic a5ctual N G 3 en J 7ecrementamos el n@mero de elementos de la #arra de J scroll C;croll1(Aa* N C;croll1(Aa* 8 1 J 5ctuali0amos el %ormulario 5ctuali0arFormulario )*it ;u# )nd '% J 5ctuali0amos el ttulo del %rame Frame1(.a!tion N OFic a O P 'ntLumFic a5ctual J 7es a#ilitamos el #ot$n de crear %ic a y el %rame But.rearFic a()na#led N False Frame1()na#led N False J Ca#ilitamos los #otones de nueva %ic a y #orrar J %ic a& as como la #arra de scroll ButLuevaFic a()na#led N 3rue ButBorrarFic a()na#led N 3rue C;croll1()na#led N 3rue )nd ;u# Brivate ;u# ButLuevaFic aK.licI6: 7im 'ntLumFic as 5s 'nteger J 5ctuali0amos la #arra de scroll 'ntLumFic as N O#-5genda('ntLumFic as '% 'ntLumFic as N G 3 en J .on la !rimera %ic a creada& a#ilitamos J la #arra de scroll C;croll1()na#led N 3rue Frame1()na#led N 3rue )lse J )sta#lecemos el n@mero de elementos de J la #arra de scroll C;croll1(Aa* N C;croll1(Aa* / 1 C;croll1(Value N C;croll1(Aa* )nd '% J Ca#ilitamos el #ot$n de crear %ic a y el %rame But.rearFic a()na#led N 3rue Frame1()na#led N 3rue J 7es a#ilitamos los #otones de nueva %ic a y #orrar J %ic a& as como la #arra de scroll ButLuevaFic a()na#led N False ButBorrarFic a()na#led N False C;croll1()na#led N False )nd ;u# Brivate ;u# FormKLoad6:

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

62

Curso de Visual Basic Avanzado 7im 'ntLumFic as 5s 'nteger J .om!ro#amos si no ay datos en la agenda !ara J des a#ilitar las o!ciones 'ntLumFic as N O#-5genda('ntLumFic as '% 'ntLumFic as N G 3 en J 7es a#ilitamos el %rame& la #arra de scroll& J el #ot$n de crear %ic a y el #ot$n de #orrar %ic a Frame1()na#led N False C;croll1()na#led N False But.rearFic a()na#led N False ButBorrarFic a()na#led N False J )sta#lecemos los lmites de la #arra de scroll C;croll1(Aa* N G )lse J )sta#lecemos el m*imo de la #arra de scroll C;croll1(Aa* N 'ntLumFic as 8 1 J 5ctuali0amos el %ormulario 5ctuali0arFormulario )nd '% )nd ;u# Brivate ;u# FormK<nload6.ancel 5s 'nteger: J )liminamos la agenda ;et O#-5genda N Lot ing )nd ;u# Brivate ;u# C;croll1K. ange6: J 5ctuali0amos la #arra de scroll 5ctuali0arFormulario )nd ;u# Brivate Function 5ctuali0arFormulario6: 7im O#-Fic a 5s .laFic a J .om!ro#amos si no ay %ic as o estamos creando una %ic a nueva '% C;croll1(Aa* N O#-5genda('ntLumFic as 3 en J Lim!iamos los datos del %rame 3*tLom#re N v#Lull;tring 3*t5!ellidos N v#Lull;tring 3*t7ireccion N v#Lull;tring 3*t3ele%ono N v#Lull;tring J 5ctuali0amos el ttulo del %rame Frame1(.a!tion N v#Lull;tring J 7es a#ilitamos el #ot$n de #orrado ButBorrarFic a()na#led N False )lse J O#tenemos la %ic a corres!ondiente de la agenda J 6#uscamos !or ndice& no !or c$digo de %ic a: ;et O#-Fic a N Le, .laFic a ;et O#-Fic a N O#-5genda(Fic a6C;croll1(Value / 1: J ;acamos los datos de la %ic a '% Lot O#-Fic a 's Lot ing 3 en 3*tLom#re N O#-Fic a(;trLom#re 3*t5!ellidos N O#-Fic a(;tr5!ellidos

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

63

Curso de Visual Basic Avanzado 3*t7ireccion N O#-Fic a(;tr7ireccion 3*t3ele%ono N O#-Fic a(;tr3ele%ono J 5ctuali0amos el c$digo de la %ic a actual 'ntLumFic a5ctual N O#-Fic a('ntLumFic a J )liminamos el o#-eto %ic a creado ;et O#-Fic a N Lot ing J 5ctuali0amos el %rame Frame1(.a!tion N OFic a O P 'ntLumFic a5ctual )nd '% )nd '% )nd Function

ClaA'enda
JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK J )-em!lo 6 del .urso de Visual Basic 5van0ado J J A1todos !ara acceder a los m1todos de la clase& "ue sern los "ue tienen acceso a la J #ase de datos( JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK O!tion )*!licit Brivate O#-5ccesoB7 5s Le, .la75OKJet JO#-eto de acceso a la #ase de datos J A1todo !ara o#tener el n@mero de %ic as de la agenda Bu#lic Bro!erty Met 'ntLumFic as6: 5s 'nteger 'ntLumFic as N O#-5ccesoB7(LumFic as )nd Bro!erty J A1todo !ara crear una %ic a nueva en la agenda Bu#lic Function .rearFic a6ByVal ;trLom#re 5s ;tring& K ByVal ;tr5!ellidos 5s ;tring& ByVal ;tr7ireccion 5s ;tring& K ByVal ;tr3ele%ono 5s ;tring: 5s 'nteger ;tatic 'ntLumFic a 5s 'nteger 7im O#-Fic a 5s .laFic a J .reamos un nuevo o#-eto de la clase %ic a ;et O#-Fic a N Le, .laFic a J )sta#lecemos las !ro!iedades de la nueva %ic a O#-Fic a(;trLom#re N ;trLom#re O#-Fic a(;tr5!ellidos N ;tr5!ellidos O#-Fic a(;tr7ireccion N ;tr7ireccion O#-Fic a(;tr3ele%ono N ;tr3ele%ono J 'nsertamos la nueva %ic a en la #ase de datos '% O#-5ccesoB7(MuardarFic a6O#-Fic a& 'ntLumFic a: N OI 3 en J 7evolvemos el c$digo de la %ic a creada .rearFic a N 'ntLumFic a )lse J 7evolvemos G& !or"ue es un valor "ue nunca a!arecer J en un cam!o autonum1rico .rearFic a N G AsgBo* O'm!osi#le agregar una nueva %ic aO )nd '%

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

64

Curso de Visual Basic Avanzado

J )liminamos el o#-eto Fic a creado ;et O#-Fic a N Lot ing )nd Function J A1todo !ara #orrar una %ic a de la agenda Bu#lic Function BorrarFic a6ByVal 'ntLumFic a 5s 'nteger: 7im O#-Fic a 5s .laFic a '% O#-5ccesoB7(BorrarFic a6'ntLumFic a: N )rror 3 en AsgBo* O'm!osi#le #orrar la %ic a n^ O P 'ntLumFic a )nd '% )nd Function J 5l eliminar la agenda& cerraremos la #ase de datos y J eliminaremos el o#-eto de acceso a la #ase de datos Brivate ;u# .lassK3erminate6: '% O#-5ccesoB7(.errar5genda6: N )rror 3 en AsgBo* O'm!osi#le cerrar la agendaO )nd '% ;et O#-5ccesoB7 N Lot ing )nd ;u# J A1todo !ara o#tener una %ic a es!ec%ica de la agenda& ya sea J !or ndice o !or n@mero de %ic a J J LO352 la %unci$n crea un nuevo o#-eto Fic a& "ue a#r "ue J eliminar en la %unci$n de llamada Bu#lic Function Fic a6O!tional ByVal 'nt'ndice 5s 'nteger& K O!tional ByVal 'ntLumFic a 5s 'nteger: 5s .laFic a 7im O#-Fic a 5s Le, .laFic a J .om!ro#amos si se #usca !or ndice '% Lot 'sAissing6'nt'ndice: 3 en '% O#-5ccesoB7(O#tenerFic a6O#-Fic a& 'nt'ndice: N )rror 3 en AsgBo* O'm!osi#le o#tener la %ic a de la !osici$n n^ O P 'nt'ndice )*it Function )nd '% )lse'% Lot 'sAissing6'ntLumFic a: 3 en '% O#-5ccesoB7(O#tenerFic a6O#-Fic a& & 'ntLumFic a: N )rror 3 en AsgBo* O'm!osi#le o#tener la %ic a n^ O P 'ntLumFic a )*it Function )nd '% )nd '% ;et Fic a N O#-Fic a ;et O#-Fic a N Lot ing )nd Function

Cla(A?@Het
JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK J )-em!lo 6 del .urso de Visual Basic 5van0ado J J .lase de acceso a #ases de datos utili0ando 75O y J %unciones )4.L<;'V5; de Jet JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

65

Curso de Visual Basic Avanzado O!tion )*!licit Brivate VarB7 5s 7ata#ase Brivate VarBat B7 5s ;tring Brivate .onst .onLom#re3a#la N O5gendaO Bu#lic Bro!erty Met LumFic as6: 5s 'nteger On )rror Mo3o 3ratamiento)rror 7im 9set3a#la 5s 9ecordset J 5#rimos un recordset de ti!o d#O!enta#le ;et 9set3a#la N VarB7(O!en9ecordset6.onLom#re3a#la& d#O!en3a#le: J O#tenemos el n@mero de elementos LumFic as N 9set3a#la(9ecord.ount J .erramos el 9ecordset 9set3a#la(.lose )*it Bro!erty 3ratamiento)rror2 LumFic as N 81 )nd Bro!erty Bu#lic Function 5#rir5genda6: 5s .odigo9etorno On )rror Mo3o 3ratamiento)rror J 5#rimos la #ase de datos& utili0ando el +orIs!ace J !or de%ecto ;et VarB7 N 7B)ngine(+orIs!aces6G:(O!en7ata#ase6VarBat B7: 5#rir5genda N OI )*it Function 3ratamiento)rror2 5#rir5genda N )rror )nd Function Bu#lic Function .errar5genda6: 5s .odigo9etorno On )rror Mo3o 3ratamiento)rror J .erramos la #ase de datos VarB7(.lose .errar5genda N OI )*it Function 3ratamiento)rror2 .errar5genda N )rror )nd Function Bu#lic Function MuardarFic a6ByVal O#-Fic a 5s .laFic a& K O!tional By9e% 'ntLumFic a 5s 'nteger: 5s .odigo9etorno On )rror Mo3o 3ratamiento)rror 7im 9set3a#la 5s 9ecordset J 5#rimos un recordset de ti!o d#O!en3a#le 6s$lo %unciona J en Jet: ;et 9set3a#la N VarB7(O!en9ecordset6.onLom#re3a#la& d#O!en3a#le:

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

66

Curso de Visual Basic Avanzado

+it 9set3a#la J 5Eadimos una nueva %ic a (5ddLe, YLom#re N O#-Fic a(;trLom#re Y5!ellidos N O#-Fic a(;tr5!ellidos Y7ireccion N O#-Fic a(;tr7ireccion Y3ele%ono N O#-Fic a(;tr3ele%ono J O#tenemos el cam!o LumFic a 'ntLumFic a N YLumFic a (<!date )nd +it J .erramos el recordset 9set3a#la(.lose MuardarFic a N OI )*it Function 3ratamiento)rror2 MuardarFic a N )rror )nd Function Bu#lic Function O#tenerFic a6By9e% O#-Fic a 5s .laFic a& K O!tional ByVal 'nt'ndice 5s 'nteger& K O!tional ByVal 'ntLumFic a 5s 'nteger: 5s .odigo9etorno On )rror Mo3o 3ratamiento)rror 7im 9set3a#la 5s 9ecordset J .om!ro#amos si ay "ue #uscar !or ndice '% Lot 'sAissing6'nt'ndice: 3 en J 5#rimos un recordset de ti!o d#O!enFor,ardOnly& !ara !oder J movernos con AoveLe*t 6lo a#rimos For,ardOnly !or"ue s$lo J necesitamos des!la0arnos acia delante: ;et 9set3a#la N VarB7(O!en9ecordset6.onLom#re3a#la& d#O!enFor,ardOnly: J 9ecorremos el 9ecordset asta encontrar la %ic a indicada +it 9set3a#la 7o <ntil ()OF '% (9ecord.ount N 'nt'ndice 3 en )*it 7o )nd '% (AoveLe*t Loo! )nd +it J .om!ro#amos si ay "ue #uscar !or n@mero de %ic a )lse'% Lot 'sAissing6'ntLumFic a: 3 en J 5#rimos un recordset de ti!o d#O!en;na!s ot& !ara !oder J #uscar con FindFirst ;et 9set3a#la N VarB7(O!en9ecordset6.onLom#re3a#la& d#O!en;na!s ot: +it 9set3a#la J Llenamos el 9ecordset (AoveLast J )ncontramos el !rimer registro con ese n@mero (FindFirst OLumFic aNO P 'ntLumFic a )nd +it )nd '%

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

6>

Curso de Visual Basic Avanzado J .om!ro#amos si la emos encontrado& o emos llegado al J %inal del 9ecordset sin encontrarla +it 9set3a#la '% ()OF Or (LoAatc N 3rue 3 en O#tenerFic a N )rror )lse J Muardamos los datos o#tenidos O#-Fic a(;trLom#re N YLom#re O#-Fic a(;tr5!ellidos N Y5!ellidos O#-Fic a(;tr7ireccion N Y7ireccion O#-Fic a(;tr3ele%ono N Y3ele%ono O#-Fic a('ntLumFic a N YLumFic a O#tenerFic a N OI )nd '% )nd +it J .erramos el 9ecordset 9set3a#la(.lose )*it Function 3ratamiento)rror2 O#tenerFic a N )rror )nd Function Bu#lic Function BorrarFic a6ByVal 'ntLumFic a: 5s .odigo9etorno On )rror Mo3o 3ratamiento)rror 7im 9set3a#la 5s 9ecordset J 5#rimos un recordset de ti!o d#O!en7ynaset& !ara !oder J #uscar con FindFirst y #orrar con 7elete ;et 9set3a#la N VarB7(O!en9ecordset6.onLom#re3a#la& d#O!en7ynaset: J Buscamos la %ic a corres!ondiente +it 9set3a#la J Llenamos el 9ecordset (AoveLast J )ncontramos el !rimer registro con ese n@mero (FindFirst OLumFic aNO P 'ntLumFic a J .om!ro#amos si emos encontrado alg@n registro '% (LoAatc 3 en BorrarFic a N )rror )lse J Borramos la %ic a o#tenida (7elete BorrarFic a N OI )nd '% J .erramos el 9ecordset (.lose )nd +it BorrarFic a N OI )*it Function 3ratamiento)rror2 BorrarFic a N )rror

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

6D

Curso de Visual Basic Avanzado )nd Function Brivate ;u# .lassK'nitiali0e6: J )sta#lecemos el !at donde est el arc ivo de J la #ase de datos VarBat B7 N 5!!(Bat P O]#d5genda(md#O J 5#rirmos la #ase de datos 5#rir5genda )nd ;u#

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

69

Curso de Visual Basic Avanzado

K. Acceso a )ases de datos ,(A? ! ?(BC(irectIntroduccin


Casta a ora emos e*!licado c$mo !odemos acceder a una #ase de datos en local a trav1s del motor Jet( )n este ca!tulo y en el siguiente mostraremos c$mo se !uede acceder a un servidor de #ases de datos( 5l tra#a-ar con #ases de datos locali0adas en un servidor !odemos di%erenciar dos m1todos de tra#a-o& de!endiendo de la locali0aci$n del motor de #ase de datos2 clienteLservidor& el motor de #ase de datos est en el servidor( remota& el motor est en el cliente

Lormalmente se utili0a el modelo cliente8servidor !ara acceder a #ases de datos locali0adas en un servidor& ya "ue a!orta #astantes venta-as2 O!eraciones ms %ia#les y ro#ustas& !uesto "ue e*iste un @nico servidor de #ase de datos "ue interact@a con todos los clientes( Lota#le aumento del rendimiento de algunas o!eraciones& es!ecialmente cuando las estaciones de tra#a-o de los usuarios son e"ui!os de gama #a-a( 9educci$n del tr%ico de la red gracias a una transmisi$n de datos ms e%iciente( ;$lo se trans%ieren los datos "ue la a!licaci$n necesita( .aractersticas crticas como los registros de transacciones& las ca!acidades de co!ia de seguridad com!le-as& las matrices de discos redundantes y las erramientas de recu!eraci$n de %allos( La %orma ms com@n de acceder a un servidor de #ases de datos es a trav1s de O7B.( O7B. es una ca!a intermedia entre las a!licaciones "ue se e-ecutan en el cliente y el servidor de #ases de datos( )l controlador O7B. del cliente reci#e !eticiones de la a!licaci$n& las traduce a !eticiones O7B. y las enva al servidor( )l servidor res!onde al controlador O7B. del cliente& y 1ste !asa la res!uesta a la a!licaci$n( La venta-a de usar O7B. es la inde!endencia del ;MB7 6;istema Mestor de Bases de 7atos: utili0ado& !udiendo cam#iar 1ste reali0ando cam#ios mnimos en el c$digo de la a!licaci$n(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

>G

Curso de Visual Basic Avanzado

Conocimientos tericos ?.ciones de utilizacin de ?(BC con (A?


)*isten dos %ormas de acceder a orgenes de datos remotos utili0ando 75O2 HetL?(BC2 utili0a el motor Jet !ara acceder al ;MB7( ?(BC(irect2 no utili0a el motor Jet( )n realidad no es ms "ue un inter%a0 75O con las #i#liotecas de 97O& lo "ue !ermite un rendimiento mayor "ue al utili0ar Jet8 O7B. con la !ega de "ue no !uede utili0ar todas las caractersticas de Jet(

Estructura de una a.licacin de )ases de datos en Visual )asic con (A? ! ?(BC(irect
<na a!licaci$n de #ases de datos en Visual Basic "ue utili0a 75O y O7B.7irect se comunica con el ;MB7 a trav1s del controlador O7B. corres!ondiente& como se muestra en la %igura2

Pro'ramacin con (A? ! ?(BC(irect


)n las siguientes lneas vamos a comentar c$mo !rogramar una a!licaci$n "ue acceda a una #ase de datos a trav1s de 75O y O7B.7irect& e*!licando las acciones ms comunes "ue de#eremos im!lementar( 5l igual "ue en el ca!tulo anterior& e*isten muc as !osi#ilidades "ue no comentaremos( ;i !rogramamos con Visual Basic 5(G& es necesario incluir en el !royecto una re%erencia a 1icroso,t DA+ 345 +b&ect Librar!( .omo e-em!lo utili0aremos la #ase de datos descrita en el ca!tulo anterior( Bara acceder a dic a #ase de datos necesitamos crear un 7;L 67ata ;ource Lame: desde Panel de Control ?(BC 4* )its& "ue llamaremos Ai7;L( Varia)les utilizadas& )n los siguientes e-em!los utili0aremos dos varia#les& Var+Is y Var.one*ion& !ara de%inir el es!acio de tra#a-o y la cone*i$n con el ;MB7& res!ectivamente( 5dems& !ara esta#lecer la cadena de cone*i$n O7B. utili0aremos la constante .on.adena.one*ion2

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

>1

Curso de Visual Basic Avanzado

7im Var+Is 5s +orIs!ace 7im Var.one*ion 5s .onnection 7im .onst .on.adena.one*ion N OO7B.?7535B5;)NAiB7?<'7N?B+7N?7;LNAi7;LO Cone/in con el S"B(& Brimero necesitamos crear un es!acio de tra#a-o es!ec%ico !ara O7B. utili0ando la sentencia Create$or(s'ace( <na ve0 creado& esta#leceremos la cone*i$n con el ;MB7 utili0ando el m1todo +'enConnection de dic o es!acio de tra#a-o( ;et Var+Is N .reate+orIs!ace6OO& OO& OO& d#<seO7B.: ;et Var.one*ion N Var+Is(O!en.onnection6OO& & & .on.adena.one*ion: 2tilizacin de Recordsets& Los Recordsets creados con O7B.7irect son& en realidad& Resultsets de 97O( La %orma de tra#a-ar con estos Recordsets ser crear la consulta ;HL "ue genere el con-unto de registros #uscado y !asrsela al m1todo +'enRecordset de la cone*i$n creada( E+em.los de utilizacin de Recordsets& Bara sacar en la !antalla Debu# los datos de cada registro de la ta#la TAi3a#laU utili0aremos el m1todo +'enRecordset de la cone*i$n& !asndole la consulta ;HL "ue o#tiene todos los datos de la ta#la( Bara acceder a cada uno de los cam!os del registro actual& utili0aremos la colecci$n Fields del Recordset& "ue contiene todos los cam!os del registro actual( 7im 9set7atos 5s 9ecordset ;et 9set7atos N Var.one*ion(O!en9ecordset6Oselect [ %rom Ai3a#laO: +it 9set7atos 7o + ile Lot ()OF 7e#ug(Brint T7L'2 U P (Fields6G:(Value P v#.9LF P K TLom#re2 T P (Fields61:(Value P v#.9LF P K T5!ellidos2 T P (Fields62:(Value (AoveLe*t Loo! )nd +it Sentencias Mue no devuelven datos& .uando "ueremos reali0ar una acci$n so#re la #ase de datos "ue no devuelve ning@n con-unto de registros 6insert& u!date& delete& etc: utili0aremos el m1todo %*ecute de la cone*i$n& !asndole la sentencia ;HL a e-ecutar( Bara determinar si la acci$n se a reali0ado correctamente& consultaremos la !ro!iedad RowsA,ected de la cone*i$n( E+em.los de e+ecucin de sentencias Mue no devuelven datos& Bor e-em!lo& si "ueremos eliminar el registro con 7L'NU123456>DU2 Var.one*ion()*ecute Odelete %rom Ai3a#la , ere 7L'N_123456>D_U '% Var.one*ion(9ecords5%%ected N 1 3 en AsgBo* T9egistro #orradoU )lse AsgBo* T)rror al #orrar el registroU )nd '%

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

>2

Curso de Visual Basic Avanzado

%&em'lo 'ro'uesto ?)+etivo


)l o#-etivo de este e-em!lo es cam#iar la ca!a de acceso a la #ase de datos desarrollada en el e-em!lo anterior !ara "ue utilice 75O y O7B.7irect en lugar de Jet !ara acceder a la misma #ase de datos& !ero a trav1s de O7B.(

(esarrollo del e+em.lo


.rearemos un 7;L !ara la #ase de datos 6se llamar T5gendaU:& y cam#iaremos la clase .la75OKJet !or otra clase .la75OKO7B.7irect& "ue constar de los mismos m1todos& !ero utili0ar O7B.7irect !ara acceder a trav1s de O7B. a la #ase de datos( <na ve0 creada esta clase& el @nico cam#io a reali0ar en la a!licaci$n es sustituir en la clase agenda 6.la5genda: la sentencia Brivate O#-5ccesoB7 5s Le, .la75OKJet !or Brivate O#-5ccesoB7 5s Le, .la75OKO7B.7irect

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

>3

Curso de Visual Basic Avanzado

%&em'lo resuelto
<tili0aremos el %ormulario rmA'enda& el m$dulo Mod(e%iniciones y las clase Cla ic0a y ClaA'enda 6con la modi%icaci$n comentada:(

Cla(A?@?(BC(irect
JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK J )-em!lo > del .urso de Visual Basic 5van0ado J J .lase de acceso a #ases de datos utili0ando 75OKO7B.7irect JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK J .lase de acceso a #ases de datos utili0ando 75O y J O7B.7irect O!tion )*!licit Brivate Var+Is 5s +orIs!ace Brivate Var.one*ion 5s .onnection Brivate .onst .on.adena.one*ion N OO7B.?7535B5;)N5genda?<'7N?B+7N?7;LN5gendaO Bu#lic Bro!erty Met LumFic as6: 5s 'nteger On )rror Mo3o 3ratamiento)rror 7im 9set7atos 5s 9ecordset 7im .adena.one*ion 5s ;tring J .onstruimos la sentencia ;HL .adena.one*ion N Oselect count6[: %rom agendaO J )-ecutamos la consulta ;et 9set7atos N Var.one*ion(O!en9ecordset6.adena.one*ion: J O#tenemos el n@mero de %ic as LumFic as N 9set7atos(Fields6G:(Value J .erramos el 9ecordset 9set7atos(.lose )*it Bro!erty 3ratamiento)rror2 LumFic as N 81 )nd Bro!erty Bu#lic Function 5#rir5genda6: 5s .odigo9etorno On )rror Mo3o 3ratamiento)rror J .reamos el o#-eto +orIs!ace de O7B.7irect ;et Var+Is N .reate+orIs!ace6OO& K OO& OO& d#<seO7B.: J 5#rimos la cone*i$n utili0ando la cadena J de cone*i$n !rede%inida ;et Var.one*ion N Var+Is(O!en.onnection6OO& & & K .on.adena.one*ion:

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

>4

Curso de Visual Basic Avanzado 5#rir5genda N OI )*it Function 3ratamiento)rror2 5#rir5genda N )rror )nd Function Bu#lic Function .errar5genda6: 5s .odigo9etorno On )rror Mo3o 3ratamiento)rror J .erramos la #ase de datos Var.one*ion(.lose J .erramos el +orIs!ace Var+Is(.lose .errar5genda N OI )*it Function 3ratamiento)rror2 .errar5genda N )rror )nd Function Bu#lic Function MuardarFic a6ByVal O#-Fic a 5s .laFic a& K O!tional By9e% 'ntLumFic a 5s 'nteger: 5s .odigo9etorno On )rror Mo3o 3ratamiento)rror 7im 9set7atos 5s 9ecordset 7im .adena;HL 5s ;tring J .onstruimos la sentencia ;HL .adena;HL N Oinsert into agenda O P K O6Lom#re& 5!ellidos& 7ireccion& 3ele%ono: O P K Ovalues 6O P K OJO P O#-Fic a(;trLom#re P OJ&O P K OJO P O#-Fic a(;tr5!ellidos P OJ&O P K OJO P O#-Fic a(;tr7ireccion P OJ&O P K OJO P O#-Fic a(;tr3ele%ono P OJ:O J )-ecutamos la consulta Var.one*ion()*ecute .adena;HL J .om!ro#amos si se a reali0ado la inserci$n '% Var.one*ion(9ecords5%%ected \V 1 3 en MuardarFic a N )rror )*it Function )nd '% J O#tenemos el n@mero de %ic a asignado !or el servidor J LO352 en realidad& dado "ue el cam!o clave es el n@mero J de %ic a& este sentencia !uede devolver ms de un J registro& !ero no lo tendremos en cuenta .adena;HL N Oselect num%ic a %rom agenda O P K O, ere O P K OLom#reNJO P O#-Fic a(;trLom#re P OJ 5L7 O P K O5!ellidosNJO P O#-Fic a(;tr5!ellidos P OJ 5L7 O P K O7ireccionNJO P O#-Fic a(;tr7ireccion P OJ 5L7 O P K O3ele%onoNJO P O#-Fic a(;tr3ele%ono P OJO ;et 9set7atos N Var.one*ion(O!en9ecordset6.adena;HL:

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

>5

Curso de Visual Basic Avanzado '% Lot 9set7atos()OF 3 en J O#tenemos el c$digo de la nueva %ic a creada 'ntLumFic a N 9set7atos(Fields6G:(Value MuardarFic a N OI )lse MuardarFic a N )rror )nd '% J .erramos el 9ecordset 9set7atos(.lose )*it Function 3ratamiento)rror2 MuardarFic a N )rror )nd Function Bu#lic Function O#tenerFic a6By9e% O#-Fic a 5s .laFic a& K O!tional ByVal 'nt'ndice 5s 'nteger& K O!tional ByVal 'ntLumFic a 5s 'nteger: 5s .odigo9etorno On )rror Mo3o 3ratamiento)rror 7im 9set7atos 5s 9ecordset 7im .adena.one*ion 5s ;tring 7im 'ntFic a5ctual 5s 'nteger J .om!ro#amos si ay "ue #uscar !or ndice '% Lot 'sAissing6'nt'ndice: 3 en J 5#rimos un recordset seleccionando todos los J registros de la ta#la .adena.one*ion N Oselect [ %rom agenda order #y num%ic aO ;et 9set7atos N Var.one*ion(O!en9ecordset6.adena.one*ion: J 9ecorremos el 9ecordset asta encontrar la %ic a indicada +it 9set7atos 7o + ile Lot ()OF 'ntFic a5ctual N 'ntFic a5ctual / 1 '% 'ntFic a5ctual N 'nt'ndice 3 en )*it 7o )nd '% (AoveLe*t Loo! )nd +it J .om!ro#amos si ay "ue #uscar !or n@mero de %ic a )lse'% Lot 'sAissing6'ntLumFic a: 3 en J 5#rimos un recordset seleccionando el registro J directamente .adena.one*ion N Oselect [ %rom agenda O P K O, ere num%ic aNO P 'ntLumFic a P K Oorder #y num%ic aO ;et 9set7atos N Var.one*ion(O!en9ecordset6.adena.one*ion: )nd '% J .om!ro#amos si la emos encontrado& o emos llegado al J %inal del 9ecordset sin encontrarla +it 9set7atos '% ()OF 3 en O#tenerFic a N )rror )lse J Muardamos los datos o#tenidos O#-Fic a('ntLumFic a N (Fields6G:(Value O#-Fic a(;trLom#re N (Fields61:(Value

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

>6

Curso de Visual Basic Avanzado O#-Fic a(;tr5!ellidos N (Fields62:(Value O#-Fic a(;tr7ireccion N (Fields63:(Value O#-Fic a(;tr3ele%ono N (Fields64:(Value O#tenerFic a N OI )nd '% )nd +it J .erramos el 9ecordset 9set7atos(.lose )*it Function 3ratamiento)rror2 O#tenerFic a N )rror )nd Function Bu#lic Function BorrarFic a6ByVal 'ntLumFic a: 5s .odigo9etorno On )rror Mo3o 3ratamiento)rror 7im .adena;HL 5s ;tring J .onstruimos la sentencia ;HL .adena;HL N Odelete %rom agenda O P K O, ere num%ic aNO P 'ntLumFic a J )-ecutamos la sentencia ;HL Var.one*ion()*ecute .adena;HL J .om!ro#amos cuantas %ilas an sido a%ectadas '% Var.one*ion(9ecords5%%ected N 1 3 en BorrarFic a N OI )lse BorrarFic a N )rror )nd '% )*it Function 3ratamiento)rror2 BorrarFic a N )rror )nd Function Brivate ;u# .lassK'nitiali0e6: J .onectamos con la #ase de datos 5#rir5genda )nd ;u#

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

>>

Curso de Visual Basic Avanzado

N. Acceso a )ases de datos ,R(?Introduccin


.omo vimos en el e-em!lo anterior& el acceso a servidores de #ases de datos suele reali0arse a trav1s de O7B.( 97O 69emote 7ata O#-ects: es una %ina ca!a de o#-etos so#re el 5B' de O7B.& "ue !ermite utili0ar llamadas al 5B' de O7B. de %orma sencilla( 97O est diseEado !ara a!rovec ar al m*imo la !otencia de servidores de #ases de datos inteligentes& es!ecialmente ;HL ;erver( 3iene multitud de o!ciones "ue !ermiten incrementar el rendimiento de las a!licaciones "ue utilicen 97O& !or eso es el mas utili0ado en cliente8servidor( )n realidad ya conocemos a grandes rasgos c$mo %unciona 97O& !uesto "ue O7B.7irect es s$lo una %orma de utili0ar 97O desde 75O(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

>D

Curso de Visual Basic Avanzado

Conocimientos tericos El modelo de o)+etos R(?


Los o#-etos y las colecciones de 97O !ro!orcionan un marco !ara utili0ar c$digo con el %in de crear y mani!ular com!onentes de un sistema de #ase de datos remota de O7B.( 5l igual "ue 75O& las clases de los o#-etos de acceso a datos se organi0an en una -erar"ua& en la "ue la mayora de las clases !ertenecen a una clase de colecci$n& "ue a su ve0 !ertenece a otra clase en la -erar"ua( La %igura de la derec a muestra la -erar"ua com!leta de 97O(

Estructura de una a.licacin de )ases de datos en Visual )asic con R(?


La estructura de una a!licaci$n de #ases de datos en Visual Basic "ue utili0a 97O es casi id1ntica a la de la a!licaciones "ue utili0an 75O con O7B.7irect( Los modelos 75O y 97O son e"uivalentes en cuanto a o#-etos& la di%erencia es "ue estn !rogramados internamente !ara tra#a-ar a trav1s de O7B. o en local& !ero !ara el !rogramador& conociendo la manera de !rogramar con uno& le de#e ser %cil tra#a-ar con el otro( )n la siguiente ta#la se recogen las corres!ondencias entre los o#-etos utili0ados en 97O y sus o#-etos e"uivalentes en 75O2 ?)+eto de R(? rdo)ngine rdo)rror rdo)nvironment rdo.onnection rdo3a#le Lo est im!lementado rdo9esultset Lo im!lementado 3i!o Zeyset 3i!o static 6lSe: 3i!o dynamic 3i!o %or,ard8only 6sin cursor: rdo.olumn rdoHuery rdoBarameter Lo im!lementado Lo im!lementado Lo im!lementado Field Huery7e% Barameter 9elation Mrou! <ser Ti.o ,si a.lica)le?)+eto de eMuivalente 7B)ngine )rror +orIs!ace 7ata#ase 3a#le7e% 'nde* 9ecordset (A? Ti.o ,si a.lica)le-

3i!o ta#le 3i!o 7ynaset 3i!o ;na!s ot 6sSl: 6ninguno: 3i!o %or,ard8only 6ninguno:

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

>9

Curso de Visual Basic Avanzado

Pro'ramacin con R(?


)n las siguientes lneas vamos a comentar c$mo !rogramar una a!licaci$n "ue acceda a una #ase de datos a trav1s de 97O& e*!licando las acciones ms comunes "ue de#eremos im!lementar( )n los dos ca!tulos anteriores comentamos "ue e*isten muc as !osi#ilidades "ue no emos tratado( )sto se a!lica es!ecialmente a 97O& !ues !ro!orciona muc as !osi#ilidades en %unci$n del ;MB7 con el "ue tra#a-emos 6so#re todo con ;HL ;erver:& como consultas asncronas& cursores del lado del servidor& e-ecuci$n de !rocedimientos en el servidor& etc( ;i !rogramamos con Visual Basic 5(G& es necesario incluir en el !royecto una re%erencia a 1icroso,t Remote Data +b&ect 94:( <tili0aremos la misma #ase de datos descrita en el ca!tulo anterior& as como el mismo 7;L( Varia)les utilizadas& )n los siguientes e-em!los utili0aremos una varia#le Var.one*ion "ue re!resentar la cone*i$n con el ;MB7 y la misma constante !ara la cadena de cone*i$n O7B. "ue utili0amos en el ca!tulo anterior2 7im Var.one*ion 5s Le, rdo.onnection 7im .onst .on.adena.one*ion N OO7B.?7535B5;)NAiB7?<'7N?B+7N?7;LNAi7;LO Cone/in con el S"B(& )sta#leceremos la cone*i$n con el ;MB7 utili0ando el m1todo %stablishConnection de la cone*i$n( 5ntes de a#rir la cone*i$n& tenemos "ue es!eci%icar el ti!o de cursor a utili0ar utili0ando la !ro!iedad CursorDriver de la cone*i$n 6es!eci%icaremos rd"se+dbc:& as como la cadena de cone*i$n usando la !ro!iedad Connect2 +it Var.one*ion (.ursor7river N rd<seOd#c (.onnect N .on.adena.one*ion ()sta#lis .onnection rd7riverLoBrom!t )nd +it 2tilizacin de Resultsets& .omo ya di-imos en el ca!tulo anterior& los Recordsets creados con O7B.7irect son en realidad Resultsets de 97O( Bor lo tanto& la %orma de tra#a-ar con estos Resultsets ser muy seme-ante a la "ue ya conocemos( Bara a#rir un Resultset& crearemos la consulta ;HL "ue genere el con-unto de registros #uscado y utili0aremos el m1todo +'enResultset de la cone*i$n !ara lan0arla( E+em.lo de utilizacin de Resultsets& Bara sacar en la !antalla Debu# los datos de cada registro de la ta#la TAi3a#laU utili0aremos el m1todo +'enResultset de la cone*i$n& !asndole la consulta ;HL "ue o#tiene todos los datos de la ta#la( Bara acceder a cada uno de los cam!os del registro actual& utili0aremos la colecci$n rdoColumns del Resultset& "ue contiene todos los cam!os del registro actual( 7im 9set7atos 5s rdo9esultset ;et 9set7atos N Var.one*ion(O!en9esultset6Oselect [ %rom Ai3a#laO: +it 9set7atos 7o + ile Lot ()OF 7e#ug(Brint T7L'2 U P (rdo.olumns6G:(Value P v#.9LF P K

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

DG

Curso de Visual Basic Avanzado TLom#re2 T P ( rdo.olumns61:(Value P v#.9LF P K T5!ellidos2 T P ( rdo.olumns62:(Value (AoveLe*t Loo! )nd +it Sentencias Mue no devuelven datos& La %orma de e-ecutar sentencias "ue no devuelven datos en 97O es id1ntica a la "ue ya emos visto con O7B.7irect(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

D1

Curso de Visual Basic Avanzado

%&em'lo 'ro'uesto ?)+etivo


)l o#-etivo de este e-em!lo es cam#iar la ca!a de acceso a la #ase de datos desarrollada en el e-em!lo anterior !ara "ue utilice 97O en lugar de 75O y O7B.7irect !ara acceder a la misma #ase de datos a trav1s de O7B.(

(esarrollo del e+em.lo


<tili0aremos el 7;L creado en el e-em!lo anterior y cam#iaremos la clase .la75OKO7B.7irect !or una nueva clase .la97O& "ue constar de los mismo m1todos !ero utili0ar 97O !ara acceder a trav1s de O7B. a la #ase de datos( <na ve0 creada esta clase& el @nico cam#io a reali0ar en la a!licaci$n es sustituir en la clase agenda 6.la5genda: la sentencia 5rivate 6b )cceso-1 )s 7e8 ,la1)6_61-,1irect !or 5rivate 6b )cceso-1 )s 7e8 ,la916

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

D2

Curso de Visual Basic Avanzado

%&em'lo resuelto
<tili0aremos el %ormulario rmA'enda& el m$dulo Mod(e%iniciones y las clase Cla ic0a y ClaA'enda 6con la modi%icaci$n comentada:(

ClaR(?
JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK J )-em!lo D del .urso de Visual Basic 5van0ado J J .lase de acceso a #ases de datos utili0ando 97O JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK O!tion )*!licit Brivate Var.one*ion 5s Le, rdo.onnection Brivate .onst .on.adena.one*ion N OO7B.?7535B5;)N5genda?<'7N?B+7N?7;LN5gendaO Bu#lic Bro!erty Met LumFic as6: 5s 'nteger On )rror Mo3o 3ratamiento)rror 7im 9set7atos 5s rdo9esultset 7im .adena.one*ion 5s ;tring J .onstruimos la sentencia ;HL .adena.one*ion N Oselect count6[: %rom agendaO J )-ecutamos la consulta ;et 9set7atos N Var.one*ion(O!en9esultset6.adena.one*ion: J O#tenemos el n@mero de %ic as LumFic as N 9set7atos(rdo.olumns6G:(Value J .erramos el rdoresultset 9set7atos(.lose )*it Bro!erty 3ratamiento)rror2 LumFic as N 81 )nd Bro!erty Bu#lic Function 5#rir5genda6: 5s .odigo9etorno On )rror Mo3o 3ratamiento)rror J 5#rimos la cone*i$n utili0ando la cadena J de cone*i$n !rede%inida +it Var.one*ion (.ursor7river N rd<seOd#c (.onnect N .on.adena.one*ion ()sta#lis .onnection rd7riverLoBrom!t )nd +it 5#rir5genda N OI )*it Function 3ratamiento)rror2 5#rir5genda N )rror )nd Function

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

D3

Curso de Visual Basic Avanzado Bu#lic Function .errar5genda6: 5s .odigo9etorno On )rror Mo3o 3ratamiento)rror J .erramos la #ase de datos Var.one*ion(.lose .errar5genda N OI )*it Function 3ratamiento)rror2 .errar5genda N )rror )nd Function Bu#lic Function MuardarFic a6ByVal O#-Fic a 5s .laFic a& K O!tional By9e% 'ntLumFic a 5s 'nteger: 5s .odigo9etorno On )rror Mo3o 3ratamiento)rror 7im 9set7atos 5s rdo9esultset 7im .adena;HL 5s ;tring J .onstruimos la sentencia ;HL .adena;HL N Oinsert into agenda O P K O6Lom#re& 5!ellidos& 7ireccion& 3ele%ono: O P K Ovalues 6O P K OJO P O#-Fic a(;trLom#re P OJ&O P K OJO P O#-Fic a(;tr5!ellidos P OJ&O P K OJO P O#-Fic a(;tr7ireccion P OJ&O P K OJO P O#-Fic a(;tr3ele%ono P OJ:O J )-ecutamos la consulta Var.one*ion()*ecute .adena;HL J .om!ro#amos si se a reali0ado la inserci$n '% Var.one*ion(9o,s5%%ected \V 1 3 en MuardarFic a N )rror )*it Function )nd '% J O#tenemos el n@mero de %ic a asignado !or el servidor J LO352 en realidad& dado "ue el cam!o clave es el n@mero J de %ic a& este sentencia !uede devolver ms de un J registro& !ero no lo tendremos en cuenta .adena;HL N Oselect num%ic a %rom agenda O P K O, ere O P K OLom#reNJO P O#-Fic a(;trLom#re P OJ 5L7 O P K O5!ellidosNJO P O#-Fic a(;tr5!ellidos P OJ 5L7 O P K O7ireccionNJO P O#-Fic a(;tr7ireccion P OJ 5L7 O P K O3ele%onoNJO P O#-Fic a(;tr3ele%ono P OJO ;et 9set7atos N Var.one*ion(O!en9esultset6.adena;HL: '% Lot 9set7atos()OF 3 en J O#tenemos el c$digo de la nueva %ic a creada 'ntLumFic a N 9set7atos(rdo.olumns6G:(Value MuardarFic a N OI )lse MuardarFic a N )rror )nd '% J .erramos el rdoresultset 9set7atos(.lose

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

D4

Curso de Visual Basic Avanzado )*it Function 3ratamiento)rror2 MuardarFic a N )rror )nd Function Bu#lic Function O#tenerFic a6By9e% O#-Fic a 5s .laFic a& K O!tional ByVal 'nt'ndice 5s 'nteger& K O!tional ByVal 'ntLumFic a 5s 'nteger: 5s .odigo9etorno On )rror Mo3o 3ratamiento)rror 7im 9set7atos 5s rdo9esultset 7im .adena.one*ion 5s ;tring 7im 'ntFic a5ctual 5s 'nteger J .om!ro#amos si ay "ue #uscar !or ndice '% Lot 'sAissing6'nt'ndice: 3 en J 5#rimos un rdoresultset seleccionando todos los J registros de la ta#la .adena.one*ion N Oselect [ %rom agenda order #y num%ic aO ;et 9set7atos N Var.one*ion(O!en9esultset6.adena.one*ion: J 9ecorremos el rdoresultset asta encontrar la %ic a indicada +it 9set7atos 7o + ile Lot ()OF 'ntFic a5ctual N 'ntFic a5ctual / 1 '% 'ntFic a5ctual N 'nt'ndice 3 en )*it 7o )nd '% (AoveLe*t Loo! )nd +it J .om!ro#amos si ay "ue #uscar !or n@mero de %ic a )lse'% Lot 'sAissing6'ntLumFic a: 3 en J 5#rimos un rdoresultset seleccionando el registro J directamente .adena.one*ion N Oselect [ %rom agenda O P K O, ere num%ic aNO P 'ntLumFic a P K Oorder #y num%ic aO ;et 9set7atos N Var.one*ion(O!en9esultset6.adena.one*ion: )nd '% J .om!ro#amos si la emos encontrado& o emos llegado al J %inal del rdoresultset sin encontrarla +it 9set7atos '% ()OF 3 en O#tenerFic a N )rror )lse J Muardamos los datos o#tenidos O#-Fic a('ntLumFic a N (rdo.olumns6G:(Value O#-Fic a(;trLom#re N (rdo.olumns61:(Value O#-Fic a(;tr5!ellidos N (rdo.olumns62:(Value O#-Fic a(;tr7ireccion N (rdo.olumns63:(Value O#-Fic a(;tr3ele%ono N (rdo.olumns64:(Value O#tenerFic a N OI )nd '% )nd +it J .erramos el rdoresultset 9set7atos(.lose

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

D5

Curso de Visual Basic Avanzado )*it Function 3ratamiento)rror2 O#tenerFic a N )rror )nd Function Bu#lic Function BorrarFic a6ByVal 'ntLumFic a: 5s .odigo9etorno On )rror Mo3o 3ratamiento)rror 7im .adena;HL 5s ;tring J .onstruimos la sentencia ;HL .adena;HL N Odelete %rom agenda O P K O, ere num%ic aNO P 'ntLumFic a J )-ecutamos la sentencia ;HL Var.one*ion()*ecute .adena;HL J .om!ro#amos cuantas %ilas an sido a%ectadas '% Var.one*ion(9o,s5%%ected N 1 3 en BorrarFic a N OI )lse BorrarFic a N )rror )nd '% )*it Function 3ratamiento)rror2 BorrarFic a N )rror )nd Function Brivate ;u# .lassK'nitiali0e6: J .onectamos con la #ase de datos 5#rir5genda )nd ;u#

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

D6

Curso de Visual Basic Avanzado

9. El re'istro de Findo7s
Introduccin
)l o#-etivo de este ca!tulo es introducir al lector en un tema com!le-o como es el tratamiento del registro de +indo,s( ;e e*!licar c$mo se estructura el registro de +indo,s& c$mo !odemos o#tener valores almacenados en 1l y c$mo crear nuevas claves y valores de di%erentes ti!os( Bero todos los accesos al registro de)en ser controlados& ya "ue del registro de!ende el correcto %uncionamiento del ;(O(& !or lo "ue cual"uier cam#io !odra re!ercutir en el %uncionamiento correcto del sistema( )l acceso al registro de +indo,s im!lica la utili0aci$n de las corres!ondientes %unciones "ue !ro!orciona el 5B' de +indo,s& !or lo "ue en este ca!tulo se e*!licar someramente "u1 es y c$mo se utili0a dic o 5B' 65!!lication Brogramming 'nter%ace& o 'nter%a0 !ara la Brogramaci$n de 5!licaciones:(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

D>

Curso de Visual Basic Avanzado

Conocimientos tericos Eu: es el re'istro de Findo7s


)n +indo,s 3(1 y en las versiones anteriores de +indo,s& la con%iguraci$n de los !rogramas se almacena#an normalmente en arc ivos (ini( )n +indo,s L3& en +indo,s 95 y en las versiones !osteriores de +indo,s& la con%iguraci$n de los !rogramas se almacena en el registro del sistema& todas las instalaciones reali0adas& versiones de li#reras& controles((( "uedan re%le-ados en el registro(

Cmo acceder al re'istro de Findo7s


Bodemos acceder manualmente a los valores almacenados en el registro de +indo,s utili0ando la a!licaci$n Re#edit2

3am#i1n !odemos acceder al registro de +indo,s desde Visual Basic utili0ando las %unciones "ue !ro!orciona el 5B' de +indo,s "ue veremos mas adelante& !ero antes !ro%undi0aremos en la de%inici$n del re4istro(

Estructura del re'istro de Findo7s


Los elementos almacenados en el registro de +indo,s se dividen en dos ti!os2 claves& "ue se estructuran en %orma de directorios( valores de cadena& #inarios o 7+O97( Bara acceder al valor contenido en una clave es necesario conocer el :path; com!leto de 1sta 6!or e-em!lo& !ara conocer el n^ de versi$n de +indo,s ay "ue consultar la clave CZ)=KLO.5LKA5.C'L)];OF3+59)]Aicroso%t]+indo,s].urrentVersion]VersionLum#er:(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

DD

Curso de Visual Basic Avanzado

Cmo utilizar el API de Findo7s


Bara !oder utili0ar las %unciones "ue !ro!orciona el 5B' de +indo,s es necesario declarar las %unciones "ue 1ste im!lementa& as como los !osi#les ti!os de datos y constantes "ue utilicen( Bodemos o#tener esta in%ormaci$n utili0ando el Visor de te/to API "ue !ro!orciona Visual Basic& a#riendo el arc ivo Fin4*a.i.t/t "ue estar en el directorio Fina.i de la instalaci$n de Visual Basic( )sta a!licaci$n& como se ve en la %igura& nos !ermite conocer el nom#re de las %unciones "ue im!lementa el 5B' de +indo,s& as como la %orma de declararlas& los argumentos "ue utili0an& los valores de retorno& etc( Bor e-em!lo& si "uisi1ramos utili0ar la %unci$n 9egO!enZey& "ue nos !ermite a#rir una clave del registro& #uscaramos el nom#re de la %unci$n en el cuadro de lista su!erior& aramos do#le clicI so#re el nom#re y co!iaramos la declaraci$n en nuestro c$digo de Visual Basic 6en realidad& !ara utili0ar esta %unci$n necesitamos o#tener tam#i1n ciertas constantes "ue indican las ramas del registro donde vamos a #uscar& entre otras:(

Bero el !ro#lema "ue tienen los visores 5B' es "ue no !ro!orcionan una #reve e*!licaci$n del contenido de el 5B' seleccionada& !or lo "ue muc as veces ay "ue usar la intuici$n !ara encontrar una "ue nos solucione el !ro#lema( )n el siguiente cuadro se muestran algunas de las %unciones "ue !ro!orciona el 5B' de +indo,s !ara acceso al registro y su corres!ondiente declaraci$n2 uncin 9egO!enZey 9eg.loseZey (escri.cin 5#re una e*istente (eclaracin clave 7eclare Function O;9egO!enZey Li# Oadva!i32O 5lias O9egO!enZey5O 6ByVal Zey 5s Long& ByVal l!s0;u#Zey 5s ;tring& ! I9esult 5s Long: 5s Long .ierra una clave a#ierta 7eclare Function O;9eg.loseZey Li# Oadva!i32O con 9egO!enZey 5lias O9eg.loseZeyO 6ByVal Zey 5s Long: 5s Long

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

D9

Curso de Visual Basic Avanzado

9eg.reateZey 9eg7eleteZey 9egHueryValue)*

.rea una nueva clave )limina una e*istente clave

O#tiene el valor de una clave& es!eci%icando tam#i1n su ti!o )sta#lece el valor de una clave

9eg;etValue)*

7eclare Function O;9eg.reateZey Li# Oadva!i32O 5lias O9eg.reateZey5O 6ByVal Zey 5s Long& ByVal l!s0;u#Zey 5s ;tring& ! I9esult 5s Long: 5s Long 7eclare Function O;9eg7eleteZey Li# Oadva!i32O 5lias O9eg7eleteZey5O 6ByVal Zey 5s Long& ByVal l!s0;u#Zey 5s ;tring: 5s Long 7eclare Function O;9egHueryValue)* Li# Oadva!i32O 5lias O9egHueryValue)*5O 6ByVal Zey 5s Long& ByVal l!s0ValueLame 5s ;tring& ByVal d,9eserved 5s Long& l!d,3y!e 5s Long& l!#7ata 5s 5ny& c#7ata 5s Long: 5s Long 7eclare Function O;9eg;etValue)* Li# Oadva!i32O 5lias O9eg;etValue)*5O 6ByVal Zey 5s Long& ByVal l!s0ValueLame 5s ;tring& ByVal d,9eserved 5s Long& ByVal %d,3y!e 5s Long& l!#7ata 5s 5ny& ByVal c#7ata 5s Long: 5s Long

Bara !oder utili0ar estas %unciones es necesario declarar tam#i1n varias constantes& "ue se es!eci%ican en el siguiente cuadro2 Constante Mlo#al .onst CZ)=K.L5;;);K9OO3 N PCDGGGGGGG Mlo#al .onst CZ)=K.<99)L3K<;)9 N PCDGGGGGG1 Mlo#al .onst CZ)=KLO.5LKA5.C'L) N PCDGGGGGG2 Mlo#al .onst CZ)=K<;)9; N PCDGGGGGG3 .onst )99O9K;<..);; N GP .onst 9)MK;` N 1 .onst 9)MKB'L59= N 3 .onst 9)MK7+O97 N 4 A.ertura de una clave e/istente& Bara a#rir una clave e*istente de#emos es!eci%icar la rama donde se encuentra 6CZ)=K.L5;;);K9OO3& etc: y el :path; restante de la clave "ue "ueremos a#rir( <na ve0 a#ierta& nos devolver un valor de ti!o long "ue identi%ica a esa clave& y nos !ermitir tra#a-ar con ella( <tili0aremos la %unci$n Re#+'en;e!& controlando si el valor de retorno es %RR+R7S"CC%SS& lo "ue indicara "ue todo a ido #ien( Bor e-em!lo& si "ueremos a#rir la clave CZ)=KLO.5LKA5.C'L)];OF3+59)]Aicroso%t utili0aramos el siguiente c$digo2 7im Zey 5s Long '% O;9egO!enZey6CZ)=KLO.5LKA5.C'L)& T;OF3+59)]Aicroso%tU& Zey: N )99O9K;<..);; 3 en AsgBo* T.lave a#iertaU )lse AsgBo* T)rror al a#rir la claveU )nd '% (escri.cin 7e%ine la rama CZ)=K.L5;;);K9OO3 7e%ine la rama CZ)=K.<99)L3K<;)9 7e%ine la rama CZ)=KLO.5LKA5.C'L) 7e%ine la rama CZ)=K<;)9; Valor de error 3i!o de dato ;tring 3i!o de dato #inario 3i!o de dato 7+O97

)*isten ms constantes de este ti!o& !ero s$lo mencionamos las necesarias !ara el desarrollo del e-em!lo corres!ondiente a este ca!tulo 1999 Jorge Ordovs Oromenda y Vicente Lema Osca 9G

Curso de Visual Basic Avanzado Cerrado de una clave a)ierta& Bara cerrar una clave a#ierta& utili0aremos la %unci$n Re#Close;e!& !asndole el identi%icador de la clave a#ierta( 3am#i1n en este caso de#emos com!ro#ar si el valor devuelto !or la %unci$n es )99O9K;<..);;( Bor e-em!lo& !ara cerrar la clave a#ierta en el e-em!lo anterior& utili0aramos el siguiente %ragmento de c$digo2 '% O;9eg.loseZey6 Zey: N )99O9K;<..);; 3 en AsgBo* T.lave cerradaU )lse AsgBo* T)rror al cerrar la claveU )nd '% Creacin de una clave nueva& Bara crear una clave nueva en el registro utili0aremos la %unci$n Re#Create;e!( )sta %unci$n crear la clave nueva 6o la a#rir& si e*iste: y nos !ro!orcionar el identi%icador de la clave reci1n credaSa#ierta( .omo en los casos anteriores& emos de com!ro#ar si devuelve )99O9K;<..);;( Bor e-em!lo& !ara crear la clave CZ)=KLO.5LKA5.C'L)];OF3+59)]Ai.lave utili0aramos la siguiente sentencia2 '% O;9eg.reateZey6CZ)=KLO.5LKA5.C'L)& O;OF3+59)]Ai.laveO& ZeyLueva: N )99O9K;<..);; t en AsgBo* T.lave creadaU )lse AsgBo* T)rror al crear la claveU )nd '% Esta)lecimiento del valor de una clave Bara esta#lecer el valor de una clave e*istente utili0aremos la %unci$n Re#SetValue%*& a la "ue !asaremos el identi%icador de la clave a#ierta& el nom#re "ue vamos a darle a ese valor 6si no se es!eci%ica& se entender "ue es el valor !or de%ecto de dic a clave: y el !ro!io valor( )s necesario concretar "u1 ti!o de valor es 6una cadena 69)MK;`:& un valor #inario 69)MKB'L59=: o un valor num1rico 69)MK7+O97:: y "u1 longitud tiene( Bor e-em!lo& una ve0 creada la clave anterior& crearemos un valor nuevo dentro de ella "ue se llamar AiValor y contendr la cadena T)sto es una !rue#aU2 '% O;9eg;etValue)*6 ZeyLueva& TAiValorU& GP& 9)MK;`& T)sto es una !rue#aU& Len6T)sto es una !rue#aU: / 1: N )99O9K;<..);; t en AsgBo* TValor creadoU )lse AsgBo* T)rror al crear el valorU )nd '% 7entro de la misma clave& crearemos un nuevo valor llamado AiLuevoValor& "ue contendr el n@mero 1> 6como vamos a crearlo como 9)MK7+O97& el tamaEo es 4:2 '% O;9eg;etValue)*6 ZeyLueva& TAiLuevoValorU& GP& 9)MK7+O97& 1>& 4: N )99O9K;<..);; t en AsgBo* TValor creadoU )lse AsgBo* T)rror al crear el valorU )nd '%

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

91

Curso de Visual Basic Avanzado ?)tencin de al'uno de los valores de una clave& Bara o#tener alguno de los valores asociados a una clave utili0aremos la %unci$n Re# uer!Value%*& a la "ue !asaremos el identi%icador de la clave a#ierta& el nom#re del valor "ue "ueremos o#tener 6si no se es!eci%ica& se entender "ue es el valor !or de%ecto de dic a clave:& una varia#le donde se guardar el ti!o del valor recogido& un buffer donde se guardar el valor recogido y una varia#le donde se guardar el tamaEo del valor recogido( .omo es !osi#le o#tener valores de ti!os y tamaEos di%erentes& esta %unci$n se llamar dos veces2 la !rimera con un buffer vaco 6GP: !ara o#tener el ti!o y el tamaEo del valor? la segunda con el buffer corres!ondiente a este ti!o y de tamaEo correcto 6XOJOY2 en el caso de R%-7S< de#emos reservar e*!resamente es!acio de memoria:( <na ve0 o#tenido el valor& ay "ue coger s$lo el tamaEo es!eci%icado del valor( Bor e-em!lo& si "ueremos o#tener el valor AiValor de la clave anterior& utili0aremos la siguiente sentencia 6XOJOY2 el 0!Val es im!ortante: 7im lValue3y!e as Long 7im ;trBu% 5s ;tring 7im l7ataBu%;i0e 5s Long '% O;9egHueryValue)*6 ZeyLueva& TAiValorU& GP& lValue3y!e& ByVal GP& l7ataBu%;i0e: N )99O9K;<..);; 3 en '% lValue3y!e N 9)MK;` 3 en ;trBu% N ;tring6l7ataBu%;i0e& O O: '% O;9egHueryValue)*6 Zey& strValueLame& GP& GP& ByVal ;trBu%& l7ataBu%;i0e: N )99O9K;<..);; 3 en 9egHuery;tringValue N 3rue ;tr7ata N Le%t6;trBu%& l7ataBu%;i0e 8 1: )nd '% )nd '% )nd '% ;i "ueremos o#tener el valor AiLuevoValor de la clave anterior& utili0aremos la sentencia2 7im lValue3y!e 5s Long 7im lBu% 5s Long 7im l7ataBu%;i0e 5s Long l7ataBu%;i0e N 4 '% O;9egHueryValue)*6 ZeyLueva& TAiLuevoValorU& GP& lValue3y!e& lBu%& l7ataBu%;i0e: N )99O9K;<..);; 3 en '% lValue3y!e N 9)MK7+O97 3 en l7ata N lBu% )nd '% )nd '% Borrado de una clave& Bara #orrar una clave e*istente utili0aremos la %uncion Re#Delete;e!& a la "ue !asaremos el identi%icador de la clave a#ierta y la su#clave "ue "ueremos #orrar( Bor e-em!lo& !ara #orrar la clave CZ)=KLO.5LKA5.C'L)];OF3+59)]Ai.lave y todo lo "ue a !artir de ella emos creado& utili0aramos la sentencia2 '% O;9egO!enZey6CZ)=KLO.5LKA5.C'L)& T;OF3+59)U& Zey: N )99O9K;<..);; 3 en '% O;9eg7eleteZey6 Zey& OAi.laveO: N )99O9K;<..);; t en AsgBo* T.lave #orradaU )nd '% )nd '%

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

92

Curso de Visual Basic Avanzado

%&em'lo 'ro'uesto ?)+etivo


)l o#-etivo de este e-em!lo es crear un %ormulario de inicio de la a!licaci$n "ue emos desarrollado& de %orma "ue nos !ermita 1G usos y luego no nos de-e e-ecutar ms la a!licaci$n& a no ser "ue la registremos( Bara controlar esto utili0aremos el registro de +indo,s& en el llevaremos el control de veces "ue se a e-ecutado la a!licaci$n y guardaremos el registro de la a!licaci$n& tal y como acen la mayora de las a!licaciones del mercado(

(esarrollo del e+em.lo


.rearemos un m$dulo Aod9egistro "ue !ro!orcione las siguientes %unciones2 unction Re'CreateOe!,B!Val 0Oe! As #on'$ B!Val l.szOe! As Strin'$ .01Result As #on'- As Boolean unction Re'SetStrin'Value,B!Val 0Oe! As #on'$ B!Val strValue6ame As Strin'$ B!Val Str(ata As Strin'- As Boolean unction Re'Set6umericValue,B!Val 0Oe! As #on'$ B!Val strValue6ame As Strin'$ B!Val l(ata As #on'$ ?.tional B!Val %#o'- As Boolean unction Re'?.enOe!,B!Val 0Oe! As #on'$ B!Val l.szSu)Oe! As Strin'$ .01Result As #on'- As Boolean unction Re'(eleteOe!,B!Val 0Oe! As #on'$ B!Val l.szSu)Oe! As Strin'- As Boolean unction Re'CloseOe!,B!Val 0Oe! As #on'- As Boolean unction Re'Euer!Strin'Value,B!Val 0Oe! As #on'$ B!Val strValue6ame As Strin'$ Str(ata As Strin'- As Boolean unction Re'Euer!6umericValue,B!Val 0Oe! As #on'$ B!Val strValue6ame As Strin'$ l(ata As #on'- As Boolean

)stas %unciones utili0aran sus corres!ondientes %unciones del 5B' de +indo,s& tal y como se a e*!licado antes en este ca!tulo( .rearemos un %ormulario FrmBresentacion de inicio de la a!licaci$n como el "ue a!arece en la siguiente %igura2

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

93

Curso de Visual Basic Avanzado

.ada ve0 "ue se e-ecute la a!licaci$n se lan0arara este %ormulario 6!ara este e-em!lo no a#r a!licaci$n "ue lan0ar2 tanto si la a!licaci$n se registra como si es est en !erodo de !rue#a o se su!era 1ste& el %ormulario se descargar y nada ms:( La !rimera ve0 "ue se e-ecute la a!licaci$n& este %ormulario crear una clave CZ)=KLO.5LKA5.C'L)];OF3+59)]5genda en el registro& y en esta clave dos valores2 Aa*'ntentosN1G y Lum'ntentosN1( 5ctuali0ar el ca!tion del la#el in%erior !ara mostrar el n@mero m*imo de e-ecuciones !ermitidas y el n@mero actual de e-ecuciones( .ada ve0 "ue se e-ecute la a!licaci$n se incrementar Lum'ntentos y se com!ro#ar si es menor "ue Aa*'ntentos& de %orma "ue si se llega al n@mero m*imo de intentos no se !ermita la e-ecuci$n del !rograma( )n cada caso se actuali0ar el ca!tion( )n todo momento se !ermitir registrar la a!licaci$n& en cuyo caso se lan0ar un %ormulario como el siguiente2

5l !ulsar el #ot$n ace!tar& crearemos un nuevo valor 7atos9egistro en nuestra clave& "ue contendr el nom#re y clave de registro se!arados !or un gui$n( La a!licaci$n de#e com!ro#ar cada ve0 "ue se e-ecuta si e*iste el valor 7atos9egistro& en cuyo caso se su!one "ue est registrada y no se tomar en cuenta el valor de Lum'ntentos y Aa*'ntentos del registro& !ermitiendo siem!re lan0ar la a!licaci$n 6en nuestro caso siem!re se descargar el %ormulario:(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

94

Curso de Visual Basic Avanzado

%&em'lo resuelto rmPresentacion


JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK J )-em!lo 9 del .urso de Visual Basic 5van0ado J J Formulario de !resentaci$n& en 1l com!ro#amos los usos& la registraci$n de la a!licaci$n((( JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK O!tion )*!licit .onst .onAa*'ntentos N 1G Brivate ;u# But5ce!tarK.licI6: J 5"u com!ro#aramos si se lan0a la a!licaci$n <nload Ae )nd ;u# Brivate ;u# But9egistrarK.licI6: 7im ;tr.lave 5s ;tring 7im ;tr.adena9egistro 5s ;tring 7im Iey)*istente 5s Long J Aostramos el %ormulario de registro %rm9egistro(; o, v#Aodal J 5#rimos la clave del registro '% 9egO!enZey6CZ)=KLO.5LKA5.C'L)& O;OF3+59)]5gendaO& Iey)*istente: 3 en J .om!ro#amos si est registrado ;tr.lave N O7atos9egistroO '% 9egHuery;tringValue6 Iey)*istente& ;tr.lave& ;tr.adena9egistro: 3 en La#3e*toBresentacion(.a!tion N OVersi$n registrada& com!letamenta o!eracional(O P v#.rL% P OXX7is%r@telaYYO La#Lum<sos(Visi#le N False But9egistrar()na#led N False )*it ;u# )nd '% J .erramos la clave del registro 9eg.loseZey Iey)*istente )nd '% )nd ;u# Brivate ;u# FormKLoad6: 7im Zey 5s Long 7im Iey)*istente 5s Long 7im ;tr.lave 5s ;tring 7im ;tr.adena9egistro 5s ;tring 7im LngLum'ntentos 5s Long 7im LngAa*'ntentos 5s Long J 5#rimos la clave del regi;tro '% 9egO!enZey6CZ)=KLO.5LKA5.C'L)& O;OF3+59)]5gendaO& Iey)*istente: 3 en

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

95

Curso de Visual Basic Avanzado J .om!ro#amos si est registrado ;tr.lave N O7atos9egistroO '% 9egHuery;tringValue6 Iey)*istente& ;tr.lave& ;tr.adena9egistro: 3 en La#3e*toBresentacion(.a!tion N OVersi$n registrada& com!letamenta o!eracional(O P v#.rL% P OXX7is%r@telaYYO 9eg.loseZey Iey)*istente But9egistrar()na#led N False )*it ;u# )nd '% J .omo no est registrado& o#tenemos el n@mero m*imo de intentos ;tr.lave N OAa*'ntentosO '% 9egHueryLumericValue6 Iey)*istente& ;tr.lave& LngAa*'ntentos: 3 en J .om!ro#amos cuntos intentos van ;tr.lave N OLum'ntentosO '% 9egHueryLumericValue6 Iey)*istente& ;tr.lave& LngLum'ntentos: 3 en J .om!ro#amos si se a llegado al n@mero m*imo de intentos '% LngLum'ntentos \ LngAa*'ntentos 3 en J 'ncrementamos el n@mero de usos y lo guardamos en el registro LngLum'ntentos N LngLum'ntentos / 1 9eg;etLumericValue Iey)*istente& OLum'ntentosO& LngLum'ntentos J 5ctuali0amos el %ormulario La#Lum<sos(.a!tion N OLa agenda a sido utili0ada O P LngLum'ntentos P O veces 6m*imo O P LngAa*'ntentos P O:O )lse La#Lum<sos(.a!tion N OLa agenda a sido utili0ada O P LngLum'ntentos P O veces 6m*imo O P LngAa*'ntentos P O:( 9egistre la versi$n antes de continuar(O )nd '% )nd '% )nd '% 9eg.loseZey Iey)*istente )lse J .omo no e*iste& la creamos '% 9eg.reateZey6CZ)=KLO.5LKA5.C'L)& O;OF3+59)]5gendaO& Zey: 3 en J L@mero m*imo de intentos 9eg;etLumericValue Zey& OAa*'ntentosO& .onAa*'ntentos J L@mero de intentos reali0ado 9eg;etLumericValue Zey& OLum'ntentosO& 1 9eg.loseZey Zey J 5ctuali0amos el %ormulario La#Lum<sos(.a!tion N OLa agenda .onAa*'ntentos P O:O )nd '% )nd '% )nd ;u# a sido utili0ada 1 ve0 6m*imo O P

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

96

Curso de Visual Basic Avanzado

rmRe'istro
JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK J )-em!lo 9 del .urso de Visual Basic 5van0ado J J Formulario !ara introducir los datos del registro de la a!licaci$n( JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK O!tion )*!licit Brivate ;u# But5ce!tarK.licI6: 7im Iey)*istente 5s Long 7im ;tr.lave 5s ;tring 7im ;tr.adena9egistro 5s ;tring J 9egistramos la a!licaci$n 6!odramos com!ro#ar si es aut1ntico: '% 9egO!enZey6CZ)=KLO.5LKA5.C'L)& O;OF3+59)]5gendaO& Iey)*istente: 3 en J Lo registramos ;tr.adena9egistro N 3e*t1(3e*t P O8O P 3e*t2(3e*t ;tr.lave N O7atos9egistroO '% 9eg;et;tringValue6 Iey)*istente& ;tr.lave& ;tr.adena9egistro: 3 en AsgBo* OLa a!licaci$n a sido registrada con 1*ito(O& & O9egistroO <nload Ae )nd '% )nd '% )nd ;u# Brivate ;u# But9egistrarK.licI6: <nload Ae )nd ;u#

ModRe'istro
JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK J )-em!lo D del .urso de Visual Basic 5van0ado J J A$dulo donde estn las %unciones de acceso al registro y las declaraciones de las 5B'( JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK O!tion )*!licit J 5B' de mani!ulaci$n del regi;tro 632 #its: 7eclare Function O;9eg.loseZey Li# Oadva!i32O 5lias O9eg.loseZeyO 6ByVal Zey 5s Long: 5s Long 7eclare Function O;9eg.reateZey Li# Oadva!i32O 5lias O9eg.reateZey5O 6ByVal Zey 5s Long& ByVal l!s0;u#Zey 5s ;tring& ! I9esult 5s Long: 5s Long 7eclare Function O;9eg7eleteZey Li# Oadva!i32O 5lias O9eg7eleteZey5O 6ByVal Zey 5s Long& ByVal l!s0;u#Zey 5s ;tring: 5s Long 7eclare Function O;9egO!enZey Li# Oadva!i32O 5lias O9egO!enZey5O 6ByVal Zey 5s Long& ByVal l!s0;u#Zey 5s ;tring& ! I9esult 5s Long: 5s Long 7eclare Function O;9egHueryValue)* Li# Oadva!i32O 5lias O9egHueryValue)*5O 6ByVal Zey 5s Long& ByVal l!s0ValueLame 5s ;tring& ByVal d,9eserved 5s Long& l!d,3y!e 5s Long& l!#7ata 5s 5ny& c#7ata 5s Long: 5s Long 7eclare Function O;9eg;etValue)* Li# Oadva!i32O 5lias O9eg;etValue)*5O 6ByVal Zey 5s Long& ByVal l!s0ValueLame 5s ;tring& ByVal d,9eserved 5s Long& ByVal %d,3y!e 5s Long& l!#7ata 5s 5ny& ByVal c#7ata 5s Long: 5s Long Mlo#al .onst CZ)=K.L5;;);K9OO3 N PCDGGGGGGG

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

9>

Curso de Visual Basic Avanzado Mlo#al .onst CZ)=K.<99)L3K<;)9 N PCDGGGGGG1 Mlo#al .onst CZ)=KLO.5LKA5.C'L) N PCDGGGGGG2 Mlo#al .onst CZ)=K<;)9; N PCDGGGGGG3 .onst )99O9K;<..);; N GP .onst 9)MK;` N 1 .onst 9)MKB'L59= N 3 .onst 9)MK7+O97 N 4 J .rea 6o a#re si ya e*iste: una clave en el registro del sistema Function 9eg.reateZey6ByVal Zey 5s Long& ByVal l!s0Zey 5s ;tring& ! I9esult 5s Long: 5s Boolean On )rror Mo3o G '% O;9eg.reateZey6 Zey& l!s0Zey& ! I9esult: N )99O9K;<..);; 3 en 9eg.reateZey N 3rue )lse 9eg.reateZey N False )nd '% )nd Function J 5socia un valor con nom#re 6;trValueLame N nom#re: o sin nom#re 6;trValueLame N OO: J con una clave del regi;tro( Function 9eg;et;tringValue6ByVal Zey 5s Long& ByVal strValueLame 5s ;tring& ByVal ;tr7ata 5s ;tring: 5s Boolean On )rror Mo3o G '% Zey N G 3 en )*it Function '% O;9eg;etValue)*6 Zey& strValueLame& GP& 9)MK;`& ByVal ;tr7ata& K Len6;tr7ata: / 1: N )99O9K;<..);; 3 en 9eg;et;tringValue N 3rue )lse 9eg;et;tringValue N False )nd '% )nd Function J 5socia un valor con nom#re 6strValueLame N nom#re: o sin nom#re 6strValueLame N OO: J con una clave del registro( Function 9eg;etLumericValue6ByVal Zey 5s Long& ByVal strValueLame 5s ;tring& ByVal l7ata 5s Long& O!tional ByVal %Log: 5s Boolean On )rror Mo3o G '% O;9eg;etValue)*6 Zey& )99O9K;<..);; 3 en 9eg;etLumericValue N 3rue )lse 9eg;etLumericValue N False )nd '% )nd Function strValueLame& GP& 9)MK7+O97& l7ata& 4: N

J 5#re una clave e*istente en el registro del sistema( Function 9egO!enZey6ByVal Zey 5s Long& ByVal l!s0;u#Zey 5s ;tring& ! I9esult 5s Long: 5s Boolean On )rror Mo3o G '% O;9egO!enZey6 Zey& l!s0;u#Zey& ! I9esult: N )99O9K;<..);; 3 en 9egO!enZey N 3rue )lse 9egO!enZey N False

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

9D

Curso de Visual Basic Avanzado )nd '% )nd Function J )limina una clave e*istente del regi;tro del sistema( Function 9eg7eleteZey6ByVal Zey 5s Long& ByVal l!s0;u#Zey 5s ;tring: 5s Boolean On )rror Mo3o G '% O;9eg7eleteZey6 Zey& l!s0;u#Zey: N )99O9K;<..);; 3 en 9eg7eleteZey N 3rue )lse 9eg7eleteZey N False )nd '% )nd Function J .ierra una clave a#ierta del registro Function 9eg.loseZey6ByVal Zey 5s Long: 5s Boolean On )rror Mo3o G '% O;9eg.loseZey6 Zey: N )99O9K;<..);; 3 en 9eg.loseZey N 3rue )lse 9eg.loseZey N False )nd '% )nd Function J 9ecu!era los datos de cadena !ara un valor con nom#re J 6;trValueLame N nom#re: o sin nom#re 6;trValueLame N OO: J dentro de una clave del regi;tro( ;i el valor con J nom#re e*iste& !ero sus datos no son una cadena& esta J %unci$n %allar( Function 9egHuery;tringValue6ByVal Zey 5s Long& ByVal strValueLame 5s ;tring& ;tr7ata 5s ;tring: 5s Boolean On )rror Mo3o G 7im lValue3y!e 5s Long 7im ;trBu% 5s ;tring 7im l7ataBu%;i0e 5s Long 9egHuery;tringValue N False J O#tiene el ti!o y longitud de los datos '% O;9egHueryValue)*6 Zey& strValueLame& GP& lValue3y!e& ByVal GP& l7ataBu%;i0e: N )99O9K;<..);; 3 en '% lValue3y!e N 9)MK;` 3 en ;trBu% N ;tring6l7ataBu%;i0e& O O: '% O;9egHueryValue)*6 Zey& strValueLame& GP& GP& ByVal ;trBu%& l7ataBu%;i0e: N )99O9K;<..);; 3 en ;tr7ata N Le%t6;trBu%& l7ataBu%;i0e 8 1: 9egHuery;tringValue N 3rue )nd '% )nd '% )nd '% )nd Function J 9ecu!era los datos enteros !ara un valor con nom#re J 6;trValueLame N nom#re: o sin nom#re 6;trValueLame N OO: J dentro de una clave del regi;tro( ;i el valor con nom#re J e*iste& !ero sus datos no son de ti!o 9)MK7+O97& esta J %unci$n %allar( Function 9egHueryLumericValue6ByVal Zey 5s Long& ByVal strValueLame 5s ;tring& l7ata 5s Long: 5s Boolean

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

99

Curso de Visual Basic Avanzado On )rror Mo3o G 7im lValue3y!e 5s Long 7im lBu% 5s Long 7im l7ataBu%;i0e 5s Long 9egHueryLumericValue N False J O#tiene el ti!o y longitud de los datos l7ataBu%;i0e N 4 '% O;9egHueryValue)*6 Zey& strValueLame& GP& lValue3y!e& lBu%& l7ataBu%;i0e: N )99O9K;<..);; 3 en '% lValue3y!e N 9)MK7+O97 3 en l7ata N lBu% 9egHueryLumericValue N 3rue )nd '% )nd '% )nd Function

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

1GG

Curso de Visual Basic Avanzado

APP6(ICE A& Es.eci%icaciones$ limitaciones ! %ormatos de arc0ivos de Visual Basic


)n este a!1ndice se descri#en los re"uisitos de sistema& las limitaciones de un !royecto de Visual Basic& los ti!os de arc ivos "ue se !ueden incluir en el !royecto de Visual Basic y las descri!ciones de los arc ivos de %ormulario 6(%rm: y de !royecto 6(v#!:(

Re=uisitos del sistema 'ara a'licaciones de Visual 0asic


Bara las a!licaciones de Visual Basic se re"uiere el siguiente ard,are y so%t,are2 Aicroso%t +indo,s L3 3(51 o !osterior& o Aicroso%t +indo,s 95 o !osterior( Aicro!rocesador DG4D6 o su!erior( Bantalla VM5 o de resoluci$n su!erior com!ati#le con Aicroso%t +indo,s( D AB de 95A !ara a!licaciones( 6)sto variar de!endiendo de las #i#liotecas de ti!os o los arc ivos 7LL es!ec%icos "ue incluya en sus a!licaciones(: 16 AB de 95A !ara el entorno de desarrollo de Visual Basic(

Limitaciones de los 'ro!ectos


<n @nico !royecto !uede contener asta 32(GGG identi%icadores& "ue incluyen entre otros %ormularios& controles& m$dulos& varia#les& constantes& !rocedimientos& %unciones y o#-etos( Los nom#res de varia#les en Visual Basic no !ueden tener ms de 255 caracteres y los nom#res de %ormularios& controles& m$dulos y clases !ueden tener un m*imo de 4G caracteres( Visual Basic no im!one ning@n lmite en cuanto al n@mero de o#-etos distintos de un !royecto(

Limitaciones de controles
.ada control no gr%ico 6todos los controles e*ce!to Sha'e& Line, Ima#e y Label: utili0a una ventana( .ada ventana utili0a recursos del sistema& limitando el n@mero total de ventanas "ue !ueden e*istir al mismo tiem!o( )l lmite e*acto de!ende de los recursos del sistema dis!oni#les y el ti!o de controles "ue se utilicen( Bara reducir el consumo de recursos& utilice controles Sha'e, Line, Label e Ima#e en ve0 de los controles Picture0o* !ara crear o !resentar gr%icos(

6Qmero total de controles


)l n@mero m*imo de controles !ermitidos en un @nico %ormulario de!ende del ti!o de controles "ue se utilicen y de los recursos dis!oni#les del sistema( Lo o#stante& ay un lmite %i-o de 254 nom#res de control !or %ormulario( )n este lmite una matri0 de controles s$lo cuenta como uno& ya "ue todos los controles en la matri0 com!arten un @nico nom#re de control( )l lmite !ara ndices de matrices de controles es de G a 32(>6> !ara todas las versiones( ;i coloca controles uno encima de otro& como !or e-em!lo si utili0a varios controles de marco dentro de otros marcos& Visual Basic no ace!tar ms de seis niveles de controles anidados(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

1G1

Curso de Visual Basic Avanzado

#imitaciones .ara determinados controles


La siguiente ta#la muestra las limitaciones de !ro!iedades a!lica#les a determinados controles de Visual Basic2 Pro.iedad List y ListCount Te*t Ca'tion A.lica)le a .ontroles de cuadro de lista y cuadro com#inado .ontrol de cuadro de te*to .ontrol de eti"ueta .ontroles de #ot$n de comando& casilla de veri%icaci$n& marco y #ot$n de o!ci$n .ontrol de men@ 3odos los controles 3odos los controles #imitacin )l n@mero m*imo de elementos es 32 ZB? el lmite del tamaEo de cada elemento es 1 ZB 61G24 #ytes:( )l lmite es de 64 ZB( Limitado a 1G24 #ytes( Limitados a 255 caracteres( ;e truncan todos los ttulos "ue su!eren ese lmite( Los ttulos en las !ro!iedades de los controles !ersonali0ados tienen un lmite de 32 ZB( Limitado a 235 caracteres( Limitado s$lo !or la memoria dis!oni#le( Limitado a 4G caracteres(

Ta# )ame

Limitaciones de cdi#o
La cantidad de c$digo "ue se !uede cargar en un %ormulario& clase o m$dulo estndar est limitada a 65(534 lneas( <na @nica lnea de c$digo !uede constar de 1(G23 #ytes como m*imo( Buede a#er asta 256 es!acios en #lanco delante del te*to en una @nica lnea y no se !ueden incluir ms de veinticinco caracteres de continuaci$n de lnea 6 K: en una @nica lnea l$gica(

Procedimientos$ ti.os ! varia)les


Lo ay lmite en cuanto al n@mero de !rocedimientos !or m$dulo( .ada !rocedimiento !uede contener asta 64 ZB de c$digo( ;i un !rocedimiento o un m$dulo e*cede este lmite& Visual Basic genera un error en tiem!o de com!ilaci$n( ;i se encuentra con este error& !uede evitarlo dividiendo los !rocedimientos e*tremadamente grandes en varios !rocedimientos ms !e"ueEos o trasladando las declaraciones de nivel de m$dulo a otro m$dulo( Visual Basic utili0a ta#las !ara almacenar los nom#res de los identi%icadores 6varia#les& !rocedimientos& constantes& etc(: en el c$digo( .ada ta#la est limitada a 64 ZB(

Ta)la de entradas de mdulo


)sta ta#la ace!ta asta 125 #ytes !or m$dulo& con un lmite total de 64 ZB& "ue da como resultado unos 4GG m$dulos !or !royecto(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

1G2

Curso de Visual Basic Avanzado

Limitaciones de los datos


Las siguientes limitaciones son a!lica#les a las varia#les en el lengua-e Visual Basic

(atos de %ormulario$ mdulos est8ndar ! mdulos de clase


.ada %ormulario& m$dulo estndar y m$dulo de clase tiene su !ro!io segmento de datos "ue !uede ser como m*imo de 64 ZB( )ste segmento de datos contiene los siguientes datos2 Varia#les locales declaradas con Static( Varia#les a nivel de m$dulo "ue no sean matrices y cadenas de longitud varia#le( 4 #ytes !ara cada matri0 a nivel de m$dulo y cadena de longitud varia#le(

Procedimientos$ ti.os ! varia)les


;i un !rocedimiento o un m$dulo e*cede el lmite de 64 ZB& Visual Basic generar un error de tiem!o de com!ilaci$n( ;i se encuentra con este error& !uede evitarlo dividiendo los !rocedimientos e*tremadamente grandes en varios !rocedimientos ms !e"ueEos o trasladando las declaraciones a nivel de m$dulo a otro m$dulo(

Ti.os de%inidos .or el usuario


Linguna varia#le de un ti!o de%inido !or el usuario !uede e*ceder los 64 ZB& aun"ue la suma de las cadenas de longitud varia#le en un ti!o de%inido !or el usuario !uede e*ceder de 64 ZB 6las cadenas de longitud varia#le s$lo ocu!an 4 #ytes cada una en el ti!o de%inido !or el usuario? el contenido real de una cadena se almacena !or se!arado:( Los ti!os de%inidos !or el usuario se !ueden de%inir en t1rminos de otros ti!os de%inidos !or el usuario& !ero el tamaEo total de los ti!os no !uede e*ceder los 64 ZB(

Es.acio de .ila
Los argumentos y las varia#les locales en los !rocedimientos ocu!an es!acio de !ila en tiem!o de e-ecuci$n( Las varia#les estticas y a nivel de m$dulo no ocu!an es!acio de !ila !or"ue se encuentran en el segmento de datos !ara los %ormularios o los m$dulos( 3odos los !rocedimientos de 7LL a los "ue se llame utili0an esta !ila mientras se estn e-ecutando( Visual Basic utili0a !arte de la !ila !ara sus !ro!ios usos& como el almacenamiento de valores intermedios al evaluar e*!resiones(

#imitaciones de los recursos del sistema


5lgunas limitaciones de Visual Basic y las a!licaciones creadas con 1l estn im!uestas !or Aicroso%t +indo,s( )stas limitaciones !ueden cam#iar cuando se instala una versi$n di%erente de Aicroso%t +indo,s(

Recursos de Findo7s
.ada ventana a#ierta usa recursos del sistema 6reas de datos utili0adas !or Aicroso%t +indo,s:( ;i se agotan los recursos del sistema& se !roducir un error en tiem!o de e-ecuci$n( Buede com!ro#ar el !orcenta-e de recursos del sistema "ue "uedan si elige Acerca de en el men@ A!uda del 5dministrador de !rogramas o del 5dministrador de arc ivos en +indo,s L3

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

1G3

Curso de Visual Basic Avanzado 3(51 o& en +indo,s 95 y +indo,s L3 4(G& si elige Acerca de en el men@ A!uda del )*!lorador de +indo,s( Las a!licaciones tam#i1n !ueden llamar a la %unci$n MetFree;ystem9esources de el 5B' de +indo,s !ara reclamar recursos del sistema& cerrar ventanas 6como %ormularios a#iertos y ventanas de c$digo& as como ventanas de otras a!licaciones: y %inali0ar la e-ecuci$n de a!licaciones(

Formatos de archivos de 'ro!ecto


Aicroso%t Visual Basic utili0a y crea una serie de arc ivos tanto en tiem!o de diseEo como en tiem!o de e-ecuci$n( Los arc ivos "ue el !royecto o la a!licaci$n re"uerirn de!enden de su alcance y %uncionalidad(

E/tensiones de arc0ivos de .ro!ecto


Visual Basic crea varios arc ivos cuando se crea y com!ila un !royecto( )stos se !ueden dividir como sigue2 tiem!o de diseEo& otros desarrollos y tiem!o de e-ecuci$n( Los arc ivos de tiem!o de diseEo son los ladrillos de su !royecto2 !or e-em!lo& m$dulos de Basic 6(#as: y m$dulos de %ormulario 6(%rm:( Otros !rocesos y %unciones del entorno de desarrollo de Visual Basic crean diversos arc ivos2 !or e-em!lo& arc ivos de de!endencias del 5sistente !ara instalaci$n 6(de!:(

Arc0ivos varios ! de tiem.o de diseRo


La siguiente ta#la muestra todos los arc ivos de tiem!o de diseEo y otros arc ivos "ue se !ueden crear al desarrollar una a!licaci$n2 E/tensin (#as (cls (ctl (ct* (dca (de! (do# (do* (dsr (ds* (%rm (%r* (log (oca (!ag (!g* (res (s,t (tl# (v#g (v#l (v#! (escri.cin A$dulo de Basic A$dulo de clase 5rc ivo de control de usuario 5rc ivo #inario de control de usuario .ac 1 de diseEador activo 5rc ivo de de!endencias del 5sistente de instalaci$n 5rc ivo de %ormulario de documento 5ctive4 5rc ivo #inario de %ormulario de documento 5ctive4 5rc ivo de diseEador activo 5rc ivo #inario de diseEador activo 5rc ivo de %ormulario 5rc ivo #inario de %ormulario 5rc ivo de registro de errores de carga 5rc ivo de cac 1 de #i#lioteca de ti!os de controles 5rc ivo de !gina de !ro!iedades 5rc ivo #inario de !gina de !ro!iedades 5rc ivo de recursos 5rc ivo de !lantilla del 5sistente de instalaci$n de Visual Basic 5rc ivo 3y!eLi# de 5utomati0aci$n remota 5rc ivo de !royecto de gru!o de Visual Basic 5rc ivo de control de licencia 5rc ivo de !royecto de Visual Basic

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

1G4

Curso de Visual Basic Avanzado (v#r (v#, (v#0 5rc ivo de registro de 5utomati0aci$n remota 5rc ivo de es!acio de tra#a-o de !royecto de Visual Basic 5rc ivo de inicio del 5sistente

Arc0ivos de tiem.o de e+ecucin


5l com!ilar la a!licaci$n& todos los arc ivos necesarios de tiem!o de e-ecuci$n se incluyen en los arc ivos e-ecuta#les de tiem!o de e-ecuci$n( La siguiente ta#la muestra los arc ivos de tiem!o de e-ecuci$n2 E/tensin (dll (e*e (oc* (v## (v#d (escri.cin .om!onente 5ctive4 en !roceso 5rc ivo e-ecuta#le o com!onente 5ctive4 .ontrol 5ctive4 5rc ivo de inicio de documento 5ctive4 5rc ivo de estado de documento 5ctive4

Estructuras de %ormularios
5 !esar de "ue muc os de los arc ivos de un t!ico !royecto de Visual Basic estn en %ormato #inario y s$lo los !ueden leer determinados !rocesos y %unciones de Visual Basic o de su a!licaci$n& los arc ivos de %ormulario 6(%rm: y de !royecto 6(v#!: se guardan como te*to 5;.''( )stos arc ivos se !ueden leer en un visor de te*to 6!or e-em!lo& el Bloc de notas:( )n las siguientes secciones se descri#en los arc ivos de tiem!o diseEo y de tiem!o de e-ecuci$n en un !royecto t!ico de Visual Basic y el %ormato de los arc ivos de %ormulario 6(%rm: y de !royecto 6(v#!:( Los arc ivos de %ormulario de Visual Basic 6(%rm: se crean y se guardan en %ormato 5;.''( La estructura de un %ormulario consiste en lo siguiente2 )l n@mero de versi$n del %ormato de arc ivo( <n #lo"ue de te*to "ue contiene la descri!ci$n del %ormulario( <n con-unto de atri#utos del %ormulario( )l c$digo Basic del %ormulario( La descri!ci$n del %ormulario contiene los valores de las !ro!iedades del %ormulario( Los #lo"ues de te*to "ue de%inen las !ro!iedades de los controles del %ormulario estn anidados en el %ormulario( Los controles contenidos en otros controles tienen sus !ro!iedades anidadas en el te*to del contenedor( La %igura 5(1 ilustra la estructura de la descri!ci$n del %ormulario(

6Qmero de versin
)l n@mero de versi$n !ara los %ormularios creados con Visual Basic 5(G !ara +indo,s es 5(GG( ;i en un %ormulario se omite el n@mero de versi$n& se generar un error( 5l cargar una a!licaci$n de Visual Basic "ue tiene un n@mero de versi$n menor "ue 5(GG& a!arece un cuadro de dilogo de advertencia !ara in%ormar "ue el arc ivo se guardar en el nuevo %ormato(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

1G5

Curso de Visual Basic Avanzado

i'ura A.1 Estructura de la descri.cin del %ormulario

(escri.cin del %ormulario


La descri!ci$n de un %ormulario em!ie0a con una instrucci$n Be'in y termina con una instrucci$n End( La sinta*is de la instrucci$n Be'in es la siguiente2 Be'in VB(a ormbM(I ormc nombre_formulario La instrucci$n End indica d$nde termina la descri!ci$n del %ormulario y d$nde em!ie0a el con-unto de atri#utos del %ormulario( ;in la instrucci$n End& Visual Basic intentara leer los atri#utos como si se estuvieran descri#iendo los controles y las !ro!iedades del %ormulario& !or lo "ue se !roduciran errores( )ntre las instrucciones Be'in orm y End estn las !ro!iedades del %ormulario !ro!iamente dic o& seguidas de las descri!ciones de cada control del %ormulario( La %igura 5(2 muestra la estructura anidada de la descri!ci$n del %ormulario con ms detalle(

BloMues de control
<n blo'ue de control consta del te*to de la descri!ci$n del %ormulario "ue de%ine las !ro!iedades de un control individual( 5l igual "ue la descri!ci$n del %ormulario& los #lo"ues de control em!ie0an con una instrucci$n Be'in y terminan con una instrucci$n End( La sinta*is !ara una instrucci$n Be'in de un #lo"ue de control es la siguiente2 Be'in clase_control(tipo_control nombre_control Las !ro!iedades !ara el control a!arecen entre la instrucci$n Be'in y la instrucci$n End(

?rden de los )loMues de control


)l orden de los #lo"ues de control determina el orden 0 de los controles( )l orden z es una ordenaci$n relativa "ue determina la manera en la "ue los controles se sola!an entre s en un %ormulario( )l !rimer control de la descri!ci$n del %ormulario esta#lece la !arte in%erior del orden

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

1G6

Curso de Visual Basic Avanzado 0( Los controles "ue a!arecen !osteriormente en la descri!ci$n del %ormulario estn ms arri#a en el orden 0 y& !or tanto& sola!an a los "ue estn ms a#a-o en dic o orden(

BloMues de control incrustados


5lgunos controles !ueden contener otros controles( .uando un control est contenido en otro& su #lo"ue de control est incrustado en el #lo"ue de control del contenedor( Buede incrustar #lo"ues de control dentro de2 Aarcos .uadros de imgenes Aen@s .ontroles !ersonali0ados& de!endiendo de su o#-etivo Los controles incrustados se utili0an normalmente !ara colocar #otones de o!ci$n dentro de un marco( Visual Basic de#e tener toda la in%ormaci$n necesaria !ara el contenedor antes de "ue se agregue ning@n control incrustado& !or lo "ue las !ro!iedades !ara un control de#en ir antes de cual"uier #lo"ue de control incrustado( Visual Basic !asa !or alto todas la !ro!iedades dentro de un #lo"ue de control "ue a!are0can des!u1s de los #lo"ues de control incrustados(

i'ura A.* Estructura anidada de la descri.cin del %ormulario

Controles de menQ
Los controles de men@ de#en a!arecer -untos al %inal de la descri!ci$n del %ormulario& -usto antes de "ue em!iece la secci$n de atri#utos( .uando Visual Basic encuentra un control de men@ durante la carga de un %ormulario 5;.''& es!era encontrar todos los controles de men@ -untos( <na ve0 "ue detecta un control "ue no es de men@ a continuaci$n de uno o ms

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

1G>

Curso de Visual Basic Avanzado controles de men@& su!one "ue no ay ms controles de men@ en el %ormulario y !asa !or alto cual"uier control de men@ "ue encuentre durante la carga de ese %ormulario(

Teclas de m:todo a)reviado


Las teclas de m1todo a#reviado son teclas "ue se utili0an !ara activar un control de men@( Los %ormularios 5;.'' usan la misma sinta*is "ue la instrucci$n SendOe!s !ara de%inir las com#inaciones de teclas2 T/U N A5=d;.<L5;& TeU N .39L y TaFncU N tecla de %unci$n& donde n es el n@mero de la tecla( Los caracteres al%a#1ticos se re!resentan a s mismos( La sinta*is de las teclas de m1todo a#reviado es la siguiente2 A1todo a#reviado N eaF4c J \.39LV\F4V

Comentarios en la descri.cin del %ormulario


Buede agregar comentarios a la descri!ci$n del %ormulario( Las comillas sim!les 6 ': son los delimitadores de los comentarios(

Pro.iedades de la descri.cin de un %ormulario


.uando Visual Basic guarda un %ormulario& organi0a las !ro!iedades en un orden !redeterminado( Lo o#stante& al crear un %ormulario las !ro!iedades se !ueden organi0ar en cual"uier orden( .ual"uier !ro!iedad "ue no enumere se esta#lece a su valor !redeterminado cuando se carga( .uando Visual Basic guarda un %ormulario& s$lo incluye a"uellas !ro!iedades "ue no usan sus valores !redeterminados( .ada control determina si se guardan o no todas sus !ro!iedades o solamente a"uellas cuyos valores son distintos de los valores !redeterminados(

Sinta/is
<se esta sinta*is !ara de%inir las !ro!iedades en la descri!ci$n del %ormulario2 propiedad = valor Los valores de !ro!iedad de te*to de#en a!arecer entre comillas do#les( Las !ro!iedades #ooleanas tienen un valor f 1 !ara True y G !ara alse( Visual Basic inter!reta todos los valores distintos de f 1 o G como True( Las !ro!iedades con valores enumerados incluyen sus valores num1ricos con la descri!ci$n del valor incluida como comentario( Bor e-em!lo& la !ro!iedad BorderSt!le a!arece as2 Border;tyle N G J Linguno

Valores )inarios de .ro.iedades


5lgunos controles dis!onen de !ro!iedades cuyos valores son datos #inarios& como la !ro!iedad Picture del cuadro de imagen y los controles de imagen o ciertas !ro!iedades de los controles !ersonali0ados( Visual Basic guarda todos los datos #inarios de un %ormulario en un arc ivo de datos #inario a!arte del %ormulario( Visual Basic guarda el arc ivo de datos #inario en el mismo directorio "ue el %ormulario( )l arc ivo de datos #inario tiene el mismo nom#re "ue el %ormulario& !ero con la e*tensi$n (%r*( Visual Basic lee el arc ivo de datos #inario cuando carga el %ormulario& !or lo "ue el arc ivo de datos #inario 6(%r*: de#e estar dis!oni#le !ara el %ormulario cuando Visual Basic lo carga( ;i com!arte %ormularios con otras !ersonas "ue usan un arc ivo de datos #inario& aseg@rese de !ro!orcionar el arc ivo de datos #inario 6(%r*:& adems del %ormulario 6(%rm:( 1GD

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

Curso de Visual Basic Avanzado Las !ro!iedades "ue tengan datos #inarios como valores a!arecen en el %ormulario como una re%erencia a un des!la0amiento de #yte en el arc ivo de datos #inario( Bor e-em!lo& el valor de una !ro!iedad Picture a!arece de la siguiente manera en la descri!ci$n de un %ormulario2 Begin VB('mage img7emo Bicture N OAi%orm(%r*O2G2)B )nd La enumeraci$n de la !ro!iedad signi%ica "ue los datos #inarios "ue de%inen la !ro!iedad Picture de este control em!ie0an en el #yte 2)B 6 e*: del arc ivo Ai%orm(%r*(

Pro.iedad Icon
)l valor de la !ro!iedad Icon de un %ormulario de!ende de "u1 icono se utilice !ara el %ormulario( La siguiente ta#la muestra los valores de la !ro!iedad Icon y la manera en "ue esas !ro!iedades a!arecen en un %ormulario( Valor de .ro.iedad Icon )l icono !redeterminado 6Linguno: .ual"uier icono distinto del icono !redeterminado Contenido del %ormulario ASCII Lo ace re%erencia a la !ro!iedad Icon 'con N G 9e%erencia de des!la0amiento de #yte al arc ivo de datos #inario( Bor e-em!lo2 'con N OAi%orm(%r*O2GGGG

Pro.iedad Ta)Inde/
;i no se es!eci%ica la !ro!iedad Ta)Inde/& Visual Basic asigna el control a la !rimera u#icaci$n !osi#le en el orden de ta#ulaci$n una ve0 "ue est1n cargados todos los dems controles(

2nidades de medida
)l tamaEo de los controles& las coordenadas * e y& as como otros valores de !ro!iedades "ue utilicen unidades de medida se e*!resan en t,i!s( .uando un control usa un modo de escala di%erente a los t,i!s y Visual Basic carga el %ormulario& convierte los valores en t,i!s del %ormulario 5;.'' a las unidades de medida es!eci%icadas !or la !ro!iedad ScaleMode(

Valores de colores
Los valores de colores a!arecen como valores 9MB 6ro-o& verde y a0ul:( Bor e-em!lo& la !ro!iedad oreColor a!arece de esta manera2 Fore.olor N PCGGFFGGGGP Visual Basic tam#i1n !uede leer valores de EBColor& convirti1ndolos a 9MB cuando carga el %ormulario( Los %ormularios 5;.'' "ue utilicen valores de EBColor de#en usar esta sinta*is2 oreColor = EBColor6'bcolor: donde 'bcolor es un valor de G a 15( O#serve "ue el argumento 'bcolor corres!onde a los valores de color utili0ados !or las instrucciones gr%icas en otras versiones de Basic& como Visual Basic !ara A;87O;& Aicroso%t HuicIBasic y el ;istema de desarrollo !ro%esional Aicroso%t Basic(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

1G9

Curso de Visual Basic Avanzado

?)+etos de .ro.iedades
5lgunos o#-etos de !ro!iedades& como !or e-em!lo el o#-eto ont& a!arecen como un #lo"ue distinto y muestran todos los valores de las di%erentes !ro!iedades del o#-eto( )stos #lo"ues estn delimitados !or las instrucciones Be'inPro.ert! y EndPro.ert! de la siguiente %orma2 Be'inPro.ert! nombre_propiedad propiedad< = valor< propiedad= = valor= ( ( ( EndPro.ert!

Cdi'o de Basic
)l c$digo de Basic a!arece en el %ormulario inmediatamente des!u1s de la secci$n de atri#utos& a continuaci$n de la @ltima instrucci$n End en la descri!ci$n del %ormulario( Las instrucciones en la secci$n 7eclaraciones de un %ormulario a!arecen !rimero& seguidas de los !rocedimientos de evento& los !rocedimientos generales y las %unciones(

Errores al car'ar arc0ivos de %ormulario


.uando Visual Basic carga un %ormulario en memoria& !rimero convierte el %ormulario al %ormato #inario( 5l reali0ar cam#ios en el %ormulario y guardar los cam#ios& Visual Basic vuelve a escri#ir el arc ivo en %ormato 5;.''( .uando Visual Basic se encuentra con un error mientras est cargando un %ormulario& crea un arc ivo de registro e in%orma del error en el arc ivo de registro( Visual Basic agrega mensa-es de error al arc ivo de registro cada ve0 "ue se encuentra con un error en el %ormulario( .uando se a terminado de cargar el %ormulario& Visual Basic !resenta un mensa-e "ue indica "ue se cre$ un arc ivo de registro de errores( )l arc ivo de registro tiene el mismo nom#re "ue el arc ivo de %ormulario& !ero con la e*tensi$n (log( Bor e-em!lo& si se !roducen errores mientras se carga Ai%orm(%rm& Visual Basic crear un arc ivo de registro llamado Ai%orm(log( ;i !osteriormente vuelve a cargar Ai%orm(%rm y contin@an !roduci1ndose errores mientras se carga el %ormulario& Visual Basic reem!la0ar el arc ivo Ai%orm(log anterior(

Mensa+es de re'istro de error en la car'a de un %ormulario


Los siguientes mensa-es de error !ueden a!arecer en un arc ivo de registro de errores( O#serve "ue estos mensa-es de error s$lo tratan !ro#lemas "ue !ueden ocurrir cuando Visual Basic carga la descri!ci$n del %ormulario( Lo indican ning@n !ro#lema "ue !ueda e*istir en !rocedimientos de evento& en !rocedimientos generales o en cual"uier otra !arte del c$digo de Basic( Im.osi)le car'ar el menQ nombre7men>4 )ste mensa-e a!arece si Visual Basic encuentra un control de men@ cuyo men@ !rimario est1 de%inido como un se!arador de men@( Los controles de men@ "ue act@an como !rimarios !ara los controles de men@ en un su#men@ no !ueden ser se!aradores de men@( Visual Basic no carga el control de men@( )ste mensa-e tam#i1n a!arece si Visual Basic encuentra un control de men@ cuyo men@ !rimario tiene su !ro!iedad C0ec1ed esta#lecida a True( Los controles de men@ "ue act@an como !rimarios !ara los controles de men@ en un su#men@ no !ueden tener esta !ro!iedad activada( Visual Basic no carga el control de men@(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

11G

Curso de Visual Basic Avanzado Im.osi)le esta)lecer la .ro.iedad C0ec1ed en el menQ nombre7men>4 )ste mensa-e a!arece si Visual Basic encuentra un control de men@ de nivel su!erior con su !ro!iedad C0ec1ed esta#lecida a True( Los men@s de nivel su!erior no !ueden tener una marca de veri%icaci$n( Visual Basic carga el control del men@& !ero no esta#lece su !ro!iedad C0ec1ed( Im.osi)le esta)lecer la .ro.iedad S0ortcut en nombre7men>4 )ste mensa-e a!arece si Visual Basic encuentra un control de men@ de nivel su!erior con una tecla de m1todo a#reviado de%inida( Los men@s de nivel su!erior no !ueden tener una tecla de m1todo a#reviado( Visual Basic carga el control del men@& !ero no esta#lece la !ro!iedad S0ortcut( #a clase nombre7clase del control nombre7control no es una clase de control car'ada. )ste mensa-e a!arece si Visual Basic encuentra un nom#re de clase "ue no reconoce( Im.osi)le car'ar el control nombre7control. )ste mensa-e a!arece si Visual Basic encuentra un ti!o de control desconocido en la descri!ci$n del %ormulario( Visual Basic crea un cuadro de imagen !ara re!resentar el control desconocido& dando a ese cuadro de imagen todas las !ro!iedades vlidas de la descri!ci$n del control desconocido( .uando a!arece este mensa-e& es !ro#a#le "ue le sigan varios errores de !ro!iedades no vlidas( El control nombre7control tiene una cadena entre comillas donde de)er3a estar el nom)re de la .ro.iedad. )ste mensa-e a!arece si Visual Basic encuentra te*to entre comillas en ve0 de un nom#re de !ro!iedad "ue no se coloca entre comillas( Bor e-em!lo2 O.a!tionO N O.omen0ar la demostraci$nO )n este caso& el nom#re de !ro!iedad Ca.tion no de#era estar entre comillas( Visual Basic !asa !or alto la lnea de la descri!ci$n del %ormulario "ue !roduce este error( El nom)re de control nombre7control no es v8lido. )ste mensa-e a!arece si el nom#re de un control no es una cadena vlida en Visual Basic( Visual Basic no cargar el control( El nom)re de control es demasiado lar'oS truncado a nombre7control. )ste mensa-e a!arece si Visual Basic encuentra un nom#re de control con ms de 4G caracteres( Visual Basic carga el control& truncando el nom#re( 6o se encontr una .ro.iedad de 3ndice ! el control nombre7control !a e/iste. Im.osi)le crear este control. )ste mensa-e a!arece si Visual Basic encuentra un control sin un ndice "ue tiene el mismo nom#re "ue un control cargado anteriormente( Visual Basic no carga el control( Im.osi)le car'ar el %ormulario nombre7,ormulario. )ste mensa-e a!arece si Visual Basic encuentra ines!eradamente el %inal del arc ivo o si %alta la !rimera instrucci$n Be'in( El nom)re del %ormulario o de M(I orm nombre7,ormulario no es v8lidoS im.osi)le car'ar este %ormulario. )ste mensa-e a!arece si el nom#re de un %ormulario no es una cadena vlida en Visual Basic( Visual Basic no cargar el %ormulario( Las cadenas vlidas de#en em!e0ar con una letra& s$lo !ueden incluir letras& n@meros y signos de su#rayado& y de#en tener como m*imo 4G caracteres( El nom)re nombre7'ro'iedad de la .ro.iedad del control nombre7control no es v8lido. )ste mensa-e a!arece si el nom#re de una !ro!iedad no es una cadena vlida en Visual Basic o tiene ms de 3G caracteres( Visual Basic no esta#lecer la !ro!iedad( Im.osi)le car'ar la .ro.iedad nombre7'ro'iedad del control nombre7control4 )ste mensa-e a!arece si Visual Basic encuentra una !ro!iedad desconocida( Visual Basic !asa !or alto esta !ro!iedad cuando carga el %ormulario(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

111

Curso de Visual Basic Avanzado Im.osi)le esta)lecer la .ro.iedad nombre7'ro'iedad del control nombre7control. )ste mensa-e a!arece si Visual Basic no !uede esta#lecer la !ro!iedad del control es!eci%icado como se indica en la descri!ci$n del %ormulario( #a .ro.iedad nombre7'ro'iedad del control nombre7control tiene un valor no v8lido. )ste mensa-e a!arece si Visual Basic encuentra un valor no vlido !ara una !ro!iedad( Visual Basic cam#ia el valor de la !ro!iedad al valor !redeterminado !ara esa !ro!iedad( #a .ro.iedad nombre7'ro'iedad del control nombre7control tiene una re%erencia de arc0ivo no v8lida. )ste mensa-e a!arece si Visual Basic no !udo usar una re%erencia de nom#re de arc ivo( )sto ocurrir si el arc ivo al "ue se re%iere 6!ro#a#lemente un arc ivo de datos #inario !ara el %ormulario: no se encuentra en el directorio es!eci%icado( #a .ro.iedad nombre7'ro'iedad del control nombre7control tiene un 3ndice de .ro.iedad no v8lido. )ste mensa-e a!arece si Visual Basic encuentra un nom#re de !ro!iedad con un ndice de !ro!iedad mayor de 255( Bor e-em!lo2 Bro!3GG N 5436 Visual Basic !asa !or alto la lnea de la descri!ci$n del %ormulario "ue !rodu-o este error( #a .ro.iedad nombre7'ro'iedad del control nombre7control tiene un valor no v8lido. )ste mensa-e a!arece si Visual Basic encuentra una !ro!iedad con un valor "ue no es correcto !ara ese control( Bor e-em!lo2 3o! N .a r622: J )n realidad se desea#a . ar622:( Visual Basic esta#lece la !ro!iedad a su valor !redeterminado( #a .ro.iedad nombre7'ro'iedad del control nombre7control de)e ser una cadena entre comillas. )ste mensa-e a!arece si Visual Basic encuentra un valor de !ro!iedad sin comillas "ue de#era a!arecer entre comillas( Bor e-em!lo2 .a!tion N .omen0ar la demostraci$n Visual Basic !asa !or alto la lnea de la descri!ci$n del %ormulario "ue !rodu-o este error( Error de sinta/is& la .ro.iedad nombre7'ro'iedad del control nombre7control no tiene un T=T. )ste mensa-e a!arece si Visual Basic encuentra un nom#re y un valor de !ro!iedad sin un signo igual entre ellos( Bor e-em!lo2 3e*t O.omen0ar la demostraci$nO Visual Basic no carga la !ro!iedad(

ormato del arc0ivo de .ro!ecto ,.v).Visual Basic siem!re guarda los arc ivos de !royecto 6(v#!: en %ormato 5;.''( )l arc ivo de !royecto contiene entradas "ue re%le-an los valores de su !royecto( )ntre estos se incluyen los %ormularios y m$dulos del !royecto& re%erencias& o!ciones varias "ue a elegido !ara controlar la com!ilaci$n& etc( )sta es la a!ariencia "ue de#e tener un arc ivo (v#!( )ste !royecto incluye m$dulos guardados con los nom#res de clase y de arc ivo "ue se muestran en la siguiente ta#la( Ti.o de mdulo Formulario A7' Formulario A$dulo estndar A$dulo de clase 6om)re de clase 5Form BForm .Aodule 7.lass 6om)re de arc0ivo 5KForm(%rm BKForm(%rm .KAodule(#as 7K.lass(cls

3y!eN)*e FormNBKForm(%rm 9e%erenceN[]MaGGG2G43G8GGGG8GGGG8.GGG8 GGGGGGGGGG46cg2(GgGg((]((]((]+'L7O+;];=;3)A];37OL)2(3LBgOL) 5utomation FormN5KForm(%rm AoduleN.Aodule? .KAodule(#as .lassN7.lass? 7K.lass(cls 112

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

Curso de Visual Basic Avanzado ;tartu!NOBFormO .ommand32NOO LameNOBro-ect1O Cel!.onte*t'7NOGO .om!ati#leAodeNOGO Aa-orVerN1 AinorVerNG 9evisionVerNG 5uto'ncrementVerNG ;erver;u!!ortFilesNG Version.om!anyLameNOAicroso%tO .om!ilation3y!eNG O!timi0ation3y!eNG FavorBentiumBro6tm:NG .odeVie,7e#ug'n%oNG Lo5liasingNG Bounds. ecING Over%lo,. ecING FlBoint. ecING F7'V. ecING <nroundedFBNG ;tartAodeNG <nattendedNG 3 readBerO#-ectNG Aa*Lum#erO%3 readsN1 ;e agregan entradas al arc ivo (v#! cuando agrega %ormularios& m$dulos& com!onentes& etc( al !royecto( 3am#i1n se agregan entradas cuando esta#lece o!ciones !ara el !royecto( Auc as de estas o!ciones se esta#lecen mediante el cuadro de dilogo Pro.iedades del .ro!ecto(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

113

Curso de Visual Basic Avanzado

A.:ndice B& Convenciones de codi%icacin


)ste a!1ndice !resenta un con-unto de convenciones de codi%icaci$n "ue sugerimos !ara los !rogramas de Visual Basic( Las convenciones de codi%icaci$n son !autas de !rogramaci$n "ue no estn en%ocadas a la l$gica del !rograma& sino a su estructura y a!ariencia %sica( Facilitan la lectura& com!rensi$n y mantenimiento del c$digo( Las convenciones de codi%icaci$n !ueden incluir2 .onvenciones de nom#res !ara o#-etos& varia#les y !rocedimientos( Formatos estandari0ados !ara eti"uetar y comentar el c$digo( 'nstrucciones de es!aciado& %ormato y sangra( )n las secciones siguientes se e*!lica cada una de estas reas y se dan e-em!los de su uso correcto(

?Por =u@ e*isten las convenciones de codi,icacinA


La ra0$n !rinci!al de usar un con-unto co erente de convenciones de c$digo es estandari0ar la estructura y el estilo de codi%icaci$n de una a!licaci$n de %orma "ue el autor y otras !ersonas !uedan leer y entender el c$digo %cilmente( Las convenciones de codi%icaci$n correctas dan como resultado un c$digo %uente !reciso& legi#le y sin am#ighedad& "ue es co erente con otras convenciones del lengua-e y lo ms intuitivo !osi#le(

Convenciones de codi,icacin mBnimas


<n con-unto de convenciones de codi%icaci$n de !ro!$sito general de#e de%inir los re"uisitos mnimos necesarios !ara conseguir los o#-etivos e*!licados anteriormente& de-ando li#ertad al !rogramador !ara crear la l$gica y el %lu-o %uncional del !rograma( )l o#-etivo es acer "ue el !rograma sea %cil de leer y de entender sin o#struir la creatividad natural del !rogramador con im!osiciones e*cesivas y restricciones ar#itrarias( Bor tanto& las convenciones sugeridas en este a!1ndice son #reves y sugerentes( Lo muestran todos los o#-etos y controles !osi#les& ni es!eci%ican todos los ti!os de comentarios in%ormativos "ue !odran ser @tiles( 7e!endiendo del !royecto y de las necesidades es!ec%icas de la organi0aci$n& "ui0s desee am!liar estas instrucciones !ara "ue incluyan elementos adicionales como2 .onvenciones !ara o#-etos es!ec%icos y com!onentes desarrollados internamente o com!rados a otros !roveedores( Varia#les "ue descri#an las actividades comerciales o instalaciones de la organi0aci$n( .ual"uier otro elemento "ue el !royecto o la em!resa considere im!ortante !ara conseguir mayor claridad y legi#ilidad(

Convenciones de nombres de ob&etos


Los o#-etos de#en llevar nom#res con un !re%i-o co erente "ue %acilite la identi%icaci$n del ti!o de o#-eto( 5 continuaci$n se o%rece una lista de convenciones recomendadas !ara algunos de los o#-etos !ermitidos !or Visual Basic(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

114

Curso de Visual Basic Avanzado

Pre,i&os su#eridos 'ara controles


Ti.o de control Banel 37 Bot$n animado .asilla de veri%icaci$n .uadro com#inado& cuadro de lista des!lega#le Bot$n de comando 7ilogo com@n .omunicaciones .ontrol 6dentro de !rocedimientos cuando no se conoce el ti!o es!ec%ico: .ontrol de datos .uadro com#inado enla0ado a datos .uadrcula enla0ada a datos .uadro de lista enla0ado a datos .uadro de lista de directorios .uadro de lista de unidades .uadro de lista de arc ivos Formulario Aarco Aedidor Mr%ico .uadrcula Barra de des!la0amiento ori0ontal 'magen 6'mage: )stado de tecla )ti"ueta Lnea .uadro de lista Aensa-e A5B' ;esi$n A5B' A.' Formulario A7' secundario Aen@ A; Fle* Mrid A; 3a# 5ctive4 )s"uema Ben B)dit Ben Cedit 3ra0o de !luma 'magen 6Bicture: .li! de imagen 'n%orme Forma .uadro de n@mero Pre%i+o !nl ani c I c#o cmd dlg com ctr E+em.lo !nlMru!o aniBu0$n c I;$loLectura c#o'ngl1s cmd;alir dlg5rc ivo5#rir comFa* ctr5ctivo

dat d#c#o d#grd d#lst dir drv %il %rm %ra gau gra grd s# img Iey l#l lin lst m!m m!s mci mdi mnu msg mst ole out #ed ed inI !ic cl! r!t s ! s!n

datBi#lio d#c#oLengua-e d#grd9esultado.onsulta d#lst3i!o3area dirOrigen drv7estino %ilOrigen %rm)ntrada %raLengua-e gau)stado gra'ngresos grdBrecios s#Volumen img'cono IeyAay@sculas l#lAs-5yuda linVertical lst.$digos7eBoltica m!m)nviarAsm!s;esi$n mciVdeo mdiLota mnu5rc ivo5#rir msg.lientes mstBrimero oleCo-a7e3ra#a-o out7iagrama7eOrg #edLom#re edFirma inIAa!a !icVM5 cl!Barra7eCerramientas r!tManancias3rimestre1 s !.rculo s!nBginas

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

115

Curso de Visual Basic Avanzado .uadro de te*to .ron$metro 5rri#a8a#a-o Barra de des!la0amiento vertical .ontrol desli0ante Lista de imgenes Vista de r#ol Barra de erramientas 3a#;tri! Barra de estado Lista Barra de !rogreso 9ic 3e*tBo* t*t tmr u!d vs# sld ils tre tl# ta# sta lv, !rg rt% t*t5!ellido tmr5larma u!d7irecci$n vs#Velocidad sld)scala ils3odosLos'conos treOrgani0aci$n tl#5cciones ta#O!ciones staFec aCora lv,)nca#e0ados !rg.argar5rc ivo rt%'n%orme

Pre,i&os su#eridos 'ara los ob&etos de acceso a datos CDA+D


<se los !re%i-os siguientes !ara indicar O#-etos de acceso a datos 675O:( ?)+eto de )ase de datos .ontenedor Base de datos Aotor de #ase de datos 7ocumento .am!o Mru!o indice Barmetro 7e%inici$n de consulta .on-unto de registros 9elaci$n 7e%inici$n de ta#la <suario )s!acio de tra#a-o 5lgunos e-em!los2 7im d#Bi#lio 5s 7ata#ase 7im rec)ditoresA57 5s 9ecordset& str'nstruc;HL 5s ;tring .onst 7BK9)57OLL= N 4 J )sta#lece la constante( J5#re la #ase de datos( ;et d#Bi#lio N O!en7ata#ase6OB'BL'O(A7BO: J )sta#lece el te*to !ara la instrucci$n ;HL( str'nstruc;HL N O;)L).3 [ F9OA )ditores +C)9) )stado N JA57JO J .rea el nuevo o#-eto 9ecordset( ;et rec)ditoresA57 N d#(O!en9ecordset6str'nstruc;HL& K d#;$loLectura: Pre%i+o con d# d#e doc %ld gr! id* !rm "ry rec rel t#d usr ,s! E+em.lo con'n%ormes d#.uentas d#eJet doc'n%ormeVentas %ld7irecci$n gr!Finan0as id*)dad !rm.$digo3area "ryVentasBor9egi$n recBrevisi$n rel7e!t7e)m!leados t#d.lientes usrLuevo ,s!Ao

Pre,i&os su#eridos 'ara men>s


Las a!licaciones suelen usar muc os controles de men@& lo "ue ace @til tener un con-unto @nico de convenciones de nom#res !ara estos controles( Los !re%i-os de controles de men@s se de#en e*tender ms all de la eti"ueta inicial OmnuO& agregando un !re%i-o adicional !ara cada

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

116

Curso de Visual Basic Avanzado nivel de anidamiento& con el ttulo del men@ %inal en la @ltima !osici$n de cada nom#re( )n la ta#la siguiente ay algunos e-em!los( Secuencia del t3tulo del menQ 5rc ivo 5#rir 5rc ivo )nviar correo 5rc ivo )nviar %a* Formato .arcter 5yuda .ontenido 6om)re del controlador del menQ mnu5rc ivo5#rir mnu5rc ivo)nviar.orreo mnu5rc ivo)nviarFa* mnuFormato.arcter mnu5yuda.ontenido

.uando se usa esta convenci$n de nom#res& todos los miem#ros de un gru!o de men@s determinado se muestran uno -unto a otro en la ventana Bro!iedades de Visual Basic( 5dems& los nom#res del control de men@ documentan claramente los elementos de men@ a los "ue estn ad-untos(

Seleccin de 're,i&os 'ara otros controles


Bara los controles no mostrados arri#a& de#e intentar esta#lecer un estndar de !re%i-os @nicos de dos o tres caracteres "ue sean co erentes( ;olamente se de#en usar ms de tres caracteres si !ro!orcionan ms claridad( Bara controles derivados o modi%icados& !or e-em!lo& am!le los !re%i-os anteriores !ara "ue no aya dudas so#re "u1 control se est usando realmente( Bara los controles de otros !roveedores& se de#e agregar al !re%i-o una a#reviatura del nom#re del %a#ricante en min@sculas( Bor e-em!lo& una instancia de control creada a !artir del marco 37 incluido en la )dici$n !ro%esional de Visual Basic !odra llevar el !re%i-o %ra3d !ara evitar con%usiones so#re "u1 control se est usando realmente(

Convenciones de nombres de constantes ! variables


5dems de los o#-etos& las constantes y varia#les tam#i1n re"uieren convenciones de nom#res #ien com!uestas( )n esta secci$n se muestran las convenciones recomendadas !ara las constantes y varia#les !ermitidas !or Visual Basic( 3am#i1n se e*!lican cuestiones relacionadas con la identi%icaci$n del ti!o de datos y su alcance( Las varia#les se de#en de%inir siem!re con el menor alcance !osi#le( Las varia#les glo#ales 6!@#licas: !ueden crear m"uinas de estado enormemente com!le-as y acer la l$gica de una a!licaci$n muy di%cil de entender( Las varia#les glo#ales tam#i1n acen muc o ms di%cil mantener y volver a usar el c$digo( )n Visual Basic las varia#les !ueden tener el alcance siguiente2 Alcance Livel de !rocedimiento Livel de m$dulo (eclaracin JBrivateJ en !rocedimiento& su#!rocedimiento o %unci$n JBrivateJ en la secci$n 7eclaraciones de un m$dulo de %ormulario o de c$digo 6(%rm& (#as: JBu#licJ en la secci$n 7eclaraciones de un m$dulo de c$digo 6(#as: Visi)le en )l !rocedimiento en el "ue est declarada 3odos los !rocedimientos del m$dulo de %ormulario o de c$digo )n toda la a!licaci$n

Mlo#al

)n una a!licaci$n de Visual Basic& las varia#les glo#ales se de#en usar s$lo cuando no e*ista ninguna otra %orma c$moda de com!artir datos entre %ormularios( .uando aya "ue usar varia#les glo#ales& es conveniente declararlas todas en un @nico m$dulo agru!adas !or %unciones y dar al m$dulo un nom#re signi%icativo "ue indi"ue su %inalidad& como Bu#lic(#as(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

11>

Curso de Visual Basic Avanzado <na !rctica de codi%icaci$n correcta es escri#ir c$digo modular siem!re "ue sea !osi#le( Bor e-em!lo& si la a!licaci$n muestra un cuadro de dilogo& colo"ue todos los controles y el c$digo necesario !ara e-ecutar la tarea del dilogo en un @nico %ormulario( )sto ayuda a tener el c$digo de la a!licaci$n organi0ado en com!onentes @tiles y minimi0a la so#recarga en tiem!o de e-ecuci$n( 5 e*ce!ci$n de las varia#les glo#ales 6"ue no se de#eran !asar:& los !rocedimientos y %unciones de#en o!erar s$lo so#re los o#-etos "ue se les !asan( Las varia#les glo#ales "ue se usan en los !rocedimientos de#en estar identi%icadas en la secci$n 7eclaraciones al !rinci!io del !rocedimiento( 5dems& los argumentos se de#en !asar a los !rocedimientos ;u# y Function mediante B!Val& a menos "ue sea necesario e*!lcitamente cam#iar el valor del argumento "ue se !asa(

Pre%i+os de alcance de varia)les


5 medida "ue aumenta el tamaEo del !royecto& tam#i1n aumenta la utilidad de reconocer r!idamente el alcance de las varia#les( )sto se consigue escri#iendo un !re%i-o de alcance de una letra delante del ti!o de !re%i-o& sin aumentar demasiado la longitud del nom#re de las varia#les( Alcance Mlo#al Livel de m$dulo Local del !rocedimiento Pre%i+o g m Linguno E+em.lo gstrLom#re<suario m#lnBrogreso7el.lculo d#lVelocidad

<na varia#le tiene alcance glo#al si se declara como Pu)lic en un m$dulo estndar o en un m$dulo de %ormulario( <na varia#le tiene alcance de nivel de mdulo si se declara como Private en un m$dulo estndar o en un m$dulo de %ormulario& res!ectivamente(

Constantes
)l cuer!o del nom#re de las constantes se de#e escri#ir en may@sculas y min@sculas& con la letra inicial de cada !ala#ra en may@sculas( 5un"ue las constantes estndar de Visual Basic no incluyen in%ormaci$n de ti!o de datos y el alcance& los !re%i-os como i& s& g y m !ueden ser muy @tiles !ara entender el valor y el alcance de una constante( Bara los nom#res de constantes& se de#en seguir las mismas normas "ue !ara las varia#les( Bor e-em!lo2 mintA*Lista<suario J Lmite de entradas m*imas !ara J la lista de usuarios 6valor J entero& local del m$dulo: gstrLuevaLnea J .arcter de nueva lnea J6cadena& glo#al de la J a!licaci$n:

Varia)les
7eclarar todas las varia#les a orra tiem!o de !rogramaci$n !or"ue reduce el n@mero de errores de#idos a erratas 6!or e-em!lo& aLom#re<suario3m! %rente a sLom#re<suario3m! %rente a sLom#re<suario3em!:( )n la %ic a Editor del cuadro de dilogo ?.ciones& active la o!ci$n (eclaracin de varia)les reMuerida( La instrucci$n ?.tion E/.licit re"uiere "ue declare todas las varia#les del !rograma de Visual Basic( Las varia#les de#en llevar un !re%i-o !ara indicar su ti!o de datos( O!cionalmente& y en es!ecial !ara !rogramas largos& el !re%i-o se !uede am!liar !ara indicar el alcance de la varia#le(

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

11D

Curso de Visual Basic Avanzado

Ti.os de datos de varia)les


<se los !re%i-os siguientes !ara indicar el ti!o de datos de una varia#le( Ti.o de datos Boolean Byte O#-eto .ollection .urrency 7ate 63ime: 7ou#le )rror 'nteger Long O#-ect ;ingle ;tring 3i!o de%inido !or el usuario Variant Pre%i+o #ln #yt col cur dtm d#l err int lng o#sng str udt vnt E+em.lo #ln)ncontrado #yt7atos'magen col+idgets cur'ngresos dtm'nicio d#l3olerancia errL@m7eOrden int.antidad lng7istancia o#-5ctivo sngAedia strLom#reF udt)m!leado vnt. ecI;um

6om)res descri.tivos de varia)les ! .rocedimientos


)l cuer!o de un nom#re de varia#le o !rocedimiento se de#e escri#ir en may@sculas y min@sculas y de#e tener la longitud necesaria !ara descri#ir su %uncionalidad( 5dems& los nom#res de %unciones de#en em!e0ar con un ver#o& como 'niciarLom#reAatri0 o .errar7ilogo( Bara nom#res "ue se usen con %recuencia o !ara t1rminos largos& se recomienda usar a#reviaturas estndar !ara "ue los nom#res tengan una longitud ra0ona#le( )n general& los nom#res de varia#les con ms de 32 caracteres !ueden ser di%ciles de leer en !antallas VM5( .uando se usen a#reviaturas& ay "ue asegurarse de "ue sean co erentes en toda la a!licaci$n( 5lternar aleatoriamente entre .nt y .ontar dentro de un !royecto !rovoca una con%usi$n innecesaria(

Ti.os de%inidos .or el usuario


)n un !royecto grande con muc os ti!os de%inidos !or el usuario& suele ser @til dar a cada uno de estos ti!os un !re%i-o de tres caracteres s$lo suyo( ;i estos !re%i-os comien0an con OuO& ser %cil reconocerlos cuando se est1 tra#a-ando con ti!os de%inidos !or el usuario( Bor e-em!lo& OucliO se !odra usar como !re%i-o !ara las varia#les de un ti!o .liente de%inido !or el usuario(

Convenciones de codi,icacin estructurada


5dems de las convenciones de nom#res& las convenciones de codi%icaci$n estructurada& como comentarios al c$digo y sangras co erentes& !ueden me-orar muc o la legi#ilidad del c$digo(

Convenciones de comentarios al cdi'o

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

119

Curso de Visual Basic Avanzado 3odos los !rocedimientos y %unciones de#en comen0ar con un comentario #reve "ue descri#a las caractersticas %uncionales del !rocedimiento 6"u1 ace:( )sta descri!ci$n no de#e descri#ir los detalles de im!lementaci$n 6c$mo lo ace:& !or"ue a veces cam#ian con el tiem!o& dando como resultado un tra#a-o innecesario de mantenimiento de los comentarios o& lo "ue es !eor& comentarios err$neos( )l !ro!io c$digo y los comentarios de lneas necesarios descri#irn la im!lementaci$n( Los argumentos "ue se !asan a un !rocedimiento se de#en descri#ir cuando sus %unciones no sean o#vias y cuando el !rocedimiento es!era "ue los argumentos est1n en un intervalo es!ec%ico( 3am#i1n ay "ue descri#ir& al !rinci!io de cada !rocedimiento& los valores de retorno de %unciones y las varia#les glo#ales "ue modi%ica el !rocedimiento& en es!ecial los modi%icados a trav1s de argumentos de re%erencia( Los #lo"ues del comentario de enca#e0ado del !rocedimiento de#en incluir los siguientes enca#e0ados de secci$n( )n la secci$n siguiente& O7ar %ormato al c$digoO& ay algunos e-em!los( Enca)ezado seccin Finalidad Bremisas )%ectos )ntradas de (escri.cin del comentario Lo "ue ace el !rocedimiento 6no c$mo lo ace:( Lista de cada varia#le e*terna& control& arc ivo a#ierto o cual"uier otro elemento "ue no sea o#vio( Lista de cada varia#le e*terna& control o arc ivo a%ectados y el e%ecto "ue tiene 6s$lo si no es o#vio:( 3odos los argumentos "ue !uedan no ser o#vios( Los argumentos se escri#en en una lnea a!arte con comentarios de lnea( )*!licaci$n de los valores devueltos !or las %unciones(

9esultados

9ecuerde los !untos siguientes2 .ada declaraci$n de varia#le im!ortante de#e incluir un comentario de lnea "ue descri#a el uso de la varia#le "ue se est declarando( Las varia#les& controles y !rocedimientos de#en tener un nom#re #astante claro !ara "ue los comentarios de lnea s$lo sean necesarios en los detalles de im!lementaci$n com!le-os( 5l !rinci!io del m$dulo (#as "ue contiene las declaraciones de constantes gen1ricas de Visual Basic del !royecto& de#e incluir un resumen "ue descri#a la a!licaci$n& enumerando los !rinci!ales o#-etos de datos& !rocedimientos& algoritmos& cuadros de dilogo& #ases de datos y de!endencias del sistema( 5lgunas veces !uede ser @til un !seudoc$digo "ue descri#a el algoritmo(

(ar %ormato al cdi'o


.omo muc os !rogramadores usan todava !antallas VM5& ay "ue a-ustarse al es!acio de la !antalla en la medida de lo !osi#le y acer "ue el %ormato del c$digo siga re%le-ando la estructura l$gica y el anidamiento( )stos son algunos indicadores2 Los #lo"ues anidados estndar& se!arados !or ta#uladores& de#en llevar una sangra de cuatro es!acios 6!redeterminado:( )l comentario del es"uema %uncional de un !rocedimiento de#e llevar una sangra de un es!acio( Las instrucciones de nivel su!erior "ue siguen al comentario del es"uema de#en llevar una sangra de un ta#ulador& con cada #lo"ue anidado se!arado !or una sangra de un ta#ulador adicional( Bor e-em!lo2

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

12G

Curso de Visual Basic Avanzado J[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ J Finalidad2 <#ica el !rimer caso encontrado de un J usuario es!eci%icado en la matri0 J Lista<suario( J )ntradas2 J strLista<suario6:2 lista de usuarios !ara #uscar( J str<suario7est2 nom#re del usuario #uscado( J 9esultados2indice del !rimer caso de rs<suario7est J encontrado en la matri0 rasLista<suario( J ;i no se encuentra el usuario de destino& devuelve 81( J[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ Function intBuscar<suario 6strLista<suario6: 5s ;tring& str<suario7est 5s K ;tring:5s 'nteger 7im i 5s 'nteger J .ontador de #ucle( 7im #ln)ncontrado 5s 'nteger J 'ndicador de J destino encontrado( intBuscar<suario N 81 iNG + ile i \N <#ound6strLista<suario: and Lot #ln)ncontrado '% strLista<suario6i: N str<suario7est 3 en #ln)ncontrado N 3rue intBuscar<suario N i )nd '% +end )nd Function

A'ru.acin de constantes
Las varia#les y constantes de%inidas se de#en agru!ar !or %unciones en lugar de dividirlas en reas aisladas o arc ivos es!eciales( Las constantes gen1ricas de Visual Basic se de#en agru!ar en un @nico m$dulo !ara se!ararlas de las declaraciones es!ec%icas de la a!licaci$n(

?.eradores U ! V
<se siem!re el o!erador U !ara unir cadenas y el o!erador V cuando tra#a-e con valores num1ricos( )l uso del o!erador V !ara concatenar !uede causar !ro#lemas cuando se o!era so#re dos varia#les Variant( Bor e-em!lo2 vntVar1 N O1G(G1O vntVar2 N 11 vnt9esult N vntVar1 / vntVar2 Jvnt9esult N 21(G1 vnt9esult N vntVar1 P vntVar2 Jvnt9esult N 1G(G111

Crear cadenas .ara Ms'Bo/$ In.utBo/ ! consultas SE#


.uando est1 creando una cadena larga& use el carcter de su#rayado de continuaci$n de lnea !ara crear m@lti!les lneas de c$digo& de %orma "ue !ueda leer o de!urar la cadena %cilmente( )sta t1cnica es es!ecialmente @til cuando se muestra un cuadro de mensa-e 6 Ms'Bo/: o un cuadro de entrada 6In.utBo/:& o cuando se crea una cadena ;HL( Bor e-em!lo2 7im As- 5s ;tring As- N O)sto es un !rra%o "ue estar en unO K P O cuadro de mensa-es( )l te*to est se!arado enO K P O varias lneas de c$digo en el c$digo de origen& O K P Olo "ue %acilita al !rogramador la tarea de leer y de!urar(O AsgBo* As7im .35 5s ;tring .35 N O;)L).3 [O K P O F9OA 3tuloO K P O +C)9) jFec a de !u#licaci$nk V 19DDO .onsulta3tulos(;HL N .35

1999 Jorge Ordovs Oromenda y Vicente Lema Osca

121

También podría gustarte