Está en la página 1de 119

Curso de

Avanzado

SEPTIEMBRE 1999
Curso de Visual Basic Avanzado
Avanzado

INTRODUCCIÓN AL MANUAL....................................................................................................
MANUAL..............................................................................................................
..........33
1. FORMULARIOS Y EVENTOS............................................................................................
EVENTOS..............................................................................................................3
..................3
INTRODUCCIÓN...........................................................................................................................................3
CONOCIMIENTOS TEÓRICOS........................................................................................................................3
Formularios, controles y eventos.............................................................................................
eventos.......................................................................................................
.............3
...3
Ciclo de vida de un formulario..............................................................................................................3
La ventana Debug..................................................................................................................................3
Debug..................................................................................................................................3
EJEMPLO PROPUESTO..................................................................................................................................3
EJEMPLO RESUELTO....................................................................................................................................3
Formulario 1..........................................................................................................................................3
1..........................................................................................................................................3
Formulario 2..........................................................................................................................................3
2..........................................................................................................................................3
2. IDENTIFICACIÓN DE OBJETOS (CONTROLES) EN UN FORMULARIO................................3
INTRODUCCIÓN...........................................................................................................................................3
CONOCIMIENTOS TEÓRICOS........................................................................................................................3
Cómo utilizar controles: eventos y roiedades....................................................................................3
Controles comunes: Label, !e"t#o",
!e"t#o", Command#utton, C$ec%#o".......................................................3
C$ec%#o".................................................... ...3
&dentificar el tio de un control.............................................................................................................
control.............................................................................................................3 3
Colección Controls de un formulario....................................................................................................3
EJEMPLO PROPUESTO..................................................................................................................................3
EJEMPLO RESUELTO....................................................................................................................................3
3. CLASES Y OBJETOS (I)........................................................................................................................3

ICNTRODUCCIÓN ...........................................................................................................................................3
ONOCIMIENTOS TEÓRICOS........................................................................................................................3
Los ob'etos en (isual
(isual #asic..............................................................................................................
#asic...................................................................................................................3
.....3
Conceto de encasulación )*ublic v.s. *rivate+..................................................................................3
tilización de variables de ob'eto.........................................................................................................3
&nstrucción *roerty..............................................................................................................................3
*roerty..............................................................................................................................3
(a
(ariables
riables est-ticas..............................................................................................................................
est-ticas.................................................................................................................................3
...3
EJEMPLO PROPUESTO..................................................................................................................................3
EJEMPLO RESUELTO....................................................................................................................................3
Formulario.............................................................................................................................................3
Formulario.............................................................................................................................................3
Clase Fic$a............................................................................................................................................3
4. CLASES Y OBJETOS (II)......................................................................................................................3
INTRODUCCIÓN...........................................................................................................................................3
CONOCIMIENTOS TEÓRICOS........................................................................................................................3
Cómo crear colecciones de ob'etos: la clase Collection.......................................................................3
*roiedades y mtodos del ob'eto ob'eto Collection............................................................................
Collection......................................................................................
...........3
.3
Cómo acceder a los elementos de una colección: claves e /ndices.......................................................3
0gregar elementos a una colección.......................................................................................................3
colección.......................................................................................................3
liminación de elementos de una colección..........................................................................................3
colección..........................................................................................3
ecueración de elementos de una colección......................................................................................
colección.......................................................................................3 .3
Control 4croll#ar................................................................................................................................3
4croll#ar................................................................................................................................3
5-s concetos de clases: eventos &nitialize y !erminate...........................................
!erminate........................................................
......................
..............3
.....3
EJEMPLO PROPUESTO..................................................................................................................................3
6b'etivo.................................................................................................................................................3
Desarrollo del e'emlo.....................................................................................................................
e'emlo..........................................................................................................................3.....3
EJEMPLO RESUELTO....................................................................................................................................3
Formulario.............................................................................................................................................3
Formulario................................................................................................. ............................................3
Clase 0genda.........................................................................................................................................3
5. TECNOLOGÍA ACTIVEX.....................................................................................................................
ACTIVEX.....................................................................................................................33
INTRODUCCIÓN...........................................................................................................................................3
ONOCIMIENTOS TEÓRICOS
C 7u es un comonente 0ctive8.................................................................................
........................................................................................................................3
0ctive8..............................................................................................................3
.............................3
!ios de comonentes 0ctive8...............................................................................................................3
0ctive8...............................................................................................................3

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 2


Curso de Visual Basic Avanzado
Avanzado

Creación din-mica de matrices.............................................................................................................3


*reservar el contenido de las matrices din-micas...............................................................................
din-micas................................................................................3 .3
5atrices de controles.................................................................................................................
controles..........................................................................................................................
...........3
..3
*ublicar un control 0ctive80ctive8 en un -gina 9eb.......................................................
9eb.....................................................................................
..............................3
3
EJEMPLO PROPUESTO..................................................................................................................................3
6b'etivo.................................................................................................................................................3
Desarrollo del e'emlo.....................................................................................................................
e'emlo..........................................................................................................................3
.....3
EJEMPLO RESUELTO....................................................................................................................................3
. ACCESO A BASES DE DATOS
DATOS (DAO Y JET).....................................................................................3
INTRODUCCIÓN...........................................................................................................................................3
CONOCIMIENTOS TEÓRICOS........................................................................................................................3
D06 y et...............................................................................................................................................3
et...............................................................................................................................................3
structura de una alicación de bases de datos en (isual (isual basic con D06 y et..................................3
l modelo de ob'etos D06.........................................................................................................
D06..................................................................................................................
...........3
..3
*rogramación con D06 y et................................................................................................................3
et................................................................................................................3
EJEMPLO PROPUESTO..................................................................................................................................3
6b'etivo.................................................................................................................................................3
Desarrollo del e'emlo.....................................................................................................................
e'emlo..........................................................................................................................3
.....3
EJEMPLO RESUELTO....................................................................................................................................3
5odDefiniciones....................................................................................................................................3
5odDefiniciones....................................................................................................................................3
Frm0genda...................................................................................................
Frm0genda......................................................................................................................................
.........................................3
......3
Cla0genda.............................................................................................................................................3
ClaD06;et...........................................................................................................................................3
!. ACCESO A BASES DE DATOS (DAO Y ODBCDIRECT).................................................................3
INTRODUCCIÓN...........................................................................................................................................3
CONOCIMIENTOS TEÓRICOS........................................................................................................................3
6ciones de utilización de 6D#C con D06.........................................................................................3
structura de una alicación de bases de datos en (isual (isual basic con D06 y 6D#CDirect.......
6D#CDirect............ .........
.....3
.3
*rogramación con D06 y 6D#CDirect..........................................................
6D#CDirect....................................................................................
...................................
...........3
..3
EJEMPLO PROPUESTO..................................................................................................................................3
6b'etivo.................................................................................................................................................3
Desarrollo del e'emlo.....................................................................................................................
e'emlo..........................................................................................................................3
.....3
EJEMPLO RESUELTO....................................................................................................................................3
ClaD06;6D#CDirect..........................................................................................................................3
". ACCESO A BASES DE DATOS
DATOS (RDO)............................................................................................
(RDO).................................................................................. ..............3
....3
INTRODUCCIÓN...........................................................................................................................................3
CONOCIMIENTOS TEÓRICOS........................................................................................................................3
l modelo de ob'etos D6.........................................................................................................
D6..................................................................................................................
...........3
..3
structura de una alicación de bases de datos en (isual (isual basic con D6.......................................
D6..........................................3 ...3
*rogramación con D6........................................................................................................................
D6........................................................................................................................3 3
EJEMPLO PROPUESTO..................................................................................................................................3
6b'etivo.................................................................................................................................................3
Desarrollo del e'emlo.....................................................................................................................
e'emlo..........................................................................................................................3
.....3
EJEMPLO RESUELTO....................................................................................................................................3
ClaD6.................................................................................................................................................3
#. EL REGISTRO DE $INDO$S............................................................................................................3
INTRODUCCIÓN...........................................................................................................................................3
CONOCIMIENTOS TEÓRICOS........................................................................................................................3
7u es el registro de 9indo<s............
9indo<s...............................................................................................................3
...................................................................................................3
Cómo acceder al registro de 9indo<s..................................................................................................3
structura del registro de 9indo<s.......................................................................................................3
9indo<s.......................................................................................................3
Cómo utilizar el 0*& de 9indo<s..........................................................................................................3
EJEMPLO PROPUESTO..................................................................................................................................3
6b'etivo.................................................................................................................................................3
Desarrollo del e'emlo.....................................................................................................................
e'emlo..........................................................................................................................3
.....3
EJEMPLO RESUELTO....................................................................................................................................3

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 3


Curso de Visual Basic Avanzado
Avanzado

Frm*resentacion..........................................................................................................................
Frm*resentacion............................................ .......................................................................................
......... 3
Frmegistro...........................................................
Frmegistro...........................................................................................................................................3
................................................................................3
5odegistro...............................................................................................................................
5odegistro........................................................................................................................................
...........3
..3
A%&NDICE A' ES%ECIFICACIONES LIMITACIONES Y FORMATOS DE ARCIVOS DE
VISUAL BASIC...........................................................................................................................................3
REQUISITOS DEL SISTEMA PARA APLICACIONES DE VISUAL BASIC............................................................3
LIMITACIONES DE LOS PROYECTOS.............................................................................................................3
LIMITACIONES DE CONTROLES....................................................................................................................3
=>mero total ara
Limitaciones de controles................................................................
controles......................................................................................................................3
determinados controles.................. ......................................................3
controles..............................................................................
......................................................................
.............3
...3
LIMITACIONES DE CÓDIGO..........................................................................................................................3
*rocedimientos, tios y variables...............................
variables..........................................................................................................3
...........................................................................3
!a
!abla
bla de entradas de módulo.................................................................................................................3
LIMITACIONES DE LOS DATOS.....................................................................................................................3
Datos de formulario, módulos est-ndar y módulos de clase.................................................................3
*rocedimientos, tios y variables..........................................................................................................3
variables..........................................................................................................3
!ios definidos or el usuario...............................................................................................................3
sacio de ila...........................................................................................................................
ila....................................................................................................................................
...........3
..3
Limitaciones de los recursos del sistema...............................................................................................3
sistema...............................................................................................3
ecursos de 9indo<s......................................................................................................................
9indo<s............................................................................................................................3 ......3
FORMATOS DE ARCHIVOS DE PROYECTO....................................................................................................3
"tensiones de arc$ivos de royecto............................................................
royecto...............................................................................................
.........................................3
......3
0rc$ivos varios y de tiemo de dise?o......................................................................................
dise?o...............................................................................................
............3
...3
0rc$ivos de tiemo de e'ecución.....................................................................................................
e'ecución...........................................................................................................3......3
structuras de formularios....................................................................................................................3
=>mero de versión.................................................................................................................................3
versión.................................................................................................................................3
Descrición del formulario.............................................................................
formulario.....................................................................................................
.................................
..............3
.....3
#lo@ues de control................................................................................................................................
control.................................................................................................................................3 .3
6rden de los blo@ues de control............................................................................................................3
#lo@ues de control incrustados................................................................................................
incrustados..........................................................................................................
.............3
...3
Controles de men>.................................................................................................................................3
!e
!eclas
clas de mtodo abreviado..........................
abreviado...................................................................................................................3
.........................................................................................3
Comentarios en la descrición del formulario......................................................................................3
*roiedades de la descrición de un formulario....................................................................
formulario..............................................................................
..............3
....3
4inta"is...................................................................................................................................................3
(a
(alores
lores binarios de roiedades............................................................................................................3
roiedades............................................................................................................3
*roiedad &con..............................................................................................................................
&con......................................................................................................................................
........33
*roiedad !ab&nde".......................
!ab&nde"...............................................................................................................................3
........................................................................................................3
nidades de medida..............................................................................................................................3
(a
(alores
lores de colores.......................................................
colores..................................................................................................................................
...........................................................................33
6b'etos de roiedades.........................................................................................................................3
Código de #asic.....................................................................................................................................3
rrores al cargar
cargar arc$ivos de formulario....................
formulario...............................................................................
.....................................................................
..............3
....3
5ensa'es de registro de error en la carg carga a de un formulario.................................................................3
Formato del arc$ivo de royecto
royecto ).vb+.........................................................................................
).vb+................................................................................................
.......3
3
A%&NDICE B' CONVENCIONES DE CODIFICACIÓN......................................................................3
¿POR QUÉ EXISTEN LAS CONVENCIONES DE CODIFICACIÓN?.....................................................................3
CONVENCIONES DE CODIFICACIÓN MÍNIMAS..............................................................................................3
CONVENCIONES DE NOMBRES DE OBJETOS.................................................................................................3
PREFIJOS SUGERIDOS PARA CONTROLES.....................................................................................................3
PREFIJOS SUGERIDOS PARA LOS OBJETOS DE ACCESO A DATOS DAO!.....................................................3
PREFIJOS SUGERIDOS PARA MEN"S.............................................................................................................3
SELECCIÓN DE PREFIJOS PARA OTROS CONTROLES.....................................................................................3
CONVENCIONES DE NOMBRES DE CONSTANTES Y VARIABLES....................................................................3
*refi'os de alcance de variables............................................................................................................3
variables............................................................................................................3
Constantes.............................................................................................................................................3
(ariables................................................................................................................................................3
!ios de datos de variables...................................................................................................................3

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 4


Curso de Visual Basic Avanzado
Avanzado

=ombres descritivos de variables y rocedimientos.............................................................


rocedimientos............................................................................3
...............3
!ios definidos or el usuario...............................................................................................................3
CONVENCIONES DE CODIFICACIÓN ESTRUCTURADA..................................................................................3
Convenciones de comentarios al código...............................................................................................3
Dar formato al código.....................................................................................................................
código...........................................................................................................................3
......3
0gruación de constantes....................................................................................
constantes......................................................................................................................3
..................................3
6eradores A y B..................................................................................................................................3
Crear cadenas ara 5sg#o", &nut#o" y consultas 47L.....................................................................3

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 5


Curso de Visual Basic Avanzado
Avanzado

Introducción al manual
Visual Basic se ha 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 herramienta 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 sencille/ 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 t0cnicas involucradas en el desarrollo
de alicaciones con este entorno de desarrollo' (n concreto% en este curso se darán las "ases
ara ad!uirir conocimientos en

• -lases y o",etos
• ecnología active 
• cceso a "ases de datos 6O% J(%
J(% O6B-76&8(-%
O6B-76&8(-% 86O
• (l registro de *indo+s

:i "ien en todos los caítulos se e)ondrán los conocimientos te#ricos !ue los autores hemos
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 ara eso e)isten multitud de li"ros t0cnicos%
o la roia ayuda de Visual Basic' Los autores hemos re$erido limitar en la medida de lo

osi"le
e,e
e,emlosla roue
mlos carga
ro te#rica
uesto
stos delueltos
s y resuel
res manual% tototenciando
tos%% totalm
alment
ente elnales%
e $uncio asecto
$uncionales% !ueráctico
ayudarácon
ayudarán la inclusi#n
n al lector en de
lector la
comrensi#n de los contenidos del curso'

odos los caítulos de este manual siguen la misma estructura

• ;na introducci#n en la !ue se e)ondrán 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 ráctica los conocimientos reci0n 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' un!ue el estudio individual de dichos 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 Ordovás Oromendía y Vicente Lema Osca =


Curso de Visual Basic Avanzado
Avanzado

1. ormularios ! eventos
Introducción

(l rimer aso ara crear una alicaci#n con Visual Basic es crear la inte
inter$a/%
r$a/% 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$a/> 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
m0todos !ue de$inen su comortamiento y los eventos !ue de$inen la $orma en !ue interact?an
con el usuario' @ediante 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 ersonali/a el o",eto ara cu"rir las
necesidades de la alicaci#n'
o
odos
dos los lengua,es de rogramaci#n ara *indo+s comarten la misma característica 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,ecutándose línea a línea% sino !ue de"e resonder a las acciones !ue el
usuario% el sistema oerativo u otras alicaciones reali/an so"re 0l> estas acciones se conocen
en Visual Basic como eventos'

o
odos
dos los elementos !ue odemos utili/ar en la construcci#n de una alicaci#n en Visual Basic
$ormularios% controles ctive% etc reci"en unos eventos redeterminados como "etFocus%
#ostFocus o Activate' Aodemos 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' aremos incai0 en el conceto de $ormulario como
o",eto% con sus roiedades% m0todos 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 Ordovás Oromendía y Vicente Lema Osca C


Curso de Visual Basic Avanzado
Avanzado

Conocimientos teóricos

ormularios$ controles ! eventos


Los $ormularios y controles de Visual Basic son o",etos !ue e)onen sus roios m
m0todos%
0todos%
roiedades y eventos' Las roiedades se ueden considerar como atri"utos de un o",eto% los
m0todos como sus acciones y los eventos como sus resuestas'

;n o",eto de uso diario como el glo"o de un niDo tiene tam"i0n roiedades% m0todos y
eventos' (ntre las roiedades de un glo"o se incluyen atri"utos visi"les como el eso% el
diámetro y el color' Otras roiedades descri"en su estado
estad o in$lado o desin$lado o atri"utos
atri"uto s
!ue no son visi"les% como su edad' Aor de$inici#n% todos los glo"os tienen estas roiedades> lo
!ue varía de un glo"o a otros son los valores de estas roiedades'

;n glo"o tiene tam"i0n m0todos o acciones inherentes !ue uede e$ectuar' iene iene un m0todo
in$lar la acci#n de llenarlo de helio o un m0todo desin$lar e)eler su contenido y un m0todo
elevarse si se de,a escaar' 6e nuevo% todos los glo"os ueden e$ectuar estos m0todos'

Los glo"os tienen además resuestas rede$inidas a ciertos eventos e)ternos' Aor e,emlo% un
glo"o resondería al evento de incharlo desin$lándose o al evento de soltarlo elevándose en el
aire'
-omo o",etos !ue son% los $ormularios ueden e,ecutar m0todos y resonder a eventos'

(l evento Resize de un $ormulario se desencadena siemre !ue se cam"ia el tamaDo de un


$ormulario% ya sea or una acci#n del usuario o a trav0s del c#digo' (sto ermite reali/ar
acciones como mover o cam"iar el tamaDo de los controles de un $ormulario cuando han
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 $inali/ar acciones del $ormulario' Aor e,emlo% en el
evento Activate odríamos escri"ir c#digo ara resaltar el te)to de un determinado cuadro de
te)to> con el evento 6eactivate odríamos guardar los cam"ios e$ectuados en un archivo o en
una "ase de datos'

Aara hacer visi"le un $ormulario se invoca el m0todo Show' Aor e,emlo% la sentencia

Eorm1':ho+

mostraría el $ormulario Eorm1' &nvocar el m0todo 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 ermitirán al usuario interactuar con la alicaci#n' :#lo
comrendiendo !u0 acciones odrán reali/arse so"re los $ormularios y en !u0 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
son

• Creado& el $ormulario e)iste como o",eto% ero todavía 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 Ordovás Oromendía y Vicente Lema Osca F


Curso de Visual Basic Avanzado
Avanzado

• Car'ado& ya odemos acceder a los controles del $ormulario% ero 0ste 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
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' Aodemos acceder a todos los elementos !ue
lo comonen y odemos actuar so"re ellos% ues el $ormulario es visi"le' 6urante este
estado% cada ve/ !ue hay !ue reintar el $ormulario or e,emlo% cuando una ventana !ue
se ha situado
situado so"re 0ste desaarece
desaarece se genera el evento
evento Paint' demás% si el $ormulario
recuera
lt.a" y el
lt.a" $oco desu0s
volver desu0s al
de$ormulario%
ha"erlo erdido or e,emlo%
se genera el eventoalActivate
cam"iar' a otra alicaci#n con

(escar'ado& una una ve


ve// te
term
rmin
inad
ado
o este
este roc
roces
eso
o el $o
$orm
rmul
ular
ario
io no es visi
visi"l
"le%
e% y su
suss
comonentes no son accesi"les' (l roceso de descarga se roduce cuando se cierra el
$orm
$ormul
ular
ario
io 
ul
ulsa
sand
ndo
o el "ot#
"ot#nn % e,ec
e,ecut
utan
ando
do el
el m0t
m0todo
odo Unload del $ormulario% etc' (l
roceso de descarga de un $ormulario% a su ve/% generará dos eventos uer!"nload y
"nload en este orden' (n los dos eventos odemos detener el roceso de descarga
esta"leciendo el valor del arámetro Cancel a cual!uier n?mero distinto de G' (n general%
arovecharemos 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 est0 endiente
de guardado% etc'

• Eliminado& aun!ue un $ormulario est0 descargado% mientras e)iste cual!uier re$erencia al


mismo no será eliminado totalmente de memoria' -uando se roduce esta circunstancia el
$ormulario está descargado y nadie hace re$erencia a 0l 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 herramienta imortante en el roceso de desarrollo de una alicaci#n'

(n dicho 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  Debu# Inmediate $indow
utili/ando el m0todo Print'

a
am"i0n
m"i0n odemos comro"ar el valor de una varia"le si utili/amos la sentencia

?nombre_variable

en la ventana &nmediato% o esta"lecer dicho valor con la sentencia

nombre_variable=valor

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 9


Curso de Visual Basic Avanzado
Avanzado

%&em'lo 'ro'uesto

-on este e,emlo veremos los estados or los !ue asa un $ormulario durante su ciclo de vida'
demás% comro"aremos c#mo un $ormulario no se elimina de memoria hasta !ue no se
li"eran todas las re$erencias al mismo en el rograma'

1' -reare
-rearemos
mos los siguien
siguientes
tes $or
$ormul
mulari
arios
os

2' (n el $ormula
$ormulario
rio 1% insert
insertare
aremos
mos c#dig
c#digo
o en las su"rutina
su"rutinass &ni
&nitia
tiali/
li/e%
e% Load% ctiv
ctivate
ate%% Aaint%
Aaint%
Huer
Hu ery;
y;nl
nloa
oad%
d% ;nlo
;nload
ad y erm rmin
inat
ate%
e% ara
ara !ue
!ue ca
cada
da ve ve// !u
!ue e se la
lanc
nce
e el ev even
ento
to
corresondiente mostremos en la ventana 6e"ug el $ormulario so"re el !ue se ha generado
el evento y el nom"re del evento'

3' D
Dad
adir
irem
emos
os c#
c#di
digo
go en el -lic
-licII de
dell "ot#
"ot#nn a
ara
ra mo
most
stra
rarr el $o
$orm
rmul
ular
ario
io 2' am"i0
m"i0nn
mantendremos una re$erencia al $ormulario 2 ara evitar !ue se lance su evento erminate
al cerrarse'
4' &nsert
&nsertarem
aremos
os c#digo
c#digo en las su"ruti
su"rutinas
nas Load%
Load% ;nload
;nload y erminat
rminate
e del $ormula
$ormulario
rio 2% ara
mostrar en la antalla 6e"ug el $ormulario y el evento !ue se roduce en cada caso'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 1G


Curso de Visual Basic Avanzado
Avanzado

%&em'lo resuelto

ormulario 1
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
 (,emlo 1 del -urso de Visual Basic van/ado
van/ado

 (l o",etivo de este e,emlo es reconocer los eventos !ue un


 $ormulario uede reci"ir% así como el orden en el !ue se
 reci"en
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

Otion ()licit

Arivate :u" -ommand1K-licI


6im ErmuevoEormulario s Eorm

 Muardamos un enlace al $ormulario 2% ara !ue no


 salte
salte su
su e
erminate
rminate cuando lo cerremos saltará
 el
el e
erminate
rminate del $ormulario 2 cuando salte
salte el
el
 erminate
erminate del $ormulario 1 y se ierda la re$erencia
 al segundo $ormulario
:et ErmuevoEormulario N Eormulario2
ErmuevoEormulario':ho+
(nd :u"

Arivate :u" EormKctivate


6e"ug'Arint Eormulario1 (vento ctivate
(nd :u"

Arivate :u" EormK&nitiali/e


6e"ug'Arint Eormulario1 (vento &nitiali/e
(nd :u"

:u" EormKLoad
6e"ug'Arint Eormulario1 (vento Load
(nd :u"

Arivate :u" EormKHuery;nload-ancel s &nteger% ;nload@ode s &nteger


6e"ug'Arint Eormulario1 (vento Huery;nload
(nd :u"

Arivate :u" EormKAaint


6e"ug'Arint Eormulario1 (vento Aaint
(nd :u"

Arivate :u" EormKerminate


EormKerminate
6e"ug'Arint Eormulario1 (vento erminate
erminate
(nd :u"

Arivate :u" EormK;nload-ancel s &nteger


6e"ug'Arint Eormulario1 (vento ;nload
(nd :u"

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 11


Curso de Visual Basic Avanzado
Avanzado

ormulario *
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
 (,emlo 1 del -urso de Visual Basic van/ado
van/ado

 (l o",etivo de este e,emlo es reconocer los eventos !ue un
 $ormulario uede reci"ir% así como el orden en el !ue se
 reci"en
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

Otion ()licit

Arivate :u" EormKLoad


6e"ug'Arint Eormulario2 (vento Load
(nd :u"

Arivate :u" EormKerminate


EormKerminate
6e"ug'Arint Eormulario2 (vento erminate
erminate
(nd :u"

Arivate :u" EormK;nload-ancel s &nteger


6e"ug'Arint Eormulario2 (vento ;nload
(nd :u"

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 12


Curso de Visual Basic Avanzado
Avanzado

*. Identi%icación de o)+etos ,controles- en un %ormulario


Introducción

Los controles son o",etos !ue están contenidos en los o",etos de $ormularios' -ada tio de
control tiene su roio con,unto de roiedades% m0todos y eventos% !ue lo hacen adecuado

aramás
son una adecuados
$inalidad
$inalidados
adecuad determinada'
determinada
escri"' irlgunos
ara escri"ir der te)to%
o mostrar
mostra los controles
mientras!ue
!ueuede
otros usar eneslas
controles
control alicaciones
alicacio
ermiten nes
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% m0todos y eventos !ue tienen asociados' :e e)lican tam"i0n algunos de los
controles estándar% y c#mo es osi"le di$erenciar en tiemo de e,ecuci#n los tios de controles
utili/ados en nuestros $ormularios'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 13


Curso de Visual Basic Avanzado
Avanzado

Conocimientos teóricos

Cómo utilizar controles& eventos ! roiedades


;n evento es una acci#n reconocida or un $ormulario o un control% es decir% un suceso !ue ha
sido rovocado or el usuario% el sistema oerativo u otros rogramas en e,ecuci#n y !ue
reercute
tecla o el en un elemento
aso de nuestra
del untero de rat#nalicaci#n'
so"re unAor e,emlo%
o",eto' son eventos
 trav0s de los laeventos
ulsaci#n de una
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 dichos eventos y el
rocedimiento de evento asociado tiene c#digo% Visual Basic llama a ese c#digo'

un!ue los o",etos de Visual Basic reconocen automáticamente un con,unto rede$inido de


eventos% nostros decidimos cuándo y c#mo se resonderá a un evento determinado'  cada
evento le corresonde una secci#n de c#digo un rocedimiento de evento' -uando deseamos
!ue un control resonda a un evento% escri"imos c#digo en el rocedimiento de ese evento'

Los tios de eventos reconocidos or un o",eto varían% ero muchos tios son comunes a la
mayoría de los controles' Aor e,emlo% la mayoría de los o",etos reconocen el evento Clic( si
un usuario hace clic en un $ormulario% se e,ecuta el c#digo del rocedimiento de evento Clic(
del $ormulario> si un usuario hace 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"utos color% tamaDo% $orma% etc' l 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/$


Te/tBo/$ CommandButton$ C0ecBo/
(n Visual Basic hay un con,unto de controles comunes !ue son usados en la gran mayoría de
alicaciones' (n la siguiente ta"la se muestra el uso normal de estos controles

Control 2so t3ico ! descrición )reve


La"el (ti!ueta @ostrar 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
Ca'tion..

e)tBo) -uadro de te)to @ostrar un


rincial uroiedad
n te
te)to !u
!ues
e u
Te*t
ued%e!ue
se
ser determina
ed
editado' La
Lel
a
te)to !ue se'muestra en dicho control'
-ommandButton Bot#n -omen/ar o terminar un un r
roceso' -u
-uando elel
usuario ulsa este "ot#n% se roduce el evento
Clic('
-hecIBo) -asilla de activaci#n :eleccionar una oci#n no e)cluyente de
entre un con,unto de ociones' :u rincial
roiedad es Value% !ue indica si está
seleccionada 1 o no G'
ListBo) -uadro de lista :eleccionar una valor dentro una lista' La
roiedad Te*t de dete
term
rmin
inaa el elem
elemen
ento
to
seleccionado or el usuario'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 14


Curso de Visual Basic Avanzado
Avanzado

Identi%icar el tio de un control


()isten dos $unciones !ue nos ermiten identi$icar el tio de control !ue estamos tratando
T!'e)ame y T!'e+,

La $unci#n yeame nos ermite conocer el nom"re de la clase a la !ue ertenece un o",eto%
lo !ue nos osi"ilita
osi"ilita adecuar el c#digo !ue escri"imos al tio de o",eto !ue estemos tratando
tratando%%
así como crear $unciones generales ara diversos tios de controles'

:i tenemos un "ot#n -ommandButton1 en nuestro $ormulario% utili/ando la sentencia

yeame -ommandButton1

O"tendríamos la cadena -ommandButton% es decir% la clase a la !ue ertenece el "ot#n'

La $unci#
$unci#nn y
yeO$
eO$ es algo algo más restricti
restrictiva'
va' 6e"e ir en una sentenci
sentencia
a de condic
condici#n
i#n una
se
sent
nten
enci
cia
a de
dell tio
tio if .. then ...'' (sta $unci#n nos ermite identi$icar la clase a la !ue
.... then
erteneceel o",eto% ara oder oerar en consecuencia'

;n e,emlo de uso sería

&$ yeO$ @i-ontrol &s -ommandButton hen


'''
else
'''
endi$

Colección Controls de un %ormulario


;n $ormulario
$ormulario no es más !ue un lienzo donde se pintan controles' (s decir% odemos entender
un $ormulario como un o",eto !ue osee una colección de controles' (sta colecci#n se llama
Controls'

Aodemos acceder a cada uno de los controles de un $ormulario a trav0s de esta colecci#n' :in
necesidad de conocer a riori su nom"re% "astaría recorrer toda la colecci#n y hacer una rutina
ara lan/ar el c#digo a e,ecutar ara cada tio de controles del $ormulario'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 15


Curso de Visual Basic Avanzado
Avanzado

%&em'lo 'ro'uesto

(n este e,emlo distinguirem


distinguiremos
os los tios de o",etos
o",etos !ue tiene un $ormulario%
$ormulario% accediendo
accediendo a las
roiedades del o",eto en el !ue nos encontremos durante el recorrido de la colecci#n de
o",etos'

1' -reare
-rearemos
mos el siguien
siguiente
te $ormul
$ormulari
ario
o

2' (n el Load del $ormul


$ormulari
ario%
o% inserta
insertarem
remos
os c#digo
c#digo ara !ue una ve/ cargad
cargado
o el $or
$ormul
mulari
ario
o
tengamos en la ventana de 6e"ug el nom"re y el tio de todos los o",etos !ue se han
cargado'

3' (n $unci#n
$unci#n del tio
tio de
de o",eto%
o",eto% cam"iar
cam"iaremos
emos su
su color $ondo 1
color de $ondo
• La"el ro,o
• -hecIBo) verde
• e)tBo) a/ul
• -ommandButton amarillo

1 ota ara oder cam"iar el color de $ondo de un -ommandButton% es necesario esta"lecer a


1 Mrahical su roiedad :tyle'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 1=


Curso de Visual Basic Avanzado
Avanzado

%&em'lo resuelto

KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
 (,emlo 2 del -urso de Visual Basic van/ado
van/ado

 (l o",etivo de este e,emlo es identi$icar los o",etos contenidos
 en un $ormulario y oerar con ellos en $unci#n de su tio'
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

Otion ()licit

Arivate :u" EormKLoad


6im O",-ontrol s O",ect

 8ecorremos todos los controles del $ormulario


Eor (ach O",-ontrol &n @e'-ontrols
 (n $unci#n del tio de control% cam"iaremos su color de
 $ondo
:elect -ase yeameO",-ontrol
yeameO",-ontrol
-ase La"el
O",-ontrol'BacI-olor N v"8ed
-ase e)tBo)
O",-ontrol'BacI-olor N v"Blue
-ase -hecIBo)
O",-ontrol'BacI-olor
-ase -ommandButton N v"Mreen
O",-ontrol'BacI-olor N v"<ello+
v"<ello+
(nd :elect

 :acaremos su nom"re y tio de o",eto a la antalla


 6e"ug
6e"ug'Arint yeameO",-ontrol P   P O",-ontrol'ame
e)t O",-ontrol
(nd :u"

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 1C


Curso de Visual Basic Avanzado
Avanzado

4. Clases ! o)+etos ,I-


Introducción

asta ahora hemos visto los o",etos !ue roorciona Visual Basic% ero nosotros tam"i0n
odemos crear o",etos' (n este caítulo se darán los conocimient
conocimientos
os "ásicos necesarios ara
entender c#mo odemos utili/ar o",etos en Visual Basic'

-ada o",eto de Visual Basic se de$ine mediante una clase' Aodemos entender las clases
como un modelo concetual de los o",etos' Aara 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'
6e$ine las características de cada castillo de arena% como su tamaDo y $orma' :e utili/a la
clase ara crear instanciar  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 hemos ha"lado de las roiedades y los eventos de un o",eto' Aero
además
ade más de estas
estas caract
caracterí
erísti
sticas
cas los o",etos
o",etos roorci
roorciona
onan
n un con,un
con,unto
to de métodos% !ue
determinan las acciones !ue el o",eto uede reali/ar'

La rogramaci#n orientada a o",etos roorciona un en$o!ue totalmente distinto al utili/ado en


la rogramaci#n clásica estructuras% tios de datos% rogramaci#n secuencial'''' Bien alicada%
la rogramaci#n orientada a o",etos minimi/a el tiemo dedicado a la deuraci#n de los
rogramas% y $acilita la reutili/aci#n del c#digo'

sí mismo este


e ste modelo de rogramaci#n nos ermite controlar !u0 características de nuestros
o",etos son visibles ara las alicaciones !ue los utili/an% lo !ue se denomina encapsulación '

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 1F


Curso de Visual Basic Avanzado
Avanzado

Conocimientos teóricos

#os o)+etos en Visual Basic


Los o",etos están encapsulados > es decir% contienen su roio c#digo y sus roios datos% lo
cual $acilita su mantenimiento más !ue los m0todos de escritura de c#digo tradicionales'

Los o",etos de Visual Basic tienen propieda des, métodos y eventos. Las roiedades son los
propiedades,
datos !ue descri"en un o",eto' Los m0todos son lo !ue uede hacer con el o",eto' Los eventos
son tareas !ue reali/a el o",eto> odemos escri"ir c#digo ara e,ecutarlo cuando se rodu/can
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
!u0 circunstancias se uede crear'

Aara utili/ar 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 m0todos de un o",eto
mediante la varia"le de o",eto' UnaUna var
varia"l
ia"le
e de o",eto
o",eto uede
uede ser un enlace en tiempo de
compilación el más lento o un enlace en tiempo de dise!o '
l con,unto de roiedades y m0todos se le llama interfaz. La inter$a/ redeterminada de un
o",eto
o",eto de ViVisua
suall Basic es una interfaz dual
dual !ue admite las $ormas de enlace anteriormente
mencio
men cionada
nadas's' :i una varia"l
varia"le
e de o",eto
o",eto está correctamente definida es decir
decir%% (im 5 As
nombre_clase % utili/ará la $orma más ráida de enlace'

demás de su inter$a/ redeterminada% los o",etos de Visual Basic ueden imlementar


inter$aces
inter$aces adicionales
adicionales ara roorcionar
roorcionar polimorfismo' (l olimor$ismo le ermite maniular
polimorfismo
muchos tios de$erentes de o",etos sin reocuarse de su tio' Las interfaces m"lt
m"ltiple s son
iples
una característica del @odelo de o",etos comonentes -O@> ermiten !ue los rogramas
evolucionen con el tiemo% agregando nueva $uncionalidad sin a$ectar al c#digo e)istente'

Conceto de encasulación ,Pu)lic v.


v.s.
s. Private-
;na de las características más imortantes de la rogramaci#n orientada a o",etos es el
conceto de encasulación un o",eto "ien desarrollado es a!uel !ue uede ser utili/ado or
otros elementos de $orma e$iciente% ero sin !ue 0stos cono/can c#mo $unciona internamente'
(sto nos ermite cam"iar la $orma en !ue un o",eto funciona sin !ue los elementos !ue utili/an
el o",eto noten dicho cam"io'
(n Visual Basic% las roiedades y m0todos de una clase ueden ser de d dos
os tios
Pu)lic& accesi"les or cual!uier elemento del royecto'
Private& accesi"les s#lo or los elementos de la clase donde están de$inidos'

2tilización de varia)les de o)+eto


;tili/ar una varia"le de o",eto es similar a utili/ar una varia"le convencional% ero con un
aso adicional asignar un o",eto a la varia"le'
Arimero% declararemos la varia"le con una sentencia

(im variable As clase

Luego% asignaremos un o",eto a esa varia"le% utili/ando la instrucci#n Set

Set variable N obeto

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 19


Curso de Visual Basic Avanzado
Avanzado

Aero atención el o",eto 0a de e/istir ara oder ser asignado a una varia"le de o",eto' (s
decir% reviamente hemos tenido !ue utili/ar la instrucci#n 6e7% "ien en la misma sentencia
en la !ue declaramos la varia"le de o",eto

(im varia"le As 6e7 -lase

O "ien en otro lugar del c#digo

Set varia"le N 6e7 -lase

La sentencia 6e7 crea una instancia de la clase eseci$icada es 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 mayoría de los casos el sistema oerativo se encargará de esta tarea si se
nos olvida a nosotros% ero no hay !ue con$iarse od0is imaginar el rendimiento de una
má!uina en la !ue tengamos% or e,emlo% 5 instancias de *ord al mismo tiemo'''' Aara
li"erar la memoria y los recursos !ue consume un o",eto utili/aremos la sentencia

Set varia"le N 6ot0in'

Instrucción Pro'ert!
-omo se mencion# anteriormente% es desea"le !ue un elemento e)terno a un o",eto no ueda
accederr de $orma incontrolada
accede incontrolada a sus roiedades'
roiedades' Aodemos controlar esto creando
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 0stos realicen acciones no ermitidasR' Aor
e,emlo% odemos necesitar !ue el AV erminal Aunto de Venta de una tienda ueda
modi$icar el saldo de una tar,eta lo !ue se corresondería con la comra de un cliente> sin
em"argo% no tiene sentido !ue dicho AV ermita al vendedor comro"ar el saldo de la cuenta
del cliente% o hacer una trans$erencia a su roia cuenta'

Visual Basic ermite acceder y modi$icar el valor de una roiedad rivada a trav0s de los
procedimientos
procedimi propiedad o Pro'ert! '
entos de propiedad

:e roorcionan tres tios de rocedimientos

Procedimiento Proósito
Proert! "et 6evuelve el valor de una roiedad
Proert! #et (sta"lece el valor de una roiedad
Proert! Set (sta"lece
(sta" lece el valor de una roiedad
roiedad de o",eto
es decir
decir%% una roied
roiedad
ad !ue contie
contiene
ne una
re$erencia a un o",eto

ormalmente se de$ine una are,a Pro'ert! -et.Pro'ert! Let or cada roiedad rivada de
ormalmente
un
una
a cl
clas
ase'
e' Pro'ert! -et nos ermite
Pro'ert! ermite acceder
acceder al valor
valor almacen
almacenado
ado en dicha
dicha roie
roiedad
dad%%
mientras !ue Pro'ert! Let nos osi"ilita asignarle un valor'

Pro'ert! Set tam"i0n ermite esta"lecer el valor de una roiedad rivada' La di$erencia
en
entre
tre es
este
te r
roc
oced
edim
imie
ient
nto
o 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 utili/a la instrucci#n Set y a Proert! #et
en caso contrario'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 2G


Curso de Visual Basic Avanzado
Avanzado

(sta roiedad se utili/a ara matener el estándar de los o",etos% ya !ue ara asignarles un
valor se usa la ala"ra reservada Set.

Varia)les est8ticas
un!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
durante todo de lasde
el tiemo varia"les declaradas
e,ecuci#n' a nivellasdevaria"les
:in em"argo% m#dulo ylocales
?"licas se reserva
declaradas con
(im s#lo e)isten mientras se e,ecuta el rocedimiento en el cual se han declarado' La
r#)ima ve/ !ue se e,ecute el rocedimiento se reiniciali/arán 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,
utili/ando la ala"ra clave Static

Static nombre_variable as tipo_dato

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 21


Curso de Visual Basic Avanzado
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' am"i0n
am"i0n se retende !ue
!u e el lector se $amiliarice
$am iliarice 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'
Aara racticar estos concetos crearemos una agenda tele$#nica "ásica'

1' 6iseDa
6iseDaremo
remoss el
el sigui
siguient
ente
e $ormu
$ormular
lario
io

2' 6e$ini
6e$inirem
remos
os una clas
clase
e Eic
Eicha
ha con cinc
cinco
o ro
roied
iedades
ades nombre, apellidos, dirección, teléfono
y n"mero' Aara cada una de las roiedades crearemos sus corresondientes m0todos de
roiedad Pro'ert! -et y Pro'ert! Let'

3' &mlem
&mlementa
entarem
remos
os tam"i0
tam"i0n
n un m0todo
m0todo $uestra%& !ue muestre mediante un ms#bo* el valor
de las roiedades de un o",eto Eicha creado reviamente'

4' (n el $ormulari
$ormulario%
o% una ve/ esta"lecidas
esta"lecidas las
las roiedades
roiedades de la $icha
$icha nom"re%
nom"re% aellidos''
aellidos'''
' se
ulsará el "ot#n ara crear una nueva $icha' :erá necesario crear un nuevo o",eto de la
clase Eicha y esta"lecer sus roiedades'

5' Aara
Aara esta"lece
esta"lecerr la roie
roiedad
dad n?mero
n?mero de la $icha%
$icha% crearem
crearemos
os una varia"le
varia"le estáti
estática
ca !ue
incrementaremos en una unidad cada ve/ !ue se ulse el "ot#n% de $orma !ue nunca
creemos dos $ichas con el mismo n?mero'

=' ;na ve/


ve/ creada
creada la nueva
nueva $icha%
$icha% llamaremos
llamaremos a su m0todo
m0todo @uestra
@uestra%% ara !ue
!ue nos enseDe el
el
valor de sus roiedades'

C' Aor ?ltimo


?ltimo%% no odemos
odemos olvidarnoss de destruir el o)+eto creado igualándolo a )othin#'
olvidarno

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 22


Curso de Visual Basic Avanzado
Avanzado

%&em'lo resuelto

ormulario
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
 (,emlo 3 del -urso de Visual Basic van/ado
van/ado
 (l o",etivo de este e,emlo es $amilliari/arnos con el uso de o",etos'
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

Otion ()licit

Arivate :u" But-rearEichaK-licI


6im O",Eicha s -laEicha
:tatic &ntumEicha s &nteger

 -reamos un nuevo o",eto de la clase $icha


:et O",Eicha N e+ -laEicha

 &ncrementamos el n?mero de $ichas creadas


&ntumEicha N &ntumEicha . 1

 (sta"lecemos las roiedades de la nueva $icha


O",Eicha':trom"re N )tom"re
O",Eicha':trellidos N )tellidos
O",Eicha':tr6ireccion N )t6ireccion
O",Eich
O",Eicha':trele$ono
a':trele$ono N )tele$ono
O",Eicha'&ntumero N &ntumEicha

 Llamamos al m0todo @et@ostrar del o",eto ara


 !ue muestre los datos de la $icha
O",Eicha'@et@ostrar

 (liminamos el o",eto creado


:et O",Eicha N othing
(nd :u"

Clase ic0a
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
 (,emlo 3 del -urso de Visual Basic van/ado
van/ado

 6e$inici#n de la clase E&-% todos los o",etos $ichas tendrán esta inter$ace'
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

Otion ()licit

 Aroiedades de la clase -laEicha


Arivate Var&ntumero s &nteger
Arivate Var:trom"re s :tring
Arivate
Arivate Var:trellidos
Var:tr6ireccion s
s :tring
:tring
Arivate Var:trele$ono s :tring

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 23


Curso de Visual Basic Avanzado
Avanzado

 @0todos ara acceder a la roiedad Var&ntumero


Au"lic Aroerty Met &ntumero s :tring
&ntumero N Va
Var&ntumero
r&ntumero
(nd Aroerty

Au"lic Aroerty Let &ntumeroAar&ntumero s :tring


Var&
Var&ntumero
ntumero N Aar&ntumero
(nd Aroerty

 @0todos ara acceder a la roiedad Var:trom"re


Au"lic Aroerty Met :trom"re s :tring
:trom"re N Var:trom"re
Var:trom"re
(nd Aroerty

Au"lic Aroerty Let :trom"reAar:trom"re s :tring


Var:
Var:trom"re
trom"re N Aar:trom"re
(nd Aroerty

 @0todos ara acceder a la roiedad Var:trellidos


Au"lic Aroerty Met :trellidos s :tring
:trellidos N Var:trellidos
Var:trellidos
(nd Aroerty

Au"lic Aroerty Let :trellidosAar:trellidos s :tring


Va
Var:trellidos
r:trellidos N Aar:trellidos
(nd Aroerty

 @0todos ara acceder a la roiedad Var:tr6ireccion


Au"lic Aroerty Met :tr6ireccion s :tring
:tr6ireccion N Var:tr6ireccion
Var:tr6ireccion
(nd Aroerty

Au"lic Aroerty Let :tr6ireccion:tr6ireccion s :tring


Var:
Var:tr6ireccion
tr6ireccion N :tr6ireccion
(nd Aroerty

 @0todos ara acceder a la roiedad Var:trele$ono


Var:trele$ono
Au"lic Aroerty Met :trele$ono
:trele$ono s :tring
:trele$ono N Var:trele$ono
(nd Aroerty

Au"lic Aroerty Let :trele$onoAar:trele$ono


:trele$onoAar:trele$ono s :tring
Var:tre
Var:trele$ono
le$ono N Aar:trele$ono
(nd Aroerty

 @0todo ara mostrar los datos de una $icha


Au"lic :u" @et@ostrar
@sgBo) ?mero  P Var&ntumero
Var&ntumero P v"-rL$ P K
om"re  P Var:trom"re
Var:trom"re P v"-rL$ P K
ellidos  P Va
Var:trellidos
r:trellidos P v"-rL$ P K
6irecci#n  P Var:tr6ireccion
Var:tr6ireccion P v"-rL$ P K
el0$ono  P Var:trele$ono
Var:trele$ono%% % Eicha
Eicha 
(nd :u"

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 24


Curso de Visual Basic Avanzado
Avanzado

. Clases ! o)+etos ,II-


Introducción

asta ahora hemos arendido c#mo se crea e instancia una clase sencilla% y los concetos
más imortantes de la rogramaci#n orientada a o",etos en Visual Basic'

(n estemas
clases
clases caítulo arenderemos
sencil
sencillas
las'' Aara elloa desarrollar
Aara ello arend
arenderem
eremosclases mas comle,as
os a usar coleccionesutili/ando
colecciones colecciones
de clases
clases% de
% y haremos
haremos
hincai0 en la otimi/aci#n en tiemo y recursos del sistema al hacer "?s!uedas% inserciones
ySo "orrados mediante indices o claves de una colecci#n'

am"i0n se retende !ue el lector se $amiliarice con el uso de controles menos utili/ados como
la "arra de desla/amiento hori/ontal :crollBar'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 25


Curso de Visual Basic Avanzado
Avanzado

Conocimientos teóricos

Cómo 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  Forms% Controls% etc% ero además ermite
la creaci#n de colecciones ersonali/adas utili/ando la clase gen0rica Collection'

Los o",etos Collection almacenan cada elemento en una varia"le Variant' 6e 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 estándar% ero no los tios de$inidos or el usuario'

Las varia"les Variant siemre ocuan 1= "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
necesario alicar ReDim a un o",eto Collection% lo !ue roduce
roduce un c#digo
c#digo más limio y
máss $áci
má $ácill de mant
manten
ener
er'' demá
demás%
s% los
los o",e
o",eto
toss Collection o$
o$re
rece
cen
n un ac
acce
ceso
so o
orr clave
clave
e)tremadamente ráido% !ue no o$recen las matrices'

 esar del tamaDo de las varia"les Variant% ha"rá muchas ocasiones en las !ue tenga más
sentido
sentido utili/
utili/ar
ar un o",eto
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 ermitirán 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 m0todos !ue se uede utili/ar ara insertar%
eliminar y recuerar los elementos de la colecci#n'
Proieda
edad o m:todo (escrición
@0todo Add grega elementos a la colecci#n'
Aroiedad Count 6evuelve el n?mero de elementos de la colecci#n'
:#lo lectura'
@0todo Item 6evuelve un elemento% or índice o or clave'
@0todo Remove (limina un elemento de la colecci#n% or índice o
or clave'

(stas roiedades y m0todos s#lo roorcionan los servicios más "ásicos de las colecciones'
Aor e,emlo% el m0todo 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' Aodemos roorcionar una
$uncionalidad más ro"usta% y roiedades% m0todos y eventos adicionales% si creamos nuestra
roia clase de colecci#n% como haremos en el e,emlo corresondiente a este caítulo'



@ás e)actamente% una varia"le Variant ocua siemre 1= "ytes incluso si los datos se
encuentran almacenados en cual'uier otra parte. Aor e,emlo% si asignamos una cadena o una
matri/ a una varia"le de tio Variant% 0sta contiene un untero a una coia de la cadena o de
los datos de la matri/' (n los sistemas de 32 "its s#lo se utili/an como untero 4 "ytes de la
varia"le Variant y realmente no hay 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 utili/an 4 "ytes' Los tios de datos
num0ricos se almacenan ocuando siemre los 1= "ytes'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 2=


Curso de Visual Basic Avanzado
Avanzado

Cómo acceder a los elementos de una colección& claves e 3ndices


Los servicios "ásicos de agregar
agregar%% eliminar y recuerar
recuerar elementos de una colecci#n deenden
de claves
claves e índi
índice
ces'
s' ;na clave es un valor Strin#' Auede 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 co
conv
nvert
ertid
idoo en tio Strin#' (l m0tod
m0todoo Add nos ermite asociar una clave con un
elemento% como se descri"e más adelante'

;n (ndice es un dato de tio #on' entre uno 1 y el n?mero de elementos de la colecci#n ' ⊗

Aodemos controlar el valor inicial del índice de un elemento mediante los arámetros be,ore y
a,ter% ero su valor uede cam"iar si agregamos o eliminamos otros elementos'

Aodemos utili/ar el índice ara recorrer los elementos de una colecci#n' Aor e,emlo% si
insertamos el c#digo siguiente en el Load de un $ormulario aarecería en la antalla Debu# el
nom"re de los controles !ue están egados en 0l

6im &nt-ontador as &nteger


Eor &nt-ontador N G o -ontrols'-ount
-ontrols'-ount 7 1
6e"ug'Arint -ontrols&nt-ontador'ame P v"-rL$
e)t

()iste otra $orma de acceder


()iste acceder a los elementos
elementos de una colecci#n
colecci#n !ue
!ue roorciona
roorciona un mayor
rendimiento
rendimi ento utili/ar
utili/ar la sentencia For %ach' (sta oci#n es nota"lemente más ráida !ue la
ite
iterac
raci#n
i#n median
mediante te índice
índice%% aun!ue
aun!ue esto
esto no es cierto
cierto en todas
todas las imleme
imlementac
ntacion
iones
es de
colecci
col ecciones
ones deend
deende e de c#mo
c#mo almace
almacena
na la colecc
colecci#n
i#n los datos
datos intern
internamen
amente'
te' Aodemos
Aodemos
codi$icar de nuevo el e,emlo anterior utili/ando esta sentencia
6im Var6ato as Variant
Eor (ach Var6ato &n -ontrols
6e"ug'Arint Var6ato'ame P v"-rL$
e)t Var6ato

A're'ar elementos a una colección


Aara agregar
Aara agregar un element
elemento
o a una colecci#
colecci#n
n utili/a
utili/arem
remos
os el m0todo Add' La sinta)is es la
siguiente

colección. Add ,elemento As Variant


Variant ;$ clave As Variant
Variant< ;$ )e%ore As Variant
Variant<
;$ a%ter As Variant
Variant< -

Aor e,emlo% imaginemos


imaginemos un o",eto
o",eto Aersona
Aersona !ue tiene una roiedad
roiedad 6& !ue lo identi$ica
identi$ica de
$orma ?nica% y una colecci#n de ersonas denominada -olAersonas' Aara agregar un o",eto
nuevo a la colecci#n utili/aríamos la sentencia
-olAersonas'dd Aersona% Aersona'6&

Las colecciones más antiguas de Visual Basic suelen tener


ten er "ase cero% mientras !ue las más
recientes suelen tener "ase uno' (s más intuitivo utili/ar 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'
Aor 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 Ordovás Oromendía y Vicente Lema Osca 2C


Curso de Visual Basic Avanzado
Avanzado

:e suone
suone !ue la roie
roiedad
dad 6& es un tio Strin#' :i esta roiedad es un n?mero or
e,emlo% un tio Lon#% utili/aríamos
utili/aríamos la $unci#n
$unci#n CStr ara convertirlo
convertirlo al valor Strin# re!uerido
or las claves

-olAersonas'dd Aersona% -:trAersona'6&

(l m0todo Add aceta argumentos con nom"re' Aara agregar una ersona nueva como tercer
elemento de la colecci#n% odemos escri"ir

-olAersonas'dd Aersona% Aersona'6&% a$terN2

Aodemos utili/ar
Aodemos utili/ar los argumento
argumentoss con nom"re
nom"re be,ore y a,ter ara mantener ordenada una
colecci#n
colecci#n de o",etos'
o",etos' Aor e,emlo% before:=1 inserta
inserta un elemento
elemento al rinciio de la colecci#n%
colecci#n%
ya !ue los o",etos Collection están "asados en uno'

Eliminación de elementos de una colección


Aara eliminar un elemento de una colecci#n% utili/aremos el m0todo Remove' La sinta)is es la
siguiente

colección'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 12345=C*% odemos utili/ar
cual!uiera de estas dos instrucciones ara eliminarlo

-olAersonas'8emove 3

o "ien

-olAersonas'8emove 12345=C*

Recueración de elementos de una colección


Aara recuerar un elemento de una colecci#n% utili/aremos el m0todo Item' La sinta)is es la
siguiente
;Set< variable = colección'Item,(ndice-

-omo ocurre con el m0todo 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 m0todo Remove% cual!uiera de estas dos
instrucciones recuerará el tercer elemento de la colecci#n

:et Aersona N -olAersonas'&tem3

o "ien

:et Aersona N -olAersonas'&tem 12345=C*

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 2F


Curso de Visual Basic Avanzado
Avanzado

:i utili/amos n?meros enteros como claves% de"emos emlear la $unci#n CStr ara convertirlos
a cadenas antes de asarlos a los m0todos Item o Remove' Los o",etos Collection siemre
asumen !ue un n?mero entero es un índice ' ⊗

(l m0todo Item es el m0todo redeterminado de los o",etos Collection% or lo !ue odemos
omitirlo cuando !ueramos acceder a un elemento de una colecci#n' 6e esta $orma% el e,emlo
de c#digo anterior tam"i0n se uede escri"ir de la siguiente manera

:et Aersona N -olAersonas3

o "ien

:et Aersona N -olAersonas 12345=C*

Los
Los o",
o",etos
etos Collection man
mantie
tienen
nen sus n?meros
n?meros de índice
índice automát
automática
icament
mente
e al agrega
agregarr y
eliminar elementos' (l índice num0rico de un elemento dado uede variar a lo largo del tiemo'
o es conveniente% or tanto% guardar un valor num0rico de índice y eserar recuerar el
mismo elemento más tarde' Lo me,or es utili/ar claves ara este ro#sito'

Control >ScrollBar
Las "arras de desla/amiento roorcionan un medio sencillo de recorrer largas listas de
elementos o grandes cantidades de in$ormaci#n al desla/arse hori/ontal o verticalmente
dentro de una alicaci#n o de un control'
Las "arras de desla/amiento son un elemento com?n de la inter$a/ de *indo+s 95 y de
*indo+s '

Barra de desla/amiento hori/ontal /Scroll0ar

Barra de desla/amiento vertical  VScroll0ar 

Lo
Loss co
cont
ntrol
roles
es >ScrollBar y VScrollBar no son igual !ue las "arras de desla/amiento
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 @6& de Visual Basic' 6ichas
"arras de desla/amiento aarecen automáticamente cuando la alicaci#n o el control contiene
más in$ormaci#n de la !ue se uede resentar con el tamaDo actual de la ventana o "ien% en el
caso
caso de los cuadros
cuadros de te)to
te)to y los $ormular
$ormularios
ios @6&% cuando
cuando la roie dad ScrollBars está
roiedad
esta"lecida a True'

(n las versiones anteriores de Visual Basic% las "arras de desla/amiento se solían utili/ar
como disositivos de entrada' :in em"argo% las recomendaciones de la inter$a/ de *indo+s
sugieren ahora !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 Aro$esional y la
(dici#n (mresarial de Visual Basic'



o es conveniente ermitir !ue los o",etos Collection decidan si el valor !ue están
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 utili/ar 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 num0ricos% de"emos utili/ar CLn# ara convertirla'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 29


Curso de Visual Basic Avanzado
Avanzado

Los controles Scroll0ar siguen siendo ?tiles en Visual


Visual Basic or!ue roorcionan
roorcionan caacidad
caacidad
de desla/amiento a las alicaciones o a los controles !ue no la roorcionan de $orma
automática'

Los controles Scroll0ar utili/an los eventos Scroll y Chan#e ara suervisar el movimiento del
cuadro de desla/amiento a lo largo de la "arra de desla/amiento'

Evento (escrición
-hange Ocurre desu0s de mover el cuadro de

:croll desla/amiento'
O curre al
al mo
mover el
el cu
cuadro dede de
desla/amiento' o
o
ocurre si se hace clic en las $lechas o en la "arra de
desla/amiento'

(l evento Scro ll roorciona acceso al valor de la "arra de desla/amiento cuando 0sta se


Scroll
arrastr
arrastra'
a' (l evento
evento Cha
Chan#
n#ee se roduce desu0s de li"erar el cuadro de desla/amiento o
cuando se hace clic en la "arra o en las $lechas de desla/amiento'

La roiedad Value !ue de $orma redeterminada es G es un valor entero !ue se corresonde


con la osici#n del cuadro de desla/amiento dentro de la "arra de desla/amiento' -uando la
osici#n del cuadro de desla/amiento tiene el valor mínimo% 0ste se mueve a la osici#n
situada más a la i/!uierda en las "arras de desla/amiento hori/ontal o a la osici#n más alta
en las "arras de desla/amiento vertical' -uando el cuadro de desla/amiento tiene el valor
má)imo% se mueve a la osici#n situada más a la derecha o a la más "a,a' 6e $orma similar% un
valor
mitad ademedio camino
la "arra entre los límites del intervalo coloca el cuadro de desla/amiento en la
de desla/amiento'

demás de utili/ar los clics del rat#n ara cam"iar el valor de la "arra de desla/amiento% el
usuario tam"i0n uede arrastrar el cuadro de desla/amiento a cual!uier osici#n de la "arra'
(l valor resultante deende de la osici#n del cuadro de desla/amiento% ero siemre se
encuentra
encuen tra dentro del intervalo de$inido
de$inido or las roiedades
roiedades 1in y 1a* esta"lecidas or el
usuario'

M8s concetos de clases& eventos


e ventos Initialize ! Te
Terminate
rminate

o
odas
das las clases roorcionan dos eventos rede$inidos Initialize y Terminate'
ormalmente el rocedimient
ormalmente rocedimientoo 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 0ste se
destruye'
destruye' :uone una "uena norma de rogramaci#n
rogramaci#n asegurarnos%
asegurarnos% utili/ando
utili/ando este m0todo%
m0todo%
!ue toda la memoria utili/ada or un o",eto se li"era en el momento de su destrucci#n'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 3G


Curso de Visual Basic Avanzado
Avanzado

%&em'lo 'ro'uesto

?)+etivo
(l o",etivo es crear una agenda de tel0$onos en la !ue odamos consultar $ácilmente las $ichas%
así como insertar nuevas $ichas o "orrar $ichas e)istentes'

Aara ello% crearemos una nueva clase ClaA'enda


• Proiedades
• Colic0as colecci#n de las $ichas almacenadas en la agenda
• M:todos
• Proert! Int6umic0as devuelve el n?mero de $ichas almacenadas en la agenda
• un
unction
ction Crearic0
Crearic0a,Str6
a,Str6om)r
om)re$
e$ StrAellid
StrAellidos$
os$ Str(irecci
Str(ireccion$
on$ StrTele%
StrTele%ono-
ono- as
Inte'er crea una nueva $icha y la inserta en la colecci#n -olEichas' 6evuelve el
n?mero de la $icha'
• unction Borraric0a,Int6umic0a- "orra la $icha cuyo n?mero se asa como
argumento'
• un
unction
ction ic0a,IntI
ic0a,IntIndic
ndice- Claic0a devuelve la $icha corresondiente a la
e- As Claic0a
osici#n &nt&ndice en la colecci#n de $ichas
$ ichas -olEichas
• Su) Class@Terminate,-
Class@Terminate,- eliminaremos todas las $ichas de la colecci#n -olEichas%
así como la roia colecci#n% antes de !ue el o",eto se elimine de memoria

(n el $ormulario odremos reali/ar tres acciones


• Crear una nueva %ic0a rimero ulsaremos el "ot#n 6ueva %ic0a% con lo !ue se "orrarán
los cuadros de te)to y se incrementará el límite suerior de la "arra de scroll' ;na ve/
introducidos los datos de la nueva $icha% ulsaremos el "ot#n Crear %ic0a% donde se llamará
al m0todo Crearic0a de la clase ClaA'enda% o"teniendo el n?mero de $icha resultante%
!ue nos servirá ara oder "orrarla en caso necesario'
• Consultar una %ic0a e/istente utili/ando la "arra de scroll odremos consultar todas las
$ichas de la agenda' -ada ve/ !ue cam"ie el valor de la "arra de scroll% actuali/aremos el
$ormulario
$ormula rio ara mostrar los datos de la $icha corresondiente
corresondiente or e,emlo% si el valor de la
"arra de scroll es 3% mostraremos la cuarta $icha de la colecci#n> hay !ue recordar !ue el
límite in$erior de la "arra de scroll es G% mientras !ue una colecci#n emie/a en 1' -ada ve/
!ue cam"iemos de $icha% actuali/aremos el n?mero de la $icha actual'
• Borrar la %ic0a actual  utili/aremos el n?mero de $icha actual ara llamar al m0todo
Borraric0a de la clas clase
e ClaA'enda' 6ecrementaremos el límite má)imo de la "arra de
scroll% y actuali/aremos el $ormulario ara !ue muestra los datos de la $icha siguiente o
anterior a la "orrada'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 31


Curso de Visual Basic Avanzado
Avanzado

(esarrollo del e+emlo


1' -reare
-rearemos
mos el siguien
siguiente
te $ormul
$ormulari
ario
o

2' -rearemos
-rearemos una clase genda
genda con una roiedad
roiedad rivada
rivada -olEichas
-olEichas de tio Collection% !ue
no tendr
tendrá
á m0to
m0todo
doss Pro'ert! asocia
asociados
dos'' -rearem
-rearemos
os un m0todo
m0todo Pro'ert! -et llamado
Int6umic0as !ue nos devuelva el n?mero de $ichas de la colecci#n -olEichas'

3' &mlementare
&mlementaremosmos un m0todo
m0todo ?"lico
?"lico -rearEic
-rearEicha
ha !ue reci"e
reci"e como
como argumentos
argumentos elel nom"re%
nom"re%
aellido% direcci#n y tel0$ono y crea una $icha nueva utili/aremos la clase Eicha de$inida en
el e,
e,em
emlo
lo 3% asig
asigná
nánd
ndol
ole
e un n?
n?me
mero
ro est
este
e n?
n?mer
mero o se
será
rá un
una
a esesec
ecie
ie de TcTcam
amo
o
autonum0ricoU% !ue generaremos incrementalmente' demás de crear la nueva $icha% la
introduce en la colecci#n -olEichas% oniendo como clave el n?mero de la $icha como la
clave tiene !ue ser una cadena% hay !ue hacer la conversi#n a string de dicho n?mero'

4' &mlementare
&mlementaremos
mos tam"i0n
tam"i0n un m0todo
m0todo ?"lico
?"lico BorrarEicha
BorrarEicha%% !ue reci"e
reci"e como argumento
argumento la
clave de la $icha !ue !ueremos eliminar' (ste m0todo elimina la $icha de memoria y
tam"i0n de la colecci#n'
5' am"i0n
m"i0n crearemo
crearemoss un m0todo
m0todo ?"lico
?"lico Eicha%
Eicha% !ue reci"e
reci"e como argument
argumento o el índice
índice de la
$icha dentro de la colecci#n -olEichas y devuelve la $icha corresondiente'

=' -omo
-omo ?ltim
?ltimo
o element
elemento
o de la
la clase%
clase% en el evento
evento Terminate li"eraremos todo el esacio de
memoria !ue odamos tener reservado ara las $ichas y la colecci#n'

C' (n el $ormulario
$ormulario crearemos
crearemos un
un o",eto de la
la clase genda%
genda% y una varia"le
varia"le &ntumEich
&ntumEichactu
actual
al
!ue indicará el n?mero de la $icha cuyos datos aarecen en el $ormulario' -omo estas
varia"les van a ser utili/adas en todas las $unciones del $ormulario% las crearemos como
varia"les glo"ales del $ormulario'

F' l ulsar
ulsar el "ot#n
"ot#n Tueva
Tueva $ichaU%
$ichaU% de"emos
de"emos aumenta
aumentarr la roiedad
roiedad 1a* de la "arra de scroll%
osicionarnos en el ?ltimo elemento y limiar los datos nom"re% aellidos% direcci#n y
tel0$ono% rearando el $ormulario ara insertar una nueva $icha'  ?+o& ara la rimera
$icha% no es necesario incrementar el límite má)imo de la "arra de scroll% ni limiar el
$ormulario'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 32


Curso de Visual Basic Avanzado
Avanzado

9' ;na ve/ insert


insertados
ados los datos
datos de la nueva
nueva $icha%
$icha% ulsare
ulsaremos
mos el "ot#n
"ot#n T-rear $ichaU%
$ichaU% donde
donde
llamaremos al m0todo -rearEicha del o",eto genda y actuali/aremos el título del $rame%
donde ondrá TEicha U siendo  el n?mero de la nueva $icha% !ue o"tendremos como
valor de retorno del m0todo -rearEicha'

1G' -ada ve/ !ue


!ue cam"ie
cam"ie la "arra de scroll
scroll evento
evento Chan#e de"emos actuali/ar los datos del
$ormulario% mostrando la in$ormaci#n de la $icha corresondiente en la colecci#n -olEichas
del o",eto genda' -rearemos una $unci#n ctuali/arBarra:croll !ue se encargará de ello
?+o la $unci#n de"e comro"ar si hay $ichas en la colecci#n% y tam"i0n si estamos
insertando una
los limiará'' a$icha
m"i0nnueva%
am"i0n en !ue
tenemos cuyoo"tener
caso enel lugar de de
n?mero actuali/ar los
la $icha a datos del $ormulario%
actual'
ctual'

11'
11' -uando
-uando ulsem
ulsemos
os el "ot#n
"ot#n TBorrar
TBorrar $ichaU
$ichaU llamare
llamaremos
mos al m0todo
m0todo BorrarEic
BorrarEicha
ha del o",eto
genda asándole el n?mero de la $icha actual' ;na ve/ "orrada% decrementaremos el
valor má)imo de la "arra de scroll  ?+o cuidado cuando "orramos la ?ltima $icha y
actuali/aremos los datos del $ormulario llamando a la $unci#n ctuali/arBarra:croll'

12' Aara terminar%


terminar% s#lo nos $alta controlar
controlar cuando están ha"ilitados
ha"ilitados los cuadros de te)to% los
"otones y demás elementos ara !ue !uede lo más coherente osi"le'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 33


Curso de Visual Basic Avanzado
Avanzado

%&em'lo Resuelto

ormulario
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
 (,emlo 4 del -urso de Visual Basic van/ado
van/ado
 6e$inici#n del $ormulario% este será el inter$a/ del usuario'
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

Otion ()licit

6im O",genda s e+ -lagenda


6im &ntumEichactual s &nteger

Arivate :u" ButBorrarEichaK-licI

 -on$irmamos el "orrado
&$ @sgBo)Q6esea eliminar la $icha actualR% v"<eso%
v"<eso% Borrado de $icha N v"o hen
()it :u"
(nd &$

 Borramos la $icha actual


O",genda'BorrarEicha &ntumEichactual

 ctuali/amos el n?mero de elementos de la "arra de scroll


&$ O",genda'&ntumEichas  G hen
:croll1'@a) N O",genda'&ntumEichas 7 1
(lse
:croll1'@a) N G
(nd &$

 ctuali/amos la "arra de scroll


ctuali/arBarra:croll

(nd :u"

Arivate :u" But-rearEichaK-licI

 -reamos una nueva $icha con los datos introducidos or el


 usuario%
usuario% y o"tenemos el c#digo de la $icha creada
&ntumEichactual N O",genda'-rearEicha)tom"re% )tellidos% )t6ireccion% K
)tele$ono

 ctuali/amos el título del $rame


Erame1'-ation N Eicha  P &ntumEichactual

 6esha"ilitamos el "ot#n de crear $icha y el $rame


But-rearEicha'(na"led N Ealse
Erame1'(na"led N Ealse

 a"ilitamos los "otones de nueva $icha y "orrar


 $icha% así como la "arra de scroll
ButuevaEicha'(na"led N rue
ButBorrarEicha'(na"led N rue
:croll1'(na"led N rue

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 34


Curso de Visual Basic Avanzado
Avanzado

(nd :u"

Arivate :u" ButuevaEichaK-licI

 ctuali/amos la "arra de scroll


&$ O",genda'&ntumEichas N G hen
 -on la rimera $icha creada% ha"ilitamos
 la "arra de scroll
:croll1'(na"led N rue
Erame1'(na"led N rue
(lse
 &ncrementamos el n?mero de elementos de
 la "arra de scroll
:croll1'@a) N :croll1'@a) . 1
:croll1'Value
:croll1'Value N :croll1'@a)
(nd &$

 a"ilitamos el "ot#n de crear $icha y el $rame


But-rearEicha'(na"led N rue
Erame1'(na"led N rue

 6esha"ilitamos los "otones de nueva $icha y "orrar


 $icha% así como la "arra de scroll
ButuevaEicha'(na"led N Ealse
ButBorrarEicha'(na"led N Ealse
:croll1'(na"led
(nd :u" N Ealse

Arivate :u" EormKLoad


 6esha"ilitamos el $rame% la "arra de scroll%
 el "ot#n de crear $icha y el "ot#n de "orrar $icha
Erame1'(na"led N Ealse
:croll1'(na"led N Ealse
But-rearEicha'(na"led N Ealse
ButBorrarEicha'(na"led N Ealse

 (sta"lecemos los límites de la "arra de scroll


:croll1'@a) N G
(nd :u"

Arivate :u" EormK;nload-ancel s &nteger


 (liminamos la agenda
:et O",genda N othing
(nd :u"

Arivate :u" :croll1K-hange


 ctuali/amos la "arra de scroll
ctuali/arBarra:croll
(nd :u"

Arivate Eunction ctuali/arBarra:croll


6im O",Eicha s -laEicha

 -omro"amos si no hay $ichas o estamos creando una $icha nueva


&$ :croll1'@a) N O",genda'&ntumEichas hen
 Limiamos los datos del $rame
)tom"re N v"ull:tring
)tellidos N v"ull:tring
)t6ireccion N v"ull:tring
)tele$ono
)tele$ono N v"ull:tring

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 35


Curso de Visual Basic Avanzado
Avanzado

 ctuali/amos el título del $rame


Erame1'-ation N v"ull:tring

 6esha"ilitamos el "ot#n de "orrado


ButBorrarEicha'(na"led N Ealse
(lse
 O"tenemos la $icha corresondiente de la agenda
 "uscamos or índice% no or c#digo de $icha
:et O",Eicha N O",genda'Eicha:croll1'Value
O",genda'Eicha:croll1'Value . 1
 :acamos los datos de la $icha
)tom"re N O",Eicha':trom"re
)tellidos N O",Eicha':trellidos
)t6ireccion N O",Eicha':tr6ireccion
)tele$ono N O",Eicha':trele$ono
O",Eic ha':trele$ono

 ctuali/amos el c#digo de la $icha actual


&ntumEichactual N O",Eicha'&ntumEicha

 ctuali/amos el $rame
Erame1'-ation N Eicha  P &ntumEichactual
(nd &$
(nd Eunction

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 3=


Curso de Visual Basic Avanzado
Avanzado

Clase A'enda
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
 (,emlo 4 del -urso de Visual Basic van/ado
van/ado

 6e$inici#n de la clase M(6% a!uí estarán los datos de cada agenda y los m0todos
 ara actuar con ellos'
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

Otion ()licit

Arivate -olEichas s e+ -ollection  -olecci#n de $ichas de la agenda

 @0todo ara o"tener el n?mero de $ichas de la agenda


Au"lic Aroerty Met &ntumEichas s &nteger
&ntumEichas N -olEichas'-ount
(nd Aroerty

 @0todo ara crear una $icha nueva en la agenda


Au"lic Eunction -rearEichaByVal :trom"re s :tring% K
ByVa
ByVall :trellidos s :tring% ByVal
ByVal :tr6ireccion s :tring% K
ByVal :trele$ono s :tring
:tring  s &nteger
&ntege r
:tatic &ntumotalEichas
&ntumotalEichas s &nteger
6im O",Eicha s -laEicha

 &ncrementamos el camo auton?merico &ntumotalEichas


&ntumotalEichas
&ntumo
&ntumotalEichas
talEichas N &ntumotalEichas
&ntumotalEichas . 1

 -reamos un nuevo o",eto de la clase $icha


:et O",Eicha N e+ -laEicha

 (sta"lecemos las roiedades de la nueva $icha


O",Eicha':trom"re N :trom"re
O",Eicha':trellidos N :trellidos
O",Eicha':tr6ireccion N :tr6ireccion
O",Eich
O",Eicha':trele$ono
a':trele$ono N :trele$ono
O",Eicha'&ntumEicha N &ntumotalEichas
&ntumotalEichas

 &nsertamos
como Iey ellac#digo
nuevade$icha en la ara
la $icha% colecci#n
oderde $ichas% desu0s
"uscarla oniendo
 or c#digo convertimos a string el c#digo or!ue el Iey
 tiene !ue ser un string
-olEichas'dd O",Eicha% -:trO",Eicha'&ntumEicha

 6evolvemos el c#digo de la $icha creada


-rearEicha N &ntumotalEichas
&ntumotalEichas
(nd Eunction

 @0todo ara "orrar una $icha de la agenda


Au"lic Eunction BorrarEichaByVal &ntumEicha s &nteger
6im O",Eicha s -laEicha

 O"tenemos la $icha corresondiente de la colecci#n


 de
de $ichas
$ichas ara oder "uscar or Iey% tenemos !ue
 "uscamos
convertir
convertir elor
n?mero a string% ues en
índice en caso
caso contrario
contrario
:et O",Eicha N -olEichas'&tem-:tr&ntumEicha

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 3C


Curso de Visual Basic Avanzado
Avanzado

 (liminamos la $icha de la colecci#n


-olEichas'8emove -:tr&ntumEicha

 (liminamos la $icha
:et O",Eicha N othing
(nd Eunction

 @0todo ara eliminar todas las $ichas de una agenda cuando


Arivate
0ste es:u"
eliminada
-lassKerminate
-lassKerminate
6im O",Eicha s -laEicha

 (liminamos todas las $ichas de la colecci#n


Eor (ach O",Eicha &n -olEichas
:et O",Eicha N othing
e)t O",Eicha
(nd :u"

 @0todo ara o"tener una $icha esecí$ica de la agenda no "usca


 or Iey sino or índice
Au"lic Eunction EichaByVal
EichaByVal &nt&ndice s &nteger s -laEicha
:et Eicha N -olEichas'&tem&nt&ndice
(nd Eunction

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 3F


Curso de Visual Basic Avanzado
Avanzado

. Tecnolo'3a ActiveD
Introducción

(l o",etivo de este caítulo es mostrar al lector el roceso de creaci#n de comonentes


ctive% y su utili/aci#n
ut ili/aci#n en un royecto' am"i0n
am"i0n se retende
 retende !ue el lector se $amiliarice
$am iliarice con el
roceso de u"licaci#n de un control ctive en una ágina *e"% como muestra de la
versatilidad de este tio de comonentes'
-on este caítulo se hace una introducci#n al curso )ctive *, !ue es la continuaci#n de los
cursos Visual Basic 5'G "ásico y avan/ado'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 39


Curso de Visual Basic Avanzado
Avanzado

Conocimientos teóricos

u: es un comonente ActiveD


;n comonente ctive es un archivo '((% '6LL u 'O- !ue cumle la eseci$icaci#n ctive
ara roorcionar
roorcionar o",etos'
o",etos' Aara entendernos%
entendernos% un control
control ctive es una e)tensi#n
e)tensi#n del cuadro
de herramientas de Visual Basic' Los controles ctive se usan como cual!uiera de los
controles
controles estándar
estándar incororados
incororados%% como el control
control -hecIBo)'
-hecIBo)' -uando agregamos un control
ctive 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 ctive incrementan la caacidad del rogramador de Visual Basic conservando
alguno
algunoss m0todos
m0todos%% roie
roiedade
dadess y evento
eventoss ya $amili
$amiliares
ares%% como
como la roied
roiedad
ad )ame% !ue se
comortan
comor tan como ca"ría eserar'
eserar' Aero% además%
además% los controles
controles ctive incororan
incororan m0todos y
roiedades !ue aumentan enormemente la $le)i"ilidad y caacidad del rogramador de Visual
Basic'
La tecnología ctive ermite a los rogramadores ensam"lar estos comonentes so$t+are
reutili/a"les en sus alicaciones'

Los controles ctive% !ue se llama"an antes controles OL(% son elementos estándar de
inter$a/ de usuario !ue nos ermiten ensam"lar ráidamente $ormularios y cuadros de diálogo'
Lo
Loss co
contr
ntrol
oles
es ct
ctiv
ive
e tam"
tam"i0
i0n
n da
dann vida
vida a &nte
&ntern
rnet%
et% ag
agreg
regand
ando
o un
una
a nu
nuev
eva
a y atrac
atractiv
tiva
a
$uncionalidad a las áginas del *orld *ide *e"'
* e"'
Visual Basic siemre ha resentado diversos controles !ue odíamos utili/ar en nuestras
alicaciones' hora odemos crear nuestros roios controles ara utili/arlos con Visual Basic
y otras herramientas de rogramaci#n'

6iseDar un control ctive uede resultar tan $ácil como diseDar un $ormulario de Visual Basic
odemos utili/ar los comandos grá$icos de Visual Basic con los !ue estamos $amiliari/ados
ara di"u,ar el control o "ien crear un gruo de controles con los controles e)istentes'
Los controles ctive 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
royecto de control ctive'
Visual Basic $acilita crear a!uetes de controles ctive er$eccionados al agregar a los
controles áginas de roiedades% constantes con nom"re y eventos'
Aodemos comilar nuestros controles ctive directamente en el archivo e,ecuta"le de nuestra
alicaci#n o en archivos 'oc)% !ue se ueden utili/ar con herramientas de rogramaci#n como
Visual Basic y @icroso$t Visual -..% con roductos ara el usuario $inal como @icroso$t O$$ice y
en &nternet'

Tios de comonentes ActiveD


()isten tres tios de comonentes ctive

• Controles ActiveD& Los controles


controles ctive
ctive son elementos
elementos estándar
estándar de inter$a/ 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
controles de usuario' Aor e,emlo% odríamos hacer una ca,a de te)to !ue controlara
controlara si los

caracteres introducidos
los decimales son num0ricos%
o de los millares% mostrando
y utili/arlo los n?meros introducidos
como el convencional te*tbo*' con la coma de

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 4G


Curso de Visual Basic Avanzado
Avanzado

• ActiveD (## ,li)rer3as-& Los comonentes ctive roorciona c#digo !ue se uede volver
a utili/ar en $orma de o",etos' ;na alicaci#n
alicaci#n  cliente uede crear un o",eto a artir de un
comonente ctive  servidor y utili/ar sus roiedades y m0todos' Los comonentes
ctive 6LL se e,ecutan dentro del esacio de direcciones del rograma !ue los utili/a'

• ActiveD EDE& ;n comonente ctive (( es muy similar a un comonente ctive 6LL'
La ?nica di$erencia es !ue un comonente ctive (( se e,ecuta en su roio esacio de
direcc
direccion
iones%
es% lo !ue ermite
ermite !ue el cliente uede e,ecutar un m0todo del comonente y
continuar con su e,ecuci#n mientras el comonente reali/a 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
ctive ' La ega es !ue gasta mas recursos% ues la comunicaci#n entre el cliente y el
servidor es más comle,a'

Creación din8mica de matrices


ay ocasiones en las !ue no conocemos a riori lo grande !ue de"e ser una matri/' Auede !ue
deseemos oder cam"iar el tamaDo de la matri/ en tiemo de e,ecuci#n'

;na matri/
matri/ dinámi
dinámica
ca se uede
uede cam"ia
cam"iarr de tamaDo
tamaDo en cual!ui
cual!uier
er momento
momento'' Las matrices
matrices
dinámicas son una de las características más $le)i"les y c#modas de Visual Basic% y nos
ayudan a administrar
administrar de $orma e$iciente
e$iciente la memoria'
memoria' Aor e,emlo%
e,emlo% odemos utili/ar una matri/
grande durante un tiemo corto y li"erar memoria del sistema cuando no necesite volver a
utili/ar la matri/'

La alternativa consiste en declarar la matri/ con el mayor tamaDo osi"le y asar or alto los
el
elem
ement
entos
os de la matri
matri// !u
!ue
e no neneces
cesititem
emos
os'' :in
:in em"a
em"arg
rgo%
o% es
esta
ta so
solu
luci
ci#n
#n%% si se ut
utilili/
i/a
a
demasiado% uede hacer !ue el sistema oerativo $uncione con muy oca memoria'

(l rimer aso en la creaci#n de una matri/ dinámica es su declaraci#n en un rimer momento%


la matri/ no tendrá ninguna dimensi#n'
dimensi#n' Aor e,emlo% la siguiente
siguiente sentencia de$ine un arra+ de
enteros% ero no eseci$ica cuántos elementos va a contener

6im &nt@atri/ s &nteger

Aara asignar el n?mero real de elementos utili/aremos la instrucci#n ReDim' Aor e,emlo% con
la siguiente sentencia ermitiremos !ue el arra+ anterior almacene 1G enteros

8e6im &nt@atri/ G o 9

La ininst
stru
rucc
cci#
i#n
n ReDim ued
uedee a
aar
arec
ecer
er sola
sola en un r roce
ocedi
dimie
mient
nto'
o'  didi$e
$ere
renc
ncia
ia de lalass
instrucciones Dim y Static% ReDim es una instrucci#n e,ecuta"le> hace !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 utili/a en las matrices $i,as' -ada ReDim
uede cam"iar el n?mero de elementos% así como los límites in$erior y suerior de cada
di
dime
mens
nsi#
i#n'
n' :i
:in
n em"ar
em"argo
go%% si la matri
matri// ha sido
sido de
decl
clar
arad
ada
a co
conn un n?n?mer
mero o de elemen
elemento
toss
determinado% no odremos utili/ar la sentencia Redim ara alterarlo' Aor e,emlo% si de$inimos
la matri/ anterior de esta $orma

6im &nt@atri/5 s &nteger

o odremos utili/ar osteriormente la sentencia Redim ara alterar su tamaDo'

Preservar el contenido de las matrices din8micas

-adamomento
ese ve/ !ue e,ecutamos
matri/la' Visual
en la matri/' instrucci#n resta"lse
BasicReDim
resta"leceerderán
ece todosallos
los valores valores
valor almacenados
Emt! en
en matrices

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 41


Curso de Visual Basic Avanzado
Avanzado

Variant% a cero en matrices num0ricas% a una cadena de longitud cero en matrices de
cadenas o a 6ot0in' en matrices de o",etos'

(sto resulta muy ?til cuando deseemos rearar la matri/ ara contener datos nuevos o
cuando deseemos reducir el tamaDo de la matri/ ara !ue ocue menos memoria' Auede !ue a
veces nos interese
interese cam"iar el tamaDo de la matri/ sin erder los datos de la misma' Aara ello
odemos utili/
utili/ar
ar ReDim con la ala"ra
ala"ra clave Preserve' Aor e,emlo% odemos amliar una
matri/ en un elemento sin erder los valores de los elementos e)istentes mediante la $unci#n
"0ound ara hacer re$erencia al límite suerior

8e6im Areserve &nt@atri/;Bound&nt@atri/ . 1

:#lo se uede cam"iar el límite suerior de la ?ltima dimensi#n de una matri/ multidimensional
cuando se utili/a la ala"ra clave Preserve> si cam"iamos alguna otra dimensi#n o el límite
in$erior de la ?ltima dimensi#n% se roducirá un error en tiemo de e,ecuci#n' sí ues%
odemos utili/ar un c#digo como el siguiente

8e6im Areserve &nt@atri/1G% ;Bound&nt@atri/% 2 . 1

Aero no odemos utili/ar este c#digo

8e6im Areserve &nt@atri/;Bound&nt@atri/% 1 . 1% 1G

Matrices de controles
Visual Basic ermite crear matrices de controles dinámicamente y situar los nuevos controles a
voluntad en un $ormulario' :uongamos !ue tenemos un control llamado @i-tl or e,emlo% un
ommand-utton ' Aara crear un nuevo control% utili/aríamos la sentencia

Load @i-tl

donde  es el índice del nuevo control' ;na ve/ creado% odemos situar el nuevo control en la
osici#n
osici #n !ue deseemos
deseemos esta"leciendo
esta"leciendo aroiadamente
aroiadamente su roiedad
roiedad To' y Le,t% y hacerlo
visi"le esta"leciendo a True la roiedad Visible'

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


;na ve/ creado el control ctive% hay !ue seguir los siguientes asos

1' Menerar el archivo


archivo 'O- corresondiente ! 'uardar el ro!ecto desu:s'
corresondiente

1' (,
(,ec
ecut
utar el Asistente ara instalar alicaciones.
ar el

1' :eleccionar
:eleccionar el royecto
royecto corresondiente
corresondiente al control ctive
ctive%% marcando la oci#n Instalación
ara trans%erencia desde Internet.

1' 6urant
6urantee el roceso
roceso de creaci
creaci#n
#n de los archivos
archivos%% eseci
eseci$ic
$icarem
aremos
os el directorio
directorio donde
donde se
crearán los archivos% así como el lugar desde donde el cliente !ue a"ra la ágina *e"
donde estará el control ctive "a,ará los archivos '-B de los comonentes de nuestro
control
control si es necesa
necesario
rio'
' am"i0n
m"i0n contes
contestar
taremos
emos a$i
a$irma
rmativ
tivame
amente
nte a la regun
reguntata de si
!ueremos incluir la 6LL de la ágina de roiedades necesario si !ueremos e,ecutar el
control desde $uera de Visual Basic% como es el caso'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 42


Curso de Visual Basic Avanzado
Avanzado

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 43


Curso de Visual Basic Avanzado
Avanzado

(l asistente nos creará rincialmente dos archivos con el nom"re del control ctive% uno con
e)tensi#n '-B !ue contiene el roio control y otros elementos utili/ados or 0l% si rocede y
otro con e)tensi#n '@ en el !ue se muestra un e,emlo de ágina @L !ue utili/a el control
ctive'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 44


Curso de Visual Basic Avanzado
Avanzado

%&em'lo 'ro'uesto

?)+etivo
(l o",etivo es crear un control ctive !ue simule el ,uego de las res en ra+a' ;na ve/ creado%
generaremos una ágina *e" donde egaremos el control con este e,emlo odemos ver la
otencia !ue tiene esta herramienta% ya !ue con el uso de un control odemos tener una
alicaci#n "astante comlicada corriendo detrás% siendo muy $ácil el imlantaci#n ara usos
osteriores'

(esarrollo del e+emlo


1 -rearemos un control ctive TresEnRa!a 
• 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 color% nom"reW% esecialmente
la roiedad Inde/=G va a ser el rimero de una matri/ de controles'

Proiedades
• StrTurno almacena el carácter corresondiente al turno actual TOU o TU
• Int6umeroHu'adas& recoge el n?mero de movimientos reali/ados
• M:todos
• Su) 2serControl@Initialize a artir de un ?nico "ot#n creado
creado en tiemo de diseDo
en el control ctive% generará una matrí/ ordenada de 3)3 "otones índices de G a
F'
Inicializarormulario& iniciali/ará el cation de los "otones% el turno y el
• Su) Inicializarormulario&
n?mero de ,ugadas'
• unction >a!TresEnRa!a,-
>a!TresEnRa!a,- As Boolean comro"ará cuando hay tres en raya% en
$unci#n
$unci#n del cation
cation de los "otones !ue es donde nos indica el ,ugador
,ugador !ue lo eligi#
O o '
• Su) ButCelda@C
ButCelda@Clic,In
lic,Inde/
de/ As Inte'er-&
Inte'er-& re
real
ali/
i/ar
ará
á to
todo
do el r
roc
oces
eso
o de
dell ,u
,ueg
egoo
comro"ar si hay tres en raya% comro"ar si el "ot#n ya ha sido ulsado% y en caso
contrario cam"iar el cation del mismo% comro"ar si se han marcado ya todas las
casillas% incrementar el n?mero de ,ugadas reali/adas'''

control% a"riremos un ro!ecto nuevo de tio (( estándar


2 ;na ve/ creado el control% estándar en el !ue
aDadiremos un $ormulario en "lanco ! nuestro ro!ecto TresEnRa!a' Aegaremos el control
res(n8aya% !ue aarecerá en la ca,a de herramientas% y deuraremos el control a"ierto como
royecto% ya !ue si no tendríamos !ue deurarlo e,ecutándolo directamente% y ara solucionar

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 45


Curso de Visual Basic Avanzado
Avanzado

un osi"le error volvernos al VB ara reali/ar la modi$icaci#n% recomilar y hacer 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 archivo


res(n8aya'oc)% 'uardaremos el ro!ecto y cerraremos Visual Basic'

1 (,ecutaremos el sistente ara instalar alicaciones y crearemos los $icheros necesarios


ara u"licar nuestro control en una ágina *e"'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 4=


Curso de Visual Basic Avanzado
Avanzado

%&em'lo resuelto

KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
 (,emlo 5 del -urso de Visual Basic van/ado
van/ado

 -#digo del control de 8(: ( 8<%
8<% $unciones necesarias ara el control de la artida
 y control de movimientos de los ,ugadores'
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
Otion ()licit

6im :trurno s :tring


6im &ntumeroJugadas s &nteger

Arivate :u" But-eldaK-licI&nde) s &nteger


&$ But-elda&nde)'-ation N v"ull:tring hen
 Aintamos la marca en la But-elda corresondiente
But-elda&nde)'-ation N :trurno

 -omro"amos si hay 3 en línea


&$ ayres(n8aya
ayres(n8aya hen
@sgBo) Xas ganadoY% v"OZOnly Or v"()clamation% res en 8aya
&niciali/arEormulario
()it :u"
(nd &$

 -am"iamos de :trurno
&$ :trurno N O hen
:trurno N 
(lse
:trurno N O
(nd &$

 -omro"amos si se han reali/ado todos los movimientos


 osi"les

&$ &ntumeroJugadas N 9 hen


&$ @sgBo)a ha"ido un emate' QHuieres ,ugar otra ve/R% v"<eso
v"<eso Or v"Huestion% res en
8aya N v"<es hen
&niciali/arEormulario
(nd &$
(nd &$

 &ncrementamos el n?mero de movimientos reali/ados


&ntumeroJugadas N &ntumeroJugadas . 1
(nd &$
(nd :u"

Arivate Eunction ayres(n8aya s Boolean


6im &nt&% &ntJ s &nteger

 Eilas hori/ontales
Eor &nt& N G o 2
&$ But-elda3 [ &nt&'-ation \ v"ull:tring nd K
But-elda3 [ &nt&'-ation N But-elda3 [ &nt& . 1'-ation nd K
But-elda3 [ &nt&'-ation N But-elda3 [ &nt& . 2'-ation hen
ayres(n8aya
ayres(n8a ya N rue
()it Eunction
(nd &$
e)t

 Eilas verticales
Eor &nt& N G o 2
&$ But-elda&nt&'-ation \ v"ull:tring nd K

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 4C


Curso de Visual Basic Avanzado
Avanzado

But-elda&nt&'-ation N But-elda3 . &nt&'-ation nd K


But-elda&nt&'-ation N But-elda= . &nt&'-ation hen
ayres(n8aya
ayres(n8a ya N rue
()it Eunction
(nd &$
e)t

 6iagonales
&$ But-eldaG'-ation \ v"ull:tring nd K
But-eldaG'-ation N But-elda4'-ation nd K
But-eldaG'-ation N But-eldaF'-ation hen
ayres(n8aya
ayres(n8a ya N rue
()it Eunction
(nd &$
&$ But-elda2'-ation \ v"ull:tring nd K
But-elda2'-ation N But-elda4'-ation nd K
But-elda2'-ation N But-elda='-ation hen
ayres(n8aya
ayres(n8a ya N rue
()it Eunction
(nd &$

ayres(n8aya
ayres(n8 aya N Ealse
(nd Eunction

Au"lic :u" &niciali/arEormulario


6im &nt& s &nteger

 Limiamos las celdas


Eor &nt& N G o F
But-elda&nt&'-ation N v"ull:tring
e)t

 &niciali/amos el :trurno
:trurno N 

 &niciali/amos el n?mero de movimientos


&ntumeroJugadas N 1
(nd :u"

Arivate :u" ;ser-ontrolK&nitiali/e


6im &nt&% &ntJ s &nteger

 -reamos los nuevos "otones


EorLoad
&nt& NBut-elda&nt&
1 o F
But-elda&nt&'Visi"le N rue
e)t

 -olocamos los "otones


Eor &nt& N G o 2
 -olocamos el "ot#n i/!uierdo de la $ila corresondiente
But-elda3 [ &nt&'o
&nt&'o N But-elda3 [ &nt&'o
&nt&'o . &nt& [ But-eldaG'eight

 -olocamos los dos "otones restantes de la $ila


Eor &ntJ N 1 o 2
But-elda3 [ &nt& . &ntJ'o
&ntJ'o N But-elda3 [ &nt&'o
&nt&'o
But-elda3 [ &nt& . &ntJ'Le$t N But-elda3 [ &nt& . &ntJ 7 1'Le$t . But-elda3 [ &nt& . &ntJ 7 1'*idth
e)t
e)t

 &niciali/amos el ta"lero
&niciali/arEormulario
(nd :u"

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 4F


Curso de Visual Basic Avanzado
Avanzado

. Acceso
Acceso a )ases de datos ,(A? ! Het-
Introducción

(n Visual Basic e)isten m?ltiles m0todos de acceso a "ases de datos' (n este caítulo% y en
los dos siguientes% se retende $amiliari/ar al lector con tres de los m0todos más utili/ados ara
acceso a "ases de datos% tanto locales como remotas' ;tili/ar uno u otro deende de nuestras
necesidades unos
datos e)ternas% m0todos!ue
mientras sonotros
más atos ara
aortan unalicaciones sencillas al
mayor rendimiento sinser
cone)i#n a "ases
utili/ados de
contra
servidores inteligentes como :HL :erver'

Vi
Visua
suall Basic
Basic roorc
roorcion
iona
a tam"i0
tam"i0nn un con,un
con,unto
to de control
controles
es enla
enlazad
zados datos como los
os a datos
contr
ontrol
oles
es D0-rid2 D0Combo2 D0List2 RemoteData'' '''
' !ue $a$aci
cililita
tan
n el acc
acceso
eso y el
rocesamiento de la in$ormaci#n almacenada en una "ase de datos' 6ichos controles no van a
ser tratados en este manual% or dos ra/ones
ra/ones la rimera
rimera ra/#n es !ue estos controles no nos
ermiten
ermit en de$inir su $uncionamient
$uncionamiento
o ara controlar
controlar c#mo acceden a la "ase de datos% lo !ue en
la mayoría de las ocasiones suele ser un re!uisito $undamental% y la segunda ra/#n es !ue una
ve/ asimile el lector los tres caítulos !ue vamos a resentar% no de"ería tener ning?n
ro"lema en ro$undi/ar or sí mismo% si $uera necesario% en su $uncionamiento'

(ste caítulo mostrará al lector en !u0 consiste y c#mo se utili/a el rimero de los m0todos de
acceso a datos% 6O 6ata ccess O",ects% ara acceder a "ases de datos locales a trav0s
del motor Jet' 6e $orma aralela se retende !ue el lector sea consciente de la venta,a del uso
de clases ara la reutili/aci#n del c#digo'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 49


Curso de Visual Basic Avanzado
Avanzado

Conocimientos teóricos

(A? ! Het
(l modelo 6O es una inter$a/ de rogramaci#n !ue osi"ilita un control total de la "ase de
datos' (s decir% 6O $acilita una colecci#n de clases de o",etos !ue roorcionan las
r
roi
oied
edad
ades
es y los
los m0to
m0todo
doss !u
!uee nos e
ermi
rmititirá
rán
n llev
llevar
ar a ca
ca"o
"o to
toda
dass la
lass o
oer
eraci
acion
ones
es
necesarias ara administrar una "ase de datos $unciones ara crear "ases de datos% de$inir
ta"las% camos e índices% esta"lecer relaciones entre las ta"las% desla/arse or la "ase de
datos y crear consultas so"re ella% etc'

(l motor
motor de "a
"ase
se de da toss Het convierte estas oeraciones% de$inidas so"re o",etos de
dato
acceso de datos% en oeraciones $ísicas !ue se e$ect?an directamente so"re los roios
archivos de las "ases de datos y !ue controlan todos los mecanismos de inter$a/ con las
distintas "ases de datos comati"les' ay tres categorías de "ases de datos !ue Visual
Basic reconoce a trav0s de 6O y del motor Jet
• Bases de datos nativas de Visual Basic a!uellas !ue utili/an el mismo $ormato !ue
Bases
@icroso$t ccess' (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/ternas las !ue utili/an el m0todo de acceso secuencial inde)ado
Bases
&:@%
de como
cálculo dB:( &&&()cel
de @icroso$t
% dB:( &V% @icroso$t Eo)Aro% Aarado)% archivos de te)to% ho,as
o Lotus% etc'
• Bases de datos ?(BC "ases de datos cliente7servidor !ue cumlen el estándar O6B-'
un!ue es osi"le tra"a,ar contra una "ase de datos utili/ando Jet y O6B-% e)isten
otros m0todos más recomenda"les !ue veremos en los e,emlos C y F'

Estructura de una alicación de )ases de datos en Visual )asic con (A?


! Het
;na alicaci#n de "ases de datos en Visual Basic !ue utili/a 6O y Jet consta de tres artes%
como se muestra en la siguiente $igura

(l inter$a/ 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 reali/a a trav0s del motor de "ase
de datos Jet ya !ue es a!uí donde están los m0todos y $unciones de acceso a "ase de datos'

(l motor de "ase de datos es un intermediario entre el inter$a/ de usuario y el almac0n de


datos% lo !ue ermite a"straer a la alicaci#n de la "ase de datos utili/ada% $acilitando la
reutili/aci#n del c#digo'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 5G


Curso de Visual Basic Avanzado
Avanzado

El modelo de o)+etos (A?


( A?
(l modelo de o",etos de acceso a datos es la inter$a/ orientada a o",etos del motor de "ase
de datos Jet' :e trata de una ,erar!uía de clases !ue corresonde a una visi#n l#gica de un
sistem
sistemaa de "ase
"ase de datos
datos rel
relaci
aciona
onall la "ase
"ase de datos
datos roiam
roiamentente
e dicha%
dicha% las ta"las
ta"las
de$inidas en ella y sus camos% índices% etc' (stas clases se utili/an 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 organi/an en una ,erar!uía% en la !ue la
mayoría de las clases ertenecen a una clase de colecci#n% !ue a su ve/ ertenece a otra
clase en la ,erar!uía' !uí se muestra la ,erar!uía comleta de 6O'

Pro'ramación con (A? ! Het


(n las siguientes líneas vamos a comentar c#mo rogramar una alicaci#n
alicaci#n !ue acceda
acceda a una
"ase de datos Jet a trav0s de 6O% e)licando las acciones más comunes !ue de"eremos
imlementar' ()isten muchas 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 mayoría'

:i rogramamos
1icroso,t con
DA+ 345 VisualLibrar!
+b&ect Basic' 5'G% es necesario incluir en el royecto una re$erencia a

-omo e,eml
-omo e,emlo
o vamos
vamos a util
utili/
i/ar
ar una
una "ase
"ase de dato
datoss cr
crea
eada
da en cccces
esss y gu
guar
arda
dada
da en
c/0bd0$i-1.mdb2' La "ase de datos contiene una sola ta"la% @ia"la% cuya estructura es la
siguiente

6om)re
6om )re del Tio
camo
6& e)to
om"re e)to
ellidos e
e)to
)to

hora veremos la estructura de un rograma en el !ue se mantiene esta "ase de datos'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 51


Curso de Visual Basic Avanzado
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!uía de los o",etos de
6O' (s ?nico or alicaci#n
alicaci#n no ueden crearse otros o",etos 6B(ngine'
6B(ngine' ;tili/aremos
;tili/aremos el
$or(s'ace es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 archivo

6im VarB6 as 6ata"ase


:et VarB6 N 6B(ngine'*orIsacesG'Oen6ata"aseTc]"d]@iB6'md"U

• 2tilización de Recordsets &

;n o",et
o",etoo Recordset reresenta los registros de una ta"la o los registros !ue resultan de
e,ecutar una consulta' (s análogo a los cursores utili/ados en otros lengua,es' ()isten varios
tios% cada uno de los cuales tiene sus venta,as e inconvenientes
• db+'enTable& tiene acceso a la "ase de datos directamen
directamente%
te% es decir%
decir% !ue tiene
acceso a la ta"la directamente' Las "?s!uedas son más ráidas !ue con otros tios
de Recordset% ero no ermite uniones ni uede ser utili/ado con otros modelos de
acceso a datos como 86O'
• db+'enSna'shot& contiene una coia $i,a de los datos tal y como e)isten en el
moment
mom entoo en el !ue se accedi
accedi#'
#' -onsume
-onsume menos
menos recurs
recursos
os !ue otr
otros
os Recordset
db+'enTable% db+'enD!naset % or lo !ue uede e,ecutar consultas y devolver
datos más ráidamente% so"re todo si utili/a O6B-' o es actuali/a"le% or lo !ue
no recoge los cam"ios !ue uedan reali/arse en la "ase de datos mientras se
utili/a% es #timo ara usos de lectura de datos'
• db+'enD!naset6 es un con,unto de re$erencias a los registros de una o más ta"las'
Los cam"ios reali/ados en la "ase de datos son automáticamente actuali/ados en
un Recordset de este tio' :in em"argo% las "?s!uedas son más lentas ya !ue las
acciones !ue se hacen no solo se e,ecutan en la memoria% si no !ue se re$le,an a la
ve/ en la "ase de datos'
• db+'enForward+nl!6 es un ti tio de Sna'shot en el !ue s#lo se ermite el
desla/amiento hacia 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 más ráido'

(n el siguiente cuadro se recogen los tios de Recordset !ue de"en utili/arse ara reali/ar las
acciones más comunes% de $orma !ue se ma)imice en la medida de lo osi"le el rendimiento
de la alicaci#n

Acción Recordset recomendado

-onsultar
&nsertar unlos datos nuevo
registro contenidos enta"la
en una una sola ta"la db+'enTable
db+'enTable
8ecorrer un Recordset utili/ando 1o1ove
ve)e
)e*t
*t db
db+'
+'en
enFo
Forw
rwar
ard+
d+n
nl!
Buscar un registro utili/ando Find db+'enSna'shot
Buscar un registro con Find y "orrarlo con Dele
Delete
te db+'enD!
db+'enD!nas
naset
et

Siemre hahayy !ue cerra


cerrarr los Recordsets a"iertos una ve/ de,en de ser ?tiles utili/ando el
m0todo Close' o cerrar un Recordset a"ierto
a"ierto uede suoner estar tra"a,ando
tra"a,ando con datos no
actuali/ados% no oder a"rir o cerrar transacciones% etc'

(n las siguie
siguientes
ntes líneas
líneas se e)onen
e)onen varios
varios e,emlos
e,emlos de uso de Recordsets utili/ando en
muchos casos sentencias esec3%icas de 6O ara acceder a "ases de datos Jet' (ste tio de
sentencias están ensadas ara el acceso a "ases de datos locales a trav0s del motor Jet% y
no de)en ser utili/adas ara acceder a servidores de "ases de datos no locali/ados en el
cliente es más% en ocasiones no ueden ser utili/adas $uera de este conte)to' :u utili/aci#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 6O con O6B-6irect o 86O% como veremos en los
siguientes e,emlos'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 52


Curso de Visual Basic Avanzado
Avanzado

E+emlos de utilización de Recordsets &

Aara insertar
insertar un registro
registro nuevo 6&NU12345=C
6&NU12345=CFU%
FU% om"reNUnas
om"reNUnastasioU
tasioU%% ellidos
ellidosNUA0re
NUA0re//
@artínU en la ta"la @ia"la
@ia"la

6im 8seta"la
8seta"la as 8ecordset

:et 8seta"la N VarB6'Oen8ecordsetT@ia"laU%d"Oena"le


*ith 8seta"la
'dde+
Y6& N T12345=CFU
Yom"re N TnastasioU
Yellidos N TA0re/ @artínU
';date
(nd *ith

Aara
Aara co
conta
ntarr el n?mer
n?mero
o de elem
elemen
ento
toss en la ta
ta"l
"la
a @i
@i
a"l
"la
a ut
utilili/
i/ar
aremo
emoss la r
roi
oied
edad
ad
RecordCount del Recordset 

6im 8seta"la
8seta"la as 8ecordset
6im um(lementos as integer

:et 8seta"la N VarB6'Oen8ecordsetT@ia"laU%d"Oena"le


um(lementos N 8seta"la'8ecord-ount
8seta"la'8ecord-ount

Aara
el m0mostrar en la antalla
todo 1ove)e*t de
d
Debu# los datos de cada registro de la ta"la T@ia"laU utili/aremos
el Recordset % !u
!ue
e o"
o"titien
ene
e el sigu
siguie
ient
nte
e re
regi
gist
stro
ro de
dell co
con,
n,unt
unto'
o'
ccederemos a los camos del registro utili/ando la sinta)is Recordset7Abierto8
)ombre7del7cam'o ' La roiedad %+F del Recordset nos indicará cuando se ha llegado al
$inal del con,unto de registros

6im 8seta"la
8seta"la as 8ecordset

:et 8seta"la
8seta"la N VarB6'Oen8ecordsetT@ia
VarB6'Oen8ecordsetT@ia"laU%d"OenEor+ardOnly
"laU%d"OenEor+ardOnly
*ith 8seta"la
6o ;ntil '(OE
6e"ug'Arint T6& U P Y6& P v"-8LE P K
Tom"re T P Yom"re P v"-8LE P K
Tellidos T P Yellidos
'@ovee)t
Loo
(nd *ith
Aara "uscar los datos del registro con 6&NU12345=CFU utili/aremos el m0todo FindFirst del
Recordset % !ue o"tiene el rimer re'istro del con,unto de registros del Recordset !ue cumle
una cierta
cierta condic
condici#n%
i#n% una ve/ encontra
encontrado
do el registr
registro
o mostra
mostrarem
remos
os los datos en el de)u''
;tili/aremos la roiedad )o1atch ara sa"er si se ha encontrado el registro "uscado% ya !ue
ser
eráá true si se ha llegado al $inal del recorset sin encontrar un regostro con los datos
eseci$icados

6im 8seta"la
8seta"la as 8ecordset

:et 8seta"la
8seta"la N VarB6'Oen8ecordsetT@ia
VarB6'Oen8ecordsetT@ia"laU%d"Oen:nashot
"laU%d"Oen:nashot
*ith 8seta"la
'EindEirst T6&N12345=CFU
&$ 'o@atch hen
6e"ug'Arint T8egistro no encontradoU
(lse
6e"ug'Arint T6& U P Y6& P v"-8LE P K
Tom"re T P Yom"re P v"-8LE P K

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 53


Curso de Visual Basic Avanzado
Avanzado

Tellidos T P Yellidos
(nd &$
(nd *ith

Aara
Aara "orrar
"orrar el registr
registro
o con 6&NU1
6&NU1234
2345=CF
5=CFUU utili/
utili/arem
aremos
os el m0todo
m0todo FindFirst y el m0todo
Delete del Recordset % !ue elimina el registro actual del con,unto de registros

6im 8seta"la
8seta"la as 8ecordset

:et 8seta"la
8seta"la N VarB6'Oen8ecordsetT@ia
VarB6'Oen8ecordsetT@ia"laU%d"Oen:nashot
"laU%d"Oen:nashot
*ith 8seta"la
'@oveLast
'EindEirst T6&N12345=CFU
&$ ot 'o@atch hen '6elete
(nd *ith

emos visto los m0todos de acceso a registros% ahora veremos los m0todos de movimiento
dentro del recodset% el uso es similar a los de acceso a los registros% or eso s#lo los
enunciaremos
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& os vamos al siguiente registro al !ue nos encontremos'
MovePrevious& 8etrocedemos un registro en el recordset'
Move Jn& van/amos 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 hora de


desla/arnos% ya !ue el acceso a una osici#n !ue no est0 dentro del recordset roduciría un
error en tiemo de e,ecuci#n'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 54


Curso de Visual Basic Avanzado
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 est0n
ahora almacenados en una "ase de datos'

La alicaci#n se diseDará en tres caas


• 3nterfaz de usuario Ermgenda caa !ue ermite al usuario interactuar con el rograma
id0ntico al utili/ado en la agenda !ue ya tenemos'
• la
lase a4enda -lagenda caa intermedia entre el inter$a/ de usuario y la clase de
se a4enda
acceso a la "ase de datos'
• -lase de acceso a la base de datos -la6OKJet 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 6O con Jet% 6O con O6B-6irect o 86O 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,o

(l o",etivo es aislar cada caa de la imlementaci#n de las demás% de $orma !ue las caas
in
in$e
$eri
rior
ores
es ueda
sueriores⊗
ue
' (ndan
n ser cam"i
cael
articular% m"iad
adas
as sin
o",etivo si!ue
n !u
!ue
seeretende
las modi$
moden
i$ic
icaci
acion
esteones
es re
reer
ercu
e,emlo y cuta
lostan
n en
dos la
lass ca
caa
siguientesas
ess
crear una caa de acceso a la "ase de datos di$erente en cada e,emlo% ero utili/ando el
mismo inter$a/ 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 Ordovás Oromendía y Vicente Lema Osca 55


Curso de Visual Basic Avanzado
Avanzado

(esarrollo del e+emlo


-rearemos la "ase de datos ara la agenda "dgenda'md" en ccess% !ue contendrá una
?nica ta"la A'enda cuya ar!uitectura se muestra en la ta"la siguiente

Camo Tio Proiedades


umE
umEic
icha
ha u
uto
tonu
num0
m0ri
rico
co -am
-amoo clav
clave
e
 om"re
ellidos e)to
e)to
e)to
6ireccion e)to
ele$ono e)to

(l lector utili/ará los siguientes elementos 


• laFicha ya de$inida en anteriores e,emlos'


• $od1efiniciones m#dulo con las de$iniciones utili/adas en la alicaci#n'
• Frm)4enda  $ormulario corresondiente a la caa de inter$a/'

6esarrollaremos la clase corresondiente a la caa de agenda -lagenda' -ontendrá un


o",eto rivado O",ccesoB6% de tio -la6OKJet% a trav0s del cual odrá interactuar con la
"ase de datos' (sta clase roorcionará los siguientes m0todos

• Pu)lic Proert! "et Int6umic0as,- As Inte'er  @0todo ara o"tener el n?mero de $ichas
de la agenda' Llamará al m0todo umEichas del o",eto O",ccesoBd'

• 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  @0todo ara
crear una $icha nueva en la agenda' -reará un o",eto de la clase -laEicha y se lo asará al
m0todo MuardarEicha del o",eto O",ccesoB6'

• Pu)lic unction Borraric0a,B!Val Int6umic0a As Inte'er-  @0todo ara "orrar una


$icha de la agenda' ;tili/ará el m0todo BorrarEicha del o",eto O",ccesoB6'

• Pu)lic
Pu)l ic u
unc
ncti
tion
on i
ic0
c0a,
a,?
?ti
tion
onal
al B!Va
B!Vall IntI
IntInd
ndic
icee As InteInte'e
'err$ ?
?tio
tiona
nall B!
B!Va
Vall
Int6umic0a As Inte'er- As Claic0a  @0todo ara o"tener una $icha esecí$ica de la
agenda% ya sea or índice o or n?mero de $icha' ;tili/ará el m0todo O"tenerEicha del
o",eto O",ccesoB6'

• Class@Terminate,- l eliminar la agenda es necesario cerrar la "ase de datos


Private Su) Class@Terminate,-
y eliminar el o",eto O",ccesoB6'
6esarrollaremos tam"i0n la clase corresondiente a la caa de acceso a la "ase de datos% !ue
utili/ará 6O y Jet -la6OKJet' (sta caa roorcionará los siguientes m0todos

Pu)lic Proert! "et 6umic0as,- As Inte'er  @0todo ara o"tener el n?mero de $ichas de
la ta"la genda'

Codi'oRetorno @0todo ara a"rir la "ase de datos'


Pu)lic unction A)rirA'enda,- As Codi'oRetorno

Pu)lic unction
Pu)lic unction CerrarA'
CerrarA'enda,-
enda,- As Codi'oRet
Codi'oRetorno
orno @0todo ara cerrar la "ase de
datos'

 :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
demás caas'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 5=


Curso de Visual Basic Avanzado
Avanzado

Pu)lic
Pu)lic u
unc
ncti
tion
on "uar
"uarda
dar
ric
ic0a
0a,B
,B!V
!Val
al ?)+
?)+ic
ic0a
0a As Cla
Claic
ic0a
0a$$ ?
?ti
tion
onal
al B!Re
B!Re%%
Int6umic0a As Inte'er- As Codi'oRetorno @0todo ara guardar una $icha' 6evuelve el
n?mero de $icha asignado or la "ase de datos como camo autonum0rico'

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  @0todo ara
o"tener una $icha esecí$ica de la ta"la genda' Aermite "uscar or índice o or n?mero de
$icha'

Pu)lic unction
Pu)lic unction Borraric
Borraric0a,B!
0a,B!Va
Vall Int6umic0
Int6umic0a-
a- As Codi'oRetorno @0to
Codi'oRetorno @0todo
do ara
ara
"orrar una $icha de la ta"la genda'

Private Su) Class@Initia


Private lize,- l crea
Class@Initialize,- crearr un o"
o",e
,eto
to de es
esta
ta clas
clase%
e% de
de"e
"e de llam
llamar
arse
se
automáticamente a su corresondiente m0todo "rirgenda'

:eguiremos unas normas sencillas


:eguiremos sencillas ,unto con unos comentarios
comentarios "reves% claros y concisos
concisos !ue
$acilitarán la osterior comrensi#n del rograma'

odos los m0todos de la clase de acceso a la "ase de datos incluirán al comien/o 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' demás% todas las $unciones
devolverán un c#digo de retorno eseci$icado or el tio Códi'oRetorno de$inido en el m#dulo
@od6e$iniciones% !ue determinará si han odido reali/ar correctamente su $unci#n'

Los m0todos de la clase de acceso a la "ase de datos utili/arán el motor Jet ara acceder a la
"ase de datos% a trav0s de las $unciones !ue 6O roorciona'

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 5C


Curso de Visual Basic Avanzado
Avanzado

%&em'lo resuelto

;tili/aremos la clase Claic0a ya de$inida'

Mod(e%iniciones
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
 (,emlo = del -urso de Visual Basic van/ado
van/ado

 rchivo con el estándar de devoluci#n de las $unciones'
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

Otion ()licit

Au"lic (num -odigo8etorno


(rror N G
OI N 1
(nd (num

rmA'enda
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
 (,emlo = del -urso de Visual Basic van/ado
van/ado

 &nter$a/ del usuario con la "ase de datos% a!uí están los m0todos de mantenimiento de
 la "ase de datos'
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

Otion ()licit

6im O",genda s e+ -lagenda


6im &ntumEichactual s &nteger

Arivate :u" ButBorrarEichaK-licI

 -on$irmamos el "orrado
&$ @sgBo)Q6esea eliminar la $icha actualR% v"<eso%
v"<eso% Borrado de $icha N v"o hen
()it :u"
(nd &$
 Borramos la $icha actual
O",genda'BorrarEicha &ntumEichactual

 ctuali/amos el n?mero de elementos de la "arra de scroll


&$ O",genda'&ntumEichas  G hen
:croll1'@a) N O",genda'&ntumEichas 7 1
(lse
:croll1'@a) N G
(nd &$

 ctuali/amos la "arra de scroll


ctuali/arEormulario

(nd :u"

Arivate :u" But-rearEichaK-licI

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 5F


Curso de Visual Basic Avanzado
Avanzado

 -reamos una nueva $icha con


con los datos introducidos
introducidos or el
 usuario%
usuario% y o"tenemos el c#digo de la $icha creada
&ntumEichactual N O",genda'-rearEicha)tom"re% )tellidos% )t6ireccion% K
)tele$ono

 -omro"amos si no ha odido insertar una nueva $icha% lo !ue


 sucederá si &ntumEichactualNG
&$ &ntumEichactual N G hen
 6ecrementamos el n?mero de elementos de la "arra de
 scroll
:croll1'@a) N :croll1'@a) 7 1

 ctuali/amos el $ormulario
ctuali/arEormulario
()it :u"
(nd &$

 ctuali/amos el título del $rame


Erame1'-ation N Eicha  P &ntumEichactual

 6esha"ilitamos el "ot#n de crear $icha y el $rame


But-rearEicha'(na"led N Ealse
Erame1'(na"led N Ealse

 a"ilitamos los "otones de nueva $icha y "orrar


ButuevaEicha'(na"led
$icha% así como la "arra Nderue
scroll
ButBorrarEicha'(na"led N rue
:croll1'(na"led N rue
(nd :u"

Arivate :u" ButuevaEichaK-licI


6im &ntumEichas s &nteger

 ctuali/amos la "arra de scroll


&ntumEichas N O",genda'&ntumEichas
&$ &ntumEichas N G hen
 -on la rimera $icha creada% ha"ilitamos
 la "arra de scroll
:croll1'(na"led N rue
Erame1'(na"led N rue
(lse
 (sta"lecemos el n?mero de elementos de
 la "arra de scroll
:croll1'@a) N :croll1'@a) . 1
:croll1'Value
:croll1'Value N :croll1'@a)
(nd &$

 a"ilitamos el "ot#n de crear $icha y el $rame


But-rearEicha'(na"led N rue
Erame1'(na"led N rue

 6esha"ilitamos los "otones de nueva $icha y "orrar


 $icha% así como la "arra de scroll
ButuevaEicha'(na"led N Ealse
ButBorrarEicha'(na"led N Ealse
:croll1'(na"led N Ealse
(nd :u"

Arivate :u" EormKLoad

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 59


Curso de Visual Basic Avanzado
Avanzado

6im &ntumEichas s &nteger

 -omro"amos si no hay datos en la agenda ara


 desha"ilitar las ociones
&ntumEichas N O",genda'&ntumEichas
&$ &ntumEichas N G hen
 6esha"ilitamos el $rame% la "arra de scroll%
 el "ot#n de crear $icha y el "ot#n de "orrar $icha
Erame1'(na"led N Ealse
:croll1'(na"led N Ealse
But-rearEicha'(na"led N Ealse
ButBorrarEicha'(na"led N Ealse

 (sta"lecemos los límites de la "arra de scroll


:croll1'@a) N G
(lse
 (sta"lecemos el má)imo de la "arra de scroll
:croll1'@a) N &ntumEichas 7 1

 ctuali/amos el $ormulario
ctuali/arEormulario
(nd &$
(nd :u"

Arivate :u" EormK;nload-ancel s &nteger


 (liminamos
:et la agenda
O",genda N othing
(nd :u"

Arivate :u" :croll1K-hange


 ctuali/amos la "arra de scroll
ctuali/arEormulario
(nd :u"

Arivate Eunction ctuali/arEormulario


6im O",Eicha s -laEicha

 -omro"amos si no hay $ichas o estamos creando una $icha nueva


&$ :croll1'@a) N O",genda'&ntumEichas hen
 Limiamos los datos del $rame
)tom"re N v"ull:tring
)tellidos NN v"ull:tring
)t6ireccion v"ull:tring
)tele$ono
)tele$ono N v"ull:tring

 ctuali/amos el título del $rame


Erame1'-ation N v"ull:tring

 6esha"ilitamos el "ot#n de "orrado


ButBorrarEicha'(na"led N Ealse
(lse
 O"tenemos la $icha corresondiente de la agenda
 "uscamos or índice% no or c#digo de $icha
:et O",Eicha N e+ -laEicha
:et O",Eicha N O",genda'Eicha:croll1'Value
O",genda'Eicha:croll1'Value . 1

 :acamos los datos de la $icha


&$ ot O",Eicha &s othing hen
)tom"re N O",Eicha':trom"re
)tellidos N O",Eicha':trellidos

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca =G


Curso de Visual Basic Avanzado
Avanzado

)t6ireccion N O",Eicha':tr6ireccion
)tele$ono N O",Eicha':trele$ono
O",Eic ha':trele$ono

 ctuali/amos el c#digo de la $icha actual


&ntumEichactual N O",Eicha'&ntumEicha

 (liminamos el o",eto $icha creado


:et O",Eicha N othing

 ctuali/amos el $rame
Erame1'-ation N Eicha  P &ntumEichactual
(nd &$
(nd &$
(nd Eunction

ClaA'enda
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
 (,emlo = del -urso de Visual Basic van/ado
van/ado

 @0todos ara acceder a los m0todos de la clase% !ue serán los !ue tienen a
acceso
cceso a la
 "ase de datos'
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

Otion ()licit

Arivate O",ccesoB6 s e+


e+ -la6OKJet O",eto de acceso a la "ase de datos

 @0todo ara o"tener el n?mero de $ichas de la agenda


Au"lic Aroerty Met &ntumEichas s &nteger
&ntumEichas N O",ccesoB6'umEichas
(nd Aroerty

 @0todo ara crear una $icha nueva en la agenda


Au"lic Eunction -rearEichaByVal :trom"re s :tring% K
ByVa
ByVall :trellidos s :tring% ByVal
ByVal :tr6ireccion s :tring% K
ByVal :trele$ono s :tring
:tring  s &nteger
&ntege r
:tatic &ntumEicha s &nteger
6im O",Eicha s -laEicha

 -reamos un nuevo o",eto de la clase $icha


:et O",Eicha N e+ -laEicha

 (sta"lecemos las roiedades de la nueva $icha


O",Eicha':trom"re N :trom"re
O",Eicha':trellidos N :trellidos
O",Eicha':tr6ireccion N :tr6ireccion
O",Eich
O",Eicha':trele$ono
a':trele$ono N :trele$ono

 &nsertamos la nueva $icha en la "ase de datos


&$ O",ccesoB6'MuardarEichaO",Eicha% &ntumEicha N OI hen
 6evolvemos el c#digo de la $icha creada
-rearEicha N &ntumEicha
(lse
 6evolvemos G% or!ue es un valor !ue nunca aarecerá
 en un camo autonum0rico
-rearEicha N G
@sgBo) &mosi"le agregar una nueva $icha
(nd &$

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca =1


Curso de Visual Basic Avanzado
Avanzado

 (liminamos el o",eto Eicha creado


:et O",Eicha N othing
(nd Eunction

 @0todo ara "orrar una $icha de la agenda


Au"lic Eunction BorrarEichaByVal &ntumEicha s &nteger
6im O",Eicha s -laEicha

&$ O",ccesoB6'BorrarEicha&ntumEicha N (rror hen


@sgBo) &mosi"le "orrar la $icha n^  P &ntumEicha
(nd &$

(nd Eunction

 l eliminar la agenda% cerraremos la "ase de datos y


 eliminaremos el o",eto de acceso a la "ase de datos
Arivate :u" -lassKerminate
-lassKerminate
&$ O",ccesoB6'-errargenda N (rror hen
@sgBo) &mosi"le cerrar la agenda
(nd &$
:et O",ccesoB6 N othing
(nd :u"

 @0todo ara o"tener una $icha esecí$ica de la agenda% ya sea


 or índice o or n?mero de $icha
 O la $unci#n crea un nuevo o",eto Eicha% !ue ha"rá
ha "rá !ue
 eliminar en la $unci#n de llamada
Au"lic Eunction EichaOtional ByVal &nt&ndice s &nteger% K
Otional ByVal
ByVal &ntumEicha s &nteger s -laEicha
6im O",Eicha s e+ -laEicha

 -omro"amos si se "usca or índice


&$ ot &s@issing&nt&ndice hen
&$ O",ccesoB6'O"tenerEichaO",Eicha% &nt&ndice N (rror hen
@sgBo) &mosi"le o"tener la $icha de la osici#n n^  P &nt&ndice
()it Eunction
(nd &$
(lse&$ ot &s@issing&ntumEicha hen
&$ O",ccesoB6'O"tenerEichaO",Eicha% % &ntumEicha N (rror hen
@sgBo) &mosi"le o"tener la $icha n^  P &ntumEicha
()it Eunction
(nd &$
(nd &$
:et Eicha N O",Eicha
:et O",Eicha N othing
(nd Eunction

Cla(A?@Het
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
 (,emlo = del -urso de Visual Basic van/ado
van/ado

 -lase de acceso a "ases
"ase s de datos utili/ando 6O y
 $unciones (-L;:&V: de Jet
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca =2


Curso de Visual Basic Avanzado
Avanzado

Otion ()licit

Arivate VarB6 s 6ata"ase


Arivate VarAathB6 s :tring
Arivate -onst -onom"rea"la
-onom"rea"la N genda

Au"lic Aroerty Met umEichas s &nteger


On (rror Moo ratamiento(rror
6im 8seta"la
8seta"la s 8ecordset

 "rimos un recordset de tio d"Oenta"le


:et 8seta"la N VarB6'Oen8ecordse
VarB6'Oen8e cordset-ono
t-onom"rea"la%
m"rea"la% d"Oena"le

 O"tenemos el n?mero de elementos


umEichas N 8seta"la'8ecord-ount
8seta"la'8ecord-ount

 -erramos el 8ecordset
8seta"la'-lose

()it Aroerty

ratamiento(rror
umEichas N 71
(nd Aroerty

Au"lic Eunction
On (rror Moo "rirgenda s -odigo8etorno
ratamiento(rror

 "rimos la "ase de datos% utili/ando el *orIsace


 or de$ecto
:et Va
VarB6
rB6 N 6B(ngine'*orIsacesG'Oen6ata"aseVarAathB6
6B(ngine'*orIsacesG'Oen6ata"aseVarAathB6

"rirgenda N OI
()it Eunction

ratamiento(rror
"rirgenda N (rror
(nd Eunction

Au"lic Eunction -errargenda s -odigo8etorno


On (rror Moo ratamiento(rror

 -erramos la "ase de datos


VarB6'-lose

-errargenda N OI
()it Eunction

ratamiento(rror
-errargenda N (rror
(nd Eunction

Au"lic Eunction MuardarEichaByVal O",Eicha s -laEicha% K


Otional By8e$ &ntumEicha s &nteger s -odigo8etorno
On (rror Moo ratamiento(rror
6im 8seta"la
8seta"la s 8ecordset

 "rimos un recordset de tio d"Oena


d"Oena"le
"le s#lo $unciona
 en Jet
:et 8seta"la N VarB6'Oen8ecordse
VarB6'Oen8e cordset-ono
t-onom"rea"la%
m"rea"la% d"Oena"le

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca =3


Curso de Visual Basic Avanzado
Avanzado

*ith 8seta"la
 Dadimos una nueva $icha
'dde+
Yom"re N O",Eicha':trom"re
Yellidos N O",Eicha':trellidos
Y6ireccion N O",Eicha':tr6ireccion
Yele$ono N O",Eicha':trele$ono
O",Eic ha':trele$ono

 O"tenemos el camo umEicha


&ntumEicha N YumEicha
';date
(nd *ith

 -erramos el recordset
8seta"la'-lose

MuardarEicha N OI
()it Eunction

ratamiento(rror
MuardarEicha N (rror
(nd Eunction

Au"lic Eunction O"tenerEichaBy8e$ O",Eicha s -laEicha% K


Otional ByVal
ByVal &nt&ndice s &nteger% K
Otional ByVal
ByVal &ntumEicha s &nteger s -odigo8etorno
On (rror Moo ratamiento(rror
6im 8seta"la
8seta"la s 8ecordset

 -omro"amos si hay !ue "uscar or índice


&$ ot &s@issing&nt&ndice hen
 "rimos un recordset de tio d"OenEor+ardOnly% ara oder
 movernos con @ovee)t lo a"rimos Eor+ardOnly or!ue s#lo
 necesitamos desla/arnos hacia delante
:et 8seta"la
8seta"la N VarB6'Oen8ecordset-onom"rea
VarB6'Oen8ecordset-onom"rea"la%
"la% d"OenEor+ardOnly

 8ecorremos el 8ecordset hasta encontrar la $icha indicada


*ith 8seta"la
6o ;ntil '(OE
&$ '8ecord-ount N &nt&ndice hen

(nd()it
&$ 6o
'@ovee)t
Loo
(nd *ith
 -omro"amos
-omro"amos si hay !ue "uscar or or n?mero de $icha
(lse&$ ot &s@issing&ntumEicha hen
 "rimos un recordset de tio d"Oen:nashot% ara oder
 "uscar con EindEirst
:et 8seta"la
8seta"la N VarB6'Oen8ecordset-onom"rea
VarB6'Oen8ecordset-onom"rea"la% "la% d"Oen:nashot
*ith 8seta"la
 Llenamos el 8ecordset
'@oveLast

 (ncontramos el rimer registro con ese n?mero


'EindEirst umEichaN P &ntumEicha
(nd *ith
(nd &$

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca =4


Curso de Visual Basic Avanzado
Avanzado

 -omro"amos
-omro"amos si la hemos encontrado%
encontrado% o hemos llegado
llegado al
 $inal del 8ecordset sin encontrarla
*ith 8seta"la
&$ '(OE Or 'o@atch N rue hen
O"tenerEicha N (rror
(lse
 Muardamos los datos o"tenidos
O",Eicha':trom"re N Yom"re
O",Eicha':trellidos N Yellidos
O",Eicha':tr6ireccion N Y6ireccion
O",Eicha':trele$ono
O",Eich a':trele$ono N Yele$ono
O",Eicha'&ntumEicha N YumEicha
O"tenerEicha N OI
(nd &$
(nd *ith

 -erramos el 8ecordset
8seta"la'-lose

()it Eunction

ratamiento(rror
O"tenerEicha N (rror
(nd Eunction

Au"lic Eunction BorrarEichaByVal


BorrarEichaByVal &ntumEicha s -odigo8etorno
On (rror Moo ratamiento(rror

6im 8seta"la s 8ecordset

 "rimos un recordset de tio d"Oen6ynaset% ara oder


 "uscar con EindEirst y "orrar con 6elete
:et 8seta"la
8seta"la N VarB6'Oen8ecordset-onom"rea
VarB6'Oen8ecordset-onom"rea"la%"la% d"Oen6ynaset

 Buscamos la $icha corresondiente


*ith 8seta"la
 Llenamos el 8ecordset
'@oveLast

 (ncontramos el rimer registro con ese n?mero


'EindEirst umEichaN P &ntumEicha

 -omro"amos si hemos encontrado alg?n registro


&$ 'o@atch hen
BorrarEicha N (rror
(lse
 Borramos la $icha o"tenida
'6elete
BorrarEicha N OI
(nd &$

 -erramos el 8ecordset
'-lose
(nd *ith

BorrarEicha N OI
()it Eunction

ratamiento(rror
BorrarEicha N (rror

󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca =5


󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca

Curso de Visual Basic Avanzado


Avanzado

(nd Eunction

Arivate :u" -lassK&nitiali/e


 (sta"lecemos el ath donde está el archivo de
 la "ase de datos
VarAathB6
Va rAathB6 N 'Aath P ]"dgenda'md"

 "rirmos la "ase de datos


"rirgenda
(nd :u"

==
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca

Curso de Visual Basic Avanzado


Avanzado

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


Introducción

asta ahora hemos e)licado c#mo odemos acceder a una "ase de datos en local a trav0s
del motor Jet' (n este caítulo
caítulo y en el siguiente
siguiente mostraremos
mostraremos c#mo se uede acceder a un
servidor de "ases de datos'
l tra"a,ar con "ases de datos locali/adas en un servidor odemos di$erenciar dos m0todos
de tra"a,o% deendiendo de la locali/aci#n del motor de "ase de datos
• clienteLservidor& el motor de "ase de datos está en el servidor'
ser vidor'
• remota& el motor está en el cliente

ormalmente se utili/a el modelo cliente7servidor ara acceder a "ases de datos locali/adas


en un servidor% ya !ue aorta "astantes venta,as
• Oeraciones más $ia"les y ro"ustas% uesto !ue e)iste un ?nico servidor de "ase de
datos !ue interact?a con todos los clientes'
• ota"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'
• 8educci#n del trá$ico de la red gracias a una transmisi#n de datos más e$iciente' :#lo se
trans$ieren los datos !ue la alicaci#n necesita'
• -aracterísticas críticas como los registros de transacciones% las caacidades de coia de
segur
segurid
idad
ad cocom
mle
le,a
,as%
s% las
las matri
matrices
ces de disc
discos
os re
redu
dund
ndan
antes
tes y lalass he
herr
rram
amie
ient
ntas
as de
recueraci#n de $allos'

La $orma más com?n de acceder a un servidor de "ases de datos es a trav0s de O6B-'


O6B- es una caa intermedia entre las alicaciones !ue se e,ecutan en el cliente y el
servido
serv idorr de "ases
"ases de datos'
datos' (l control
controlador
ador O6B- del client
cliente
e reci"e
reci"e eticion
eticiones
es de la
alicaci#n% las traduce a eticiones O6B- y las envía al servidor' (l servidor resonde al
controlador O6B- del cliente% y 0ste asa la resuesta a la alicaci#n' La venta,a de usar
O6B- es la indeendencia del :MB6 :istema Mestor de Bases de 6atos utili/ado%
udiendo cam"iar 0ste reali/ando cam"ios mínimos en el c#digo de la alicaci#n'

=C
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca

Curso de Visual Basic Avanzado


Avanzado

Conocimientos teóricos

?ciones de utilización de ?(BC con (A?


( A?
()isten dos $ormas de acceder a orígenes de datos remotos utili/ando 6O

• HetL?(BC utili/a el motor Jet ara acceder al :MB6'

• ?(BC(irect no utili/a el motor Jet' (n realidad no es más !ue un inter$a/ 6O con
las "i"liotecas de 86O% lo !ue ermite un rendimiento mayor !ue al utili/ar Jet7
O6B- con la ega de !ue no uede utili/ar todas las características de Jet'

Estructura de una alicación de )ases de datos en Visual )asic con (A?


! ?(BC(irect
;na alicaci#n de "ases de datos en Visual Basic !ue utili/a 6O y O6B-6irect se comunica
con el :MB6 a trav0s del controlador O6B- corresondiente% como se muestra en la $igura

Pro'ramación con (A? ! ?(BC(irect


(n las siguientes líneas vamos a comentar c#mo rogramar una alicaci#n
alicaci#n !ue acceda
acceda a una
"ase de datos a trav0s de 6O y O6B-6irect% e)licando las acciones más comunes !ue
de"eremos imlementar' l igual !ue en el caítulo anterior% e)isten muchas 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 utili/aremos la "ase de datos descrita en el caítulo anterior' Aara acceder a
di
dich
cha
a "a
"ase
se de da
datos
tos nece
necesi
sita
tamos
mos crea
crearr un 6:
6: 66at
ata
a :ourc
:ourcee ame
ame dedesd
sde
e Pan
Panel
el de
Control ?(BC 4* )its% !ue llamaremos @i6:'

Varia)les
Varia)les utilizadas&

(n los siguientes e,emlos utili/aremos


utili/aremos dos varia"les%
varia"les% Var*Is
Var*Is y Va
Var-one)
r-one)ion%
ion% ara de$inir
de$inir el
esacio de tra"a,o y la cone)i#n con el :MB6% resectivamente' demás% ara esta"lecer la
cadena de cone)i#n O6B- utili/aremos la constante -on-adena-one)ion

=F
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca

Curso de Visual Basic Avanzado


Avanzado

6im Var*Is s *orIsace


6im Var-one)ion s -onnection
6im -onst -on-adena-one)ion N O6B->6B:(N@iB6
O6B->6B:(N@iB6>;&6N>A*6N>6:N@i6:
>;&6N>A*6N>6:N@i6:

Cone/ión con el S"B(&

Arimero necesitamos crear un esacio de tra"a,o esecí$ico ara O6B- utili/ando la sentencia
Create$or(s'ace ' ;na ve/ creado% esta"leceremos la cone)i#n con el :MB6 utili/ando el
m0todo +'enConnection de dicho esacio de tra"a,o'

:et Var*Is
Var*Is N -reate*orIsace% % % d";seO6B-
:et Var-one)ion N Var*Is'Oen-onnection% % % -on-adena
-on-adena-one)ion
-one)ion

2tilización de Recordsets&

Los Recordsets creados con O6B-6irect son% en realidad% Resultsets de 86O' La $orma de
tra"a,ar
tra"a,ar con estos Recordsets será crear la consulta :HL !ue genere el con,unto de registros
"uscado y asársela al m0todo +'enRecordset de la cone)i#n creada'

E+emlos de utilización de Recordsets &

Aara sacar en la antalla Debu# los datos de cada registro de la ta"la T@ia"laU utili/aremos el
m0tod
m0t odo
o +'enRecordset de la cone)i#n% asándole la consulta :HL !ue o"tiene todos los
datos de la ta"la' Aara acceder a cada uno de los camos del registro actual% utili/aremos la
colecci#n Fields del Recordset% !ue contiene todos los camos del registro actual'

6im 8set6atos s 8ecordset

:et 8set6atos N Var-one)ion'Oen8ecordsetselect


Var-one)ion'Oen8ecordsetselect [ $rom @ia"la

*ith 8set6atos
6o *hile ot '(OE
6e"ug'Arint T6& U P 'EieldsG'Value P v"-8LE P K
Tom"re T P 'Eields1'Value P v"-8LE P K
Tellidos T P 'Eields2'Va
' Eields2'Value
lue
'@ovee)t
Loo
(nd *ith

Sentencias ue no devuelven datos&

-uando
de regist!ueremos
registros
ros in
inserreali/ar
sert% unadelete
t% udate%
udate% acci#n
delete%% so"re
etc lali/arem
etc utili/
uti "ase de
os datos
aremos !ue
el m0todo
m0t odono %*ecute
devuelve de
ning?n con,unto
la cone)i#n%
a
asá
sánd
ndol
ole
e la sent
sentenc
encia
ia :HL
:HL a e,ecu
e,ecutatar'
r' Aara
Aara deter
determi
mina
narr si la acci#
acci#n
n se ha rereal
ali/
i/ado
ado
correctamente% consultaremos la roiedad RowsA,ected de la cone)i#n'

E+emlos de e+ecución de sentencias ue no devuelven datos&

Aor e,emlo% si !ueremos eliminar el registro con 6&NU12345=CFU

Var-one)ion'()ecute delete $rom


Var-one)ion'()ecute $ rom @ia"la +here 6&N_12345=CF_U
&$ Var-one)ion'8ecords$$ected
Var-one)ion'8ecords$$ected N 1 hen
@sgBo) T8egistro "orradoU
(lse
@sgBo) T(rror al "orrar el registroU
(nd &$

=9
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca =9

Curso de Visual Basic Avanzado


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
e,eml o anterior ara !ue utilice
utilice 6O y O6B-6irect
O6B-6irect en lugar de Jet ara acceder a la misma
"ase de datos% ero a trav0s de O6B-'

(esarrollo del e+emlo


-rearemos un 6: ara la "ase de datos se llamará TgendaU% y cam"iaremos la clase
-la6OKJet or otra clase -la6OKO6B-6irect% !ue constará de los mismos m0todos% ero
utili/ará O6B-6irect ara acceder a trav0s de
d e O6B- a la "ase de datos'

;na ve/ creada esta clase% el ?nico cam"io a reali/ar en la alicaci#n es sustituir en la clase
agenda -lagenda la sentencia

Arivate O",ccesoB6 s e+ -la6OKJet

or

Arivate O",ccesoB6 s e+ -la6OKO6B-6irect


󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca CG

Curso de Visual Basic Avanzado


Avanzado

%&em'lo resuelto

;tili/aremos
;tili/ $ormulario rmA'enda % el m#dulo
aremos el $ormulario m#dulo Mod(e%iniciones y las clase Claic0a y
clase
ClaA'enda con la modi$icaci#n comentada'

Cla(A?@?(BC(irect

KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
 (,emlo C del -urso de Visual Basic van/ado
van/ado

 -lase de acceso a "ases
"ase s de datos utili/ando 6OKO6B-6irect
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

 -lase de acceso a "ases


"ase s de datos utili/ando 6O y
 O6B-6irect

Otion ()licit

Arivate Var*Is s *orIsace


Arivate Var-one)ion s -onnection
Arivate -onst -on-adena-one)ion N O6B->6B:(Ng
O6B->6B:(Ngenda>;&6N>A*6N>6:Ngenda
enda>;&6N>A*6N>6:Ngenda

Au"lic Aroerty Met umEichas s &nteger


On (rror Moo ratamiento(rror
6im 8set6atos s 8ecordset
6im -adena-one)ion s :tring

 -onstruimos la sentencia :HL


-adena-one)ion N select count[ $rom agenda

 (,ecutamos la consulta
:et 8set6atos N Var-one)ion'Oen8ecordset-adena-one)ion
Var-one)ion'Oen8ecordset-adena-one)ion

 O"tenemos el n?mero de $ichas


umEichas N 8set6atos'EieldsG'Value
8set6atos'EieldsG'Value

 -erramos el 8ecordset
8set6atos'-lose

()it Aroerty

ratamiento(rror
umEichas N 71
(nd Aroerty

Au"lic Eunction "rirgenda s -odigo8etorno


On (rror Moo ratamiento(rror

 -reamos el o",eto *orIsace de O6B-6irect


:et Va
Var*Is
r*Is N -reate*orIsace% K
% % d";seO6B-

 "rimos la cone)i#n utili/ando la cadena


 de cone)i#n rede$inida
:et-on-adena-one)ion
Va
Var-one)ion
r-one)ion N Var*Is'Oen-onnection%
Var*Is'Oen-onnection% % % K
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca C1

Curso de Visual Basic Avanzado


Avanzado

"rirgenda N OI
()it Eunction

ratamiento(rror
"rirgenda N (rror
(nd Eunction

Au"lic Eunction -errargenda s -odigo8etorno


On (rror Moo ratamiento(rror

 -erramos la "ase de datos


Var-one)ion'-lose

 -erramos el *orIsace
Var*Is'-lose

-errargenda N OI
()it Eunction

ratamiento(rror
-errargenda N (rror
(nd Eunction

Au"lic Eunction MuardarEichaByVal O",Eicha s -laEicha% K


Otional By8e$ &ntumEicha s &nteger s -odigo8etorno
On (rror Moo ratamiento(rror
6im 8set6atos s 8ecordset
6im -adena:HL s :tring

 -onstruimos la sentencia :HL


-adena:HL N insert into agenda  P K
om"re% ellidos% 6ireccion% ele$ono
ele$ono  P K
values  P K
 P O",Eicha':trom"re P % P K
 P O",Eicha':trellidos P % P K
 P O",Eicha':tr6ireccion P % P K
 P O",Eicha':trele$ono
O",Eicha':trele$ono P 

 (,ecutamos la consulta
Va
Var-one)ion'()ecute
r-one)ion'()ecute -adena:HL

 -omro"amos
&$ Va si se ha reali/ado
Var-one)ion'8ecords$$ected
r-one)ion'8ecords$$ected \la1inserci#n
hen
MuardarEicha N (rror
()it Eunction
(nd &$

 O"tenemos el n?mero de $icha asignado or el servidor


 O
O
 en realidad% dado !ue el camo clave es el n?mero
 de $icha% este sentencia uede devolver más de un
 registro% ero no lo tendremos en cuenta
-adena:HL N select num$icha $rom agenda  P K
+here  P K
om"reN P O",Eicha':trom"re P  6  P K
ellidosN P O",Eicha':trellidos P  6  P K
6ireccionN P O",Eicha':tr6ireccion P  6  P K
ele$onoN
ele$onoN P O",Eicha':trele$ono
O",Eicha':trele$ono P 

:et 8set6atos N Var-one)ion'Oen8ecordset-adena:HL


󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca C2

Curso de Visual Basic Avanzado


Avanzado

&$ ot 8set6atos'(OE hen


 O"tenemos el c#digo de la nueva $icha creada
&ntumEicha N 8set6atos'EieldsG'Value
8set6atos'EieldsG'Value
MuardarEicha N OI
(lse
MuardarEicha N (rror
(nd &$

 -erramos el 8ecordset
8set6atos'-lose
()it Eunction

ratamiento(rror
MuardarEicha N (rror
(nd Eunction

Au"lic Eunction O"tenerEichaBy8e$ O",Eicha s -laEicha% K


Otional ByVal
ByVal &nt&ndice s &nteger% K
Otional ByVal
ByVal &ntumEicha s &nteger s -odigo8etorno
On (rror Moo ratamiento(rror
6im 8set6atos s 8ecordset
6im -adena-one)ion s :tring
6im &ntEichactual s &nteger

 -omro"amos si hay !ue "uscar or índice


&$ ot &s@issing&nt&ndice hen
 "rimos un recordset seleccionando todos los
 registros de la ta"la
-adena-one)ion N select [ $rom agenda order "y num$icha
:et 8set6atos N Var-one)ion'Oen8ecordset-adena-one)ion
Var-one)ion'Oen8ecordset-adena-one)ion

 8ecorremos el 8ecordset hasta encontrar la $icha indicada


*ith 8set6atos
6o *hile ot '(OE
&ntEichactual N &ntEichactual . 1
&$ &ntEichactual N &nt&ndice hen
()it 6o
(nd &$
'@ovee)t
Loo
(nd *ith
(lse&$
-omro"amos
-omro"amos si hay !ue "uscar hen
ot &s@issing&ntumEicha or
or n?mero de $icha
 "rimos un recordset seleccionando el registro
 directamente
-adena-one)ion N select [ $rom agenda  P K
+here num$ichaN P &ntumEicha P K
order "y num$icha
:et 8set6atos N Var-one)ion'Oen8ecordset-adena-one)ion
Var-one)ion'Oen8ecordset-adena-one)ion
(nd &$

 -omro"amos si la hemos encontrado% o hemos llegado al


 $inal del 8ecordset sin encontrarla
*ith 8set6atos
&$ '(OE hen
O"tenerEicha N (rror
(lse
O",Eicha'&ntumEicha
Muardamos los datos N
o"tenidos
'EieldsG'Value
'EieldsG'Value
O",Eicha':trom"re N 'Eields1'Value
'Eields1'Value
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca C3

Curso de Visual Basic Avanzado


Avanzado

O",Eicha':trellidos N 'Eields2'Value
'Eields2'Value
O",Eicha':tr6ireccion N 'Eields3'Value
'Eields3'Value
O",Eicha':trele$ono
O",Eicha':trele$ono N 'Eields4'Value
'Eields4'Value
O"tenerEicha N OI
(nd &$
(nd *ith

 -erramos el 8ecordset
8set6atos'-lose

()it Eunction

ratamiento(rror
O"tenerEicha N (rror
(nd Eunction

Au"lic Eunction BorrarEichaByVal


BorrarEichaByVal &ntumEicha s -odigo8etorno
On (rror Moo ratamiento(rror

6im -adena:HL s :tring

 -onstruimos la sentencia :HL


-adena:HL N delete $rom agenda  P K
+here num$ichaN P &ntumEicha

 (,ecutamos la sentencia :HL


Va
Var-one)ion'()ecute
r-one)ion'()ecute -adena:HL

 -omro"amos cuantas $ilas han sido a$ectadas


&$ Va
Var-one)ion'8ecords$$ected
r-one)ion'8ecords$$ected N 1 hen
BorrarEicha N OI
(lse
BorrarEicha N (rror
(nd &$
()it Eunction

ratamiento(rror
BorrarEicha N (rror
(nd Eunction

Arivate :u" -lassK&nitiali/e


 -onectamos con la "ase de datos
"rirgenda
(nd :u"
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca C4

Curso de Visual Basic Avanzado


Avanzado

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


Introducción

-omo vimos en el e,emlo anterior% el acceso a servidores de "ases de datos suele


reali/arse a trav0s de O6B-' 86O 8emote 6ata O",ects es una $ina caa de o",etos so"re
el A& de O6B-% !ue ermite utili/ar llamadas al A& de O6B- de $orma sencilla'
86O está diseDado ara arovechar al má)imo la otencia de servidores de "ases de datos
in
inte
telilige
gent
ntes
es%% es
ese
eci
cial
alme
ment
nte
e :HL
:HL :erv
:erver
er'' ien
iene
e mult
multititud
ud de ocio
ocione
ness !u
!uee e
ermi
rmite
ten
n
incrementar el rendimiento de las alicaciones !ue utilicen 86O% or eso es el mas utili/ado
en cliente7servidor'
(n realidad ya conocemos a grandes rasgos c#mo $unciona 86O% uesto !ue O6B-6irect
es s#lo una $orma de utili/ar 86O desde 6O'
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca C5

Curso de Visual Basic Avanzado


Avanzado

Conocimientos teóricos

El modelo de o)+etos R(?


Los o",etos y las colecciones de 86O roorcionan un marco ara
utili/ar c#digo con el $in de crear y maniular comonentes de un
sistema de "ase de datos remota de O6B-'
l igual !ue 6O% las clases de los o",etos de acceso a datos se
organ
org ani/
i/an
an en un
unaa ,erar
,erar!u
!uía
ía%% en la !ue
!ue la mayo
mayorí
ría
a de la
lass clas
clases
es
ertenecen a una clase de colecci#n% !ue a su ve/ ertenece a otra
clase en la ,erar!uía' La $igura de la derecha muestra la ,erar!uía
comleta de 86O'

Estructura de una alicación de )ases de datos en


Visual )asic con R(?
La estructura de una alicaci#n de "ases de datos en Visual Basic !ue
utili/a 86O es casi id0ntica a la de la alicaciones !ue utili/an 6O
con O6B-6ire
O6B-6irect'
ct' Los modelos
modelos 6O y 86O son e!uival e!uivalente
entess en
cuanto a o",etos%
ara tra"a,ar la di$erencia
a trav0s de O6B- eso!ue estánero
en local% rogramados internamenteconociendo la manera de
ara el rogramador%
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 utili/ados en 86O y sus o",etos e!uivalentes en 6O

?)+eto de R(? Tio ,si alica)le- ?)+eto de (A? Tio ,si alica)le-
euivalente
rdo(ngine 6B(ngine
rdo(rror (rror
rdo(nvironment *orIsace
rdo-onnection 6ata"ase
rdoa"le a"le6e$
o está imlementado &nde)
rdo8esultset 8ecordset
o imlementado io ta"le
io Zeyset io 6ynaset
io static lSe io :nashot sSl
io dynamic ninguno
io $or+ard7only io $or+ard7only
sin cursor ninguno
rdo-olumn Eield
rdoHuery Huery6e$
rdoAarameter Aarameter
o imlementado 8elation
o imlementado Mrou
o imlementado ;ser
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca C=

Curso de Visual Basic Avanzado


Avanzado

Pro'ramación con R(?


(n las siguientes líneas vamos a comentar c#mo rogramar una alicaci#n
alicaci#n !ue acceda
acceda a una
"ase de datos a trav0s de 86O% e)licando las acciones más comunes !ue de"eremos
imlementar' (n los dos caítulos anteriores comentamos !ue e)isten muchas osi"ilidades
!ue no hemos
hemos tratad
tratado'
o' (sto
(sto se alica
alica esecialm
esecialmente
ente a 86O%
86O% ues
ues roorc
roorcion
iona
a muchas
muchas
osi"ilidades en $unci#n del :MB6 con el !ue tra"a,emos so"re todo con :HL :erver% como
consul
consultas
tasetc'
servidor% asíncr
asíncronas
onas%% cursor
cursores
es del lado
lado del servid
servidor
or%% e,ecuc
e,ecuci#n
i#n de roced
rocedimi
imiento
entoss en el

:i rogramamos con Visual Basic 5'G% es necesario incluir en el royecto una re$erencia a
1icroso,t Remote Data +b&ect 94: '

;tili/aremos la misma "ase de datos


dato s descrita en el caítulo anterior% así como el mismo 6:'

Varia)les
Varia)les utilizadas&

(n los siguient
siguientes
es e,eml
e,emlos
os utili/
utili/arem
aremos
os una varia"le
varia"le Var-on
Var-one)i
e)ion
on !ue reresenta
reresentará
rá la
cone)i#n con el :MB6 y la misma constante ara la cadena de cone)i#n O6B- !ue utili/amos
en el caítulo anterior

6im Var-one)ion s e+ rdo-onnection


6im -onst -on-adena-one)ion N O6B->6B:(N@iB6
O6B->6B:(N@iB6>;&6N>A*6N>6:N@i6:
>;&6N>A*6N>6:N@i6:

Cone/ión con el S"B(&

(sta"lecere
(sta" leceremos
mos la cone)i#n
cone)i#n con el :MB6 utili/ando
utili/ando el m0todo %stablishConnection de la
cone)i#n' ntes de a"rir la cone)i#n% tenemos !ue eseci$icar el tio de cursor a utili/ar
utili/ando
utili/ando la roiedad
roiedad CursorDriver de la cone)i#n
cone)i#n eseci$icaremos
eseci$icaremos rd"se+dbc% así como
la cadena de cone)i#n usando la roiedad Connect

*ith Va
Var-one)ion
r-one)ion
'-ursor6river N rd;seOd"c
'-onnect N -on-adena-one)ion
'(sta"lish-onnection rd6riveroAromt
(nd *ith

2tilización de Resultsets &

-omo ya di,imos
-omo di,imos en el caítu
caítulo
lo anterior
anterior%% los Recordsets creados con O6B-6irect son en
realidad Resultsets de 86O' Aor lo tanto% la $orma de tra"a,ar con estos Resultsets será muy
seme,ante a la !ue ya conocemos' Aara a"rir un Resultset% crearemos la consulta :HL !ue
genere
gen ere el con,un
con,unto
to de registros
registros "uscado
"uscado y utili/a
utili/arem
remos
os el m0todo +'enResultset de la
cone)i#n ara lan/arla'

E+emlo de utilización de Resultsets &

Aara sacar en la antalla Debu# los datos de cada registro de la ta"la T@ia"laU utili/aremos el
m0todo +'enResultset de la cone)i#n% asándole la consulta :HL !ue o"tiene todos los datos
de la ta"la' Aara acceder a cada uno de los camos del registro actual% utili/aremos la
colecci#n rdoColumns del Resultset % !ue contiene todos los camos del registro actual'

6im 8set6atos s rdo8esultset

:et 8set6atos N Var-one)ion'Oen8esultsetselect


Var-one)ion'Oen8esultsetselect [ $rom @ia"la
@ia"la

*ith 8set6atos
6o *hile ot '(OE
6e"ug'Arint T6& U P 'rdo-olumnsG'Value P v"-8LE P K
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca CC

Curso de Visual Basic Avanzado


Avanzado

Tom"re T P ' rdo-olumns1'Value P v"-8LE P K


Tellidos T P ' rdo-olumns2'Value
'@ovee)t
Loo
(nd *ith

Sentencias ue no devuelven datos&

La $orma de e,ecutar sentencias !ue no devuelven datos en 86O es id0ntica a la !ue ya hemos
visto con O6B-6irect'
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca CF

Curso de Visual Basic Avanzado


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 86O en lugar de 6O y O6B-6irect ara acceder a la misma
misma
"ase de datos a trav0s de O6B-'

(esarrollo del e+emlo


;tili/a
i/aremos
mos el 6: creado en el e,eml mlo ant nte
erior y cam"i
"iar
are
emos
mos la clase
-la6OKO6B-6irect or una nueva clase -la86O% !ue constará de los mismo m0todos ero
utili/ará 86O ara acceder a trav0s
tra v0s de O6B- a la "ase de datos'

;na ve/ creada esta clase% el ?nico cam"io a reali/ar en la alicaci#n es sustituir en la clase
agenda -lagenda la sentencia

5rivate 6b)cceso-1 )s 7e8 la1)6_61


la1)6_61-1irect
-1irect

or

5rivate 6b)cceso-1 )s 7e8 la916


󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca C9

Curso de Visual Basic Avanzado


Avanzado

%&em'lo resuelto

$ormulario rmA'enda % el m#dulo


;tili/aremos el $ormulario
;tili/aremos m#dulo Mod(e%iniciones y las clase Claic0a y
clase
ClaA'enda con la modi$icaci#n comentada'

ClaR(?
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
 (,emlo F del -urso de Visual Basic van/ado
van/ado

 -lase de acceso a "ases de datos utili/ando 86O
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

Otion ()licit

Arivate Var-one)ion s e+ rdo-onnection


Arivate -onst -on-adena-one)ion N O6B->6B:(Ng
O6B->6B:(Ngenda>;&6N>A*6N>6:Ngenda
enda>;&6N>A*6N>6:Ngenda

Au"lic Aroerty Met umEichas s &nteger


On (rror Moo ratamiento(rror
6im 8set6atos s rdo8esultset
6im -adena-one)ion s :tring

 -onstruimos la sentencia :HL


-adena-one)ion N select count[ $rom agenda
 (,ecutamos la consulta
:et 8set6atos N Var-one)ion'Oen8esultset-adena-one)ion
Var-one)ion'Oen8esultset-adena-one)ion

 O"tenemos el n?mero de $ichas


umEichas N 8set6atos'rdo-olumnsG'Value
8set6atos'rdo-olumnsG'Value

 -erramos el rdoresultset
8set6atos'-lose

()it Aroerty

ratamiento(rror
umEichas N 71
(nd Aroerty

Au"lic Eunction "rirgenda s -odigo8etorno


On (rror Moo ratamiento(rror

 "rimos la cone)i#n utili/ando la cadena


 de cone)i#n rede$inida
*ith Va
Var-one)ion
r-one)ion
'-ursor6river N rd;seOd"c
'-onnect N -on-adena-one)ion
'(sta"lish-onnection rd6riveroAromt
(nd *ith

"rirgenda N OI
()it Eunction

ratamiento(rror
"rirgenda
(nd Eunction N (rror
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca FG

Curso de Visual Basic Avanzado


Avanzado

Au"lic Eunction -errargenda s -odigo8etorno


On (rror Moo ratamiento(rror

 -erramos la "ase de datos


Var-one)ion'-lose

-errargenda N OI
()it Eunction

ratamiento(rror
-errargenda N (rror
(nd Eunction

Au"lic Eunction MuardarEichaByVal O",Eicha s -laEicha% K


Otional By8e$ &ntumEicha s &nteger s -odigo8etorno
On (rror Moo ratamiento(rror
6im 8set6atos s rdo8esultset
6im -adena:HL s :tring

 -onstruimos la sentencia :HL


-adena:HL N insert into agenda  P K
om"re% ellidos% 6ireccion% ele$ono
ele$ono  P K
values  P K
 P O",Eicha':trom"re P % P K
 P O",Eicha':trellidos P % P K
 P O",Eicha':tr6ireccion P % P K
 P O",Eicha':trele$ono
O",Eicha':trele$ono P 

 (,ecutamos la consulta
Va
Var-one)ion'()ecute
r-one)ion'()ecute -adena:HL

 -omro"amos si se ha reali/ado la inserci#n


&$ Va
Var-one)ion'8o+s$$ected
r-one)ion'8o+s$$ected \ 1 hen
MuardarEicha N (rror
()it Eunction
(nd &$

 O"tenemos el n?mero de $icha asignado or el servidor


 O
O
 en realidad% dado !ue el camo clave es el n?mero
 de $icha% este sentencia uede devolver más de un
 registro% ero no lo tendremos en cuenta
-adena:HL
+here  PNKselect num$icha $rom agenda  P K
om"reN P O",Eicha':trom"re P  6  P K
ellidosN P O",Eicha':trellidos P  6  P K
6ireccionN P O",Eicha':tr6ireccion P  6  P K
ele$onoN
ele$onoN P O",Eicha':trele$ono
O",Eicha':trele$ono P 

:et 8set6atos N Var-one)ion'Oen8esultset-adena:HL


Var-one)ion'Oen8esultset-adena:HL

&$ ot 8set6atos'(OE hen


 O"tenemos el c#digo de la nueva $icha creada
&ntumEicha N 8set6atos'rdo-olumnsG'Value
8set6atos'rdo-olumnsG'Value
MuardarEicha N OI
(lse
MuardarEicha N (rror
(nd &$

 -erramos el rdoresultset
8set6atos'-lose
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca F1

Curso de Visual Basic Avanzado


Avanzado

()it Eunction

ratamiento(rror
MuardarEicha N (rror
(nd Eunction

Au"lic Eunction O"tenerEichaBy8e$ O",Eicha s -laEicha% K


Otional ByVal
ByVal &nt&ndice s &nteger% K
Otional ByVal
ByVal &ntumEicha s &nteger s -odigo8etorno
On (rror Moo ratamiento(rror
6im 8set6atos s rdo8esultset
6im -adena-one)ion s :tring
6im &ntEichactual s &nteger

 -omro"amos si hay !ue "uscar or índice


&$ ot &s@issing&nt&ndice hen
 "rimos un rdoresultset seleccionando todos los
 registros de la ta"la
-adena-one)ion N select [ $rom agenda order "y num$icha
:et 8set6atos N Var-one)ion'Oen8esultset-adena-one)ion
Var-one)ion'Oen8esultset-adena-one)ion

 8ecorremos el rdoresultset hasta encontrar la $icha indicada


*ith 8set6atos
6o *hile ot '(OE
&ntEichactual N &ntEichactual . 1
&$ &ntEichactual N &nt&ndice hen
()it 6o
(nd &$
'@ovee)t
Loo
(nd *ith
 -omro"amos
-omro"amos si hay !ue "uscar or or n?mero de $icha
(lse&$ ot &s@issing&ntumEicha hen
 "rimos un rdoresultset seleccionando el registro
 directamente
-adena-one)ion N select [ $rom agenda  P K
+here num$ichaN P &ntumEicha P K
order "y num$icha
:et 8set6atos N Var-one)ion'Oen8esultset-adena-one)ion
Var-one)ion'Oen8esultset-adena-one)ion
(nd &$

 -omro"amos si la hemos
$inal del rdoresultset encontrado% o hemos llegado al
sin encontrarla
*ith 8set6atos
&$ '(OE hen
O"tenerEicha N (rror
(lse
 Muardamos los datos o"tenidos
O",Eicha'&ntumEicha N 'rdo-olumnsG'Value
O",Eicha':trom"re N 'rdo-olumns1'Value
O",Eicha':trellidos N 'rdo-olumns2'Value
O",Eicha':tr6ireccion N 'rdo-olumns3'Value
O",Eicha':trele$ono
O",Eicha':trele$ono N 'rdo-olumns4'Value
'rdo-olumns4'Value
O"tenerEicha N OI
(nd &$
(nd *ith

 -erramos el rdoresultset
8set6atos'-lose
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca F2

Curso de Visual Basic Avanzado


Avanzado

()it Eunction

ratamiento(rror
O"tenerEicha N (rror
(nd Eunction

Au"lic Eunction BorrarEichaByVal


BorrarEichaByVal &ntumEicha s -odigo8etorno
On (rror Moo ratamiento(rror

6im -adena:HL s :tring


 -onstruimos la sentencia :HL
-adena:HL N delete $rom agenda  P K
+here num$ichaN P &ntumEicha

 (,ecutamos la sentencia :HL


Va
Var-one)ion'()ecute
r-one)ion'()ecute -adena:HL

 -omro"amos cuantas $ilas han sido a$ectadas


&$ Va
Var-one)ion'8o+s$$ected
r-one)ion'8o+s$$ected N 1 hen
BorrarEicha N OI
(lse
BorrarEicha N (rror
(nd &$
()it Eunction

ratamiento(rror
BorrarEicha N (rror
(nd Eunction

Arivate :u" -lassK&nitiali/e


 -onectamos con la "ase de datos
"rirgenda
(nd :u"
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca F3

Curso de Visual Basic Avanzado


Avanzado

9. El re'istro de Findo7s
Introducción

(l o"
o",e
,etitivo
vo de este
este caít
caítul
ulo
o es intr
introd
oduc
ucir
ir al lecto
lectorr en un tetema
ma co
coml
mle,
e,o
o co
como
mo es el
tratami
tratamient
ento o del regist
registro
ro de *indo+
*indo+s's' :e e)lic
e)licará
ará c#mo
c#mo se estruc
estructur
tura
a el regist
registro
ro de
*indo+s% c#mo odemos o"tener valores almacenados en 0l y c#mo crear nuevas claves y
valores de di$erentes tios'
Aero
Aer o todos
todos los accesos
accesos al regist
registro
ro de)en ser controlados% ya !ue del registro deende el
co
corre
rrect
cto
o $unci
$uncion
onami
amien
ento
to del
del :'O'
:'O'%% or lo !ue
!ue cual
cual!u
!uie
ierr ca
cam"i
m"io
o o
odr
dría
ía reerc
reercut
utir
ir en el
$uncionamiento correcto del sistema'

(l acceso al registro de *indo+s


*indo+s imlica
imlica la utili/aci#n
utili/aci#n de las corresondientes
corresondientes $unciones
$unciones !ue
roorciona el A& de *indo+s% or lo !ue en este caítulo se e)licará someramente !u0 es y
c#mo se utili/a dicho A& lication Arogramming &nter$ace% o &nter$a/ ara la Arogramaci#n
de licaciones'
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca F4

Curso de Visual Basic Avanzado


Avanzado

Conocimientos teóricos

u: es el re'istro de Findo7s

(n *ind
*indo+
o+ss 3'1
3'1 y en las
las vers
versio
iones
nes an
ante
teri
riore
oress de *ind
*indo+
o+s%
s% la co
con$i
n$igu
gurac
raci#
i#n
n de lo
loss
rogramas se almacena"an
en las versiones osteriores normalmente
nde
ormalmente
*indo+s% en archivos 'ini' (n
la con$iguraci#n *indo+s
de los % en
rogramas se*indo+s
almacena95eny
el registro del sistema% todas las instalaciones reali/adas% versiones de li"rerías% controles'''
!uedan re$le,ados en el registro'

Cómo acceder al re'istro de Findo7s

Aodemos
Aod emos accede
accederr man
manualm ente a los valores almacenados en el registro de *indo+s
ualmente
utili/ando la alicaci#n Re#edit

am"i0n odemos acceder al registro de *indo+s desde Visual Basic utili/ando las $unciones
!ue roorciona el A& de *indo+s !ue veremos mas adelante% ero antes ro$undi/aremos
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os


claves% !ue se estructuran en $orma de directorios'
• valores de cadena% "inarios o 6*O86'

Aara acceder al valor contenido en una clave es necesario conocer el :path comleto de
0sta or e,emlo% ara conocer el n^ de versi#n de *indo+s hay !ue consultar la clave
Z(<KLO-LK@-&(]:OE*8(]@icroso$t]*indo+s]-urrentV
Z(<KLO-LK@-&(]:OE *8(]@icroso$t]*indo+s]-urrentVersion]Ve
ersion]Versionum"er'
rsionum"er'
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca F5

Curso de Visual Basic Avanzado


Avanzado

Cómo utilizar el API de Findo7s


Aara oder utili/ar las $unciones !ue roorciona el A& de *indo+s es necesario declarar las
$unciones !ue 0ste imlementa% así como los osi"les tios de datos y constantes !ue utilicen'
Aodemoss o"tener esta in$ormaci#n utili/ando
Aodemo utili/ando el Visor de te/to API !ue roorciona Visual
Basic% a"riendo el archivo Fin4*ai.t/t !ue estará en el directorio
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
$unc
$uncio
iones
nes !u
!ue
e imiml
lem
emen
enta
ta el A& de *ind
*indo+
o+s%
s% as
asíí co
como
mo la $o$orm
rma
a de de
declclar
ararl
arlas%
as% lo
loss
argumentos !ue utili/an% los valores de retorno% etc'
Aor e,emlo% si !uisi0ramos utili/ar la $unci#n 8egOenZey% !ue nos ermite a"rir una clave del
registro% "uscaríamos el nom"re de la $unci#n en el cuadro de lista suerior% haríamos do"le
clicI so"re el nom"re y coiaríamos la declaraci#n en nuestro c#digo de Visual Basic en
realidad% ara utili/ar esta $unci#n necesitamos o"tener tam"i0n ciertas constantes !ue indican
las ramas del registro donde vamos a "uscar% entre otras'

Aero el ro"lema !ue tienen los visores A& es !ue no roorcionan una "reve e)licaci#n del
contenido de el A& seleccionada% or lo !ue muchas veces hay !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 A& de


*indo+s ara acceso al registro y su corresondiente declaraci#n

unción (escrición (eclaración


8egOenZey "re una clave 6eclar
6eclaree Euncti
Eunction
on O:8egO
O:8egOenZ
enZeyey Li" adva
advai32
i32
e)istente lias 8egOenZey ByVal
ByVal hZey s Long% ByVal
ByVal
ls/:u"Zey s :tring% hI8esult s Long s Long
8eg-loseZey -ierra una clave 6ec
6eclar
lare
e Euncti
Eunction
on O:8eg-l
O:8eg-lose
oseZey
Zey Li" advai
advai32
32
a"ierta con lias 8eg-loseZey ByVal
ByVal hZey s
s Long s Long
8egOenZey
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca F=

Curso de Visual Basic Avanzado


Avanzado

8eg-reateZey -rea una nuev


nueva
a clav
ave
e 6eclare Euncncttion O:8eg-reateZey Li" ad advva
aii32
lias 8eg-reateZey ByVal
ByVal hZey s Long% ByVal
ByVal
ls/:u"Zey s :tring% hI8esult s Long s Long
8eg6eleteZey (limina una clave 6ec 6eclar
lare
e Euncti
Eunction
on O:8eg6
O:8eg6ele
eleteZ
teZey
ey Li" adva
advai32
i32
e)istente lias 8eg6eleteZey ByVal
ByVal hZey s Long% ByVal
ByVal
ls/:u"Zey s :tring s Long
8egH
8egHue
uery
ryV
Valu
lue(
e()) O"ti
O"tiene
ene el val
valor
or de
de una
una 6e
6ecl
clar
are
e Eu
Euncncti
tion
on O:8eg
:8egHu
Huer
eryV
yVa
alue()
ue() Li
Li"
"
clav
clave%
e% ese
esecici$ic
$ican
ando
do advai
advai32
32 lias
lias 8egHueryV
8egHueryValue
alue()
() ByVal
ByVal hZey
tam"i0n su tio s Long% ByVal
d+8eserved ByVa l ls/Valueame
ls/Va
s Long% lueame
ld+ye s s :tring%
Long% ByVal
ByVa
l"6ata sl
ny% c"6ata
c"6ata s Long s Long
8eg:etValue() (sta"lece el valor de 6eclare Eunction O:8eg:etValue() Li" advai32
una clave lias 8eg:etValue()
8eg:etValue() ByVal
ByVal hZey s Long% ByVal
ByVal
ls/Va
ls/Value
lueam
ame e s :tring
:tring%% ByVal
ByVal d+8eser
d+8eserved
ved s
Long% ByVal
ByVal $d+ye
$d+ye s Long% l"6ata s ny% ByVal
ByVal
c"6ata s Long s Long

Aara oder utili/ar estas $unciones es necesario declarar tam"i0n varias constantes% !ue se
eseci$ican en el siguiente cuadro ⊗

Constante (escrición
Mlo"al
Mlo"al -onst
-onst Z(<
Z(<K-L
K-L::(
::(:K8
:K8OO
OO N PFGG
PFGGGGG
GGGGG
GG 6e$ine
6e$ine la rama
rama Z(<K-L
Z(<K-L::
::(:K
(:K8OO
8OO
Mlo"al -onst Z(<K-;88(
Z(<K-;88(K;:(
K;:(8
8 N PFGGGGGG1
PFGGGGGG1 6e$ine la rama
rama Z(<K-
Z(<K-;88(
;88(K;:(
K;:(8
8
Mlo"al -onst Z(<KLO-L
Z(<KLO-LK@-
K@-&(
&( N PFGGGGGG2
PFGGGGGG2 6e$ine la rama
rama Z(<KLO-
Z(<KLO-LK@-
LK@-&(
&(
Mlo"al -onst Z(<K;:(8: N PFGGGGGG3 6e$ine la ra
rama Z
Z(<K;:(8:
-onst (88O8K:;--(:: N GP Valor de error
-onst 8(MK:` N 1 io de dato :tring
-onst 8(MKB&8< N 3 io de dato "inario
-onst 8(MK6*O86 N 4 io de dato 6*O86

Aertura de una clave e/istente&

Aa
Aara
ra a"
a"ririrr un
una a clav
clave
e e)is
e)iste
tent
ntee de"e
de"emo
moss ese
eseci
ci$i$ica
carr la rarama
ma do
dond
ndee se en encu
cuen
entr
tra
a
Z(<K-L::(:K8OO% etc y el :path restante de la clave !ue !ueremos a"rir' ;na ve/
a"ierta%
a"ierta% nos devolverá
devolverá un valor de tio long !ue identi$ica
identi$ica a esa clave% y nos ermitirá
ermitirá tra"a,ar
co
con
n el
ella
la'' ;til
;tili/
i/ar
arem
emos
os la $u
$unc
nci#
i#n
n Re#+'en;e! % co
cont ntro
rola
land
ndo
o si el va
valo
lorr de rereto
torn
rno
o es
%RR+R7S"CC%SS% lo !ue indicaría !ue todo ha ido "ien'

Aor e,emlo%
e,emlo% si !ueremos
!ueremos a"rir la clave Z(<KLO-
Z(<KLO-LK@-
LK@-&(]:
&(]:OE*
OE*8(]@i
8(]@icroso$t
croso$t
utili/aríamos el siguiente c#digo
6im hZey s Long

&$ O:8egOenZeyZ(<KLO-LK@-&(% T:OE*8(]@icroso$tU% hZey N


(88O8K:;--(:: hen
@sgBo) T-lave a"iertaU
(lse
@sgBo) T(rror al a"rir la claveU
(nd &$



()isten más 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 Ordovás Oromendía y Vicente Lema Osca FC

Curso de Visual Basic Avanzado


Avanzado

Cerrado de una clave a)ierta&

Aara cerrar una clave a"ierta% utili/aremos la $unci#n Re#Close;e! % asándole el identi$icador
de la clave a"ierta' am"i0n en este caso de"emos comro"ar si el valor devuelto or la
$unci#n es (88O8K:;--(::' Aor e,emlo% ara cerrar la clave a"ierta en el e,emlo anterior%
utili/aríamos el siguiente $ragmento de c#digo

&$ O:8eg-loseZeyhZey N (88O8K:;--(:: hen


@sgBo) T-lave cerradaU
(lse
@sgBo) T(rror al cerrar la claveU
(nd &$

Creación de una clave nueva&

Aara crear una clave nueva en el registro utili/aremos


utili/aremos la $unci#n Re#Create;e! ' (sta $unci#n
creará la clave nueva o la a"rirá% si e)iste y nos roorcionará el identi$icador de la clave
reci0
reci0n
n cr
cred
edaS
aSa"i
a"ier
erta
ta'' -omo
-omo en los
los caso
casoss anante
teri
riore
ores%
s% he
hemo
moss de co
com
mro
ro"ar
"ar si de
devu
vuel
elve
ve
(88O8K:;--(::' Aor e,emlo% ara crear la clave
Z(<KLO-LK@-&(]:OE*8(]@i-lave
Z(<KLO-LK@-&(]:OE *8(]@i-lave utili/aríamos la siguiente sentencia

&$ O:8eg-reateZeyZ(<KLO-LK@-&(% :OE*8(]@i-lave% hZeyueva N


(88O8K:;--(:: then
@sgBo) T-lave creadaU
(lse
@sgBo) T(rror al crear la claveU
(nd &$

Esta)lecimiento del valor de una clave

Aara esta"lecer
esta"lecer el valor de una clave e)istente
e)istente utili/aremos
utili/aremos la $unci#n
$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 si
no se eseci$ica% se entenderá !ue es el valor or de$ecto de dicha clave y el roio valor' (s
ne
nece
cesa
sari
rio
o co
conc
ncre
reta
tarr !u0
!u0 titio
o de va
valo
lorr es una
una ca cade
dena
na 8
8(M
(MK:
K:`
`%% un va
valo
lorr "i
"ina
nari
rio
o
8(MKB&8< o un valor num0rico 8(MK6*O86 y !u0 longitud tiene'

Aor e,emlo% una ve/ creada la clave anterior% crearemos un valor nuevo dentro de ella !ue se
llamará @iValor y contendrá la cadena T(sto es una rue"aU

&$ O:8eg:etValue()hZeyueva%
O:8eg:etValue()hZeyueva% T@iValorU% GP% 8(MK:`% T(sto es una rue"aU%
LenT(sto es una rue"aU . 1 N (88O8K:;--(:: then
@sgBo) TValor creadoU
(lse
@sgBo) T(rror al crear el valorU
(nd &$

6entro de la misma clave% crearemos un nuevo valor llamado @iuevoValor% !ue contendrá el
n?mero 1C como vamos a crearlo como 8(MK6*O86% el tamaDo es 4

&$ O:8eg:etValue()hZeyueva%
O:8eg:etValue()hZeyueva% T@iuevoValorU% GP% 8(MK6*O86% 1C% 4 N
(88O8K:;--(:: then
@sgBo) TValor creadoU
(lse
@sgBo) T(rror al crear el valorU
(nd &$
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca FF

Curso de Visual Basic Avanzado


Avanzado

?)tención de al'uno de los valores de una clave&

Aa
Aara
ra o"o"te
tene
nerr algu
alguno
no de los
los va
valo
lore
ress asoc
asocia
iado
doss a ununa
a clav
clave
e ut
utilili/
i/ar
arem
emos
os la $u$unc
nci#
i#n
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 si no se eseci$ica%
eseci$ica% se entenderá !ue es el valor or de$ecto
de$ecto de dicha
clave%% una varia"le
clave 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 tamaDo del valor recogido'

-omo es osi"le o"tener valores de tios y tamaDos di$erentes% esta $unci#n se llamará dos
veces la rimera con un buffer vacío GP ara o"tener el tio y el tamaDo del valor> la segunda
con el buffer corresondi
corresondiente
ente a este tio y de tamaDo correcto
correcto XOJOY en el caso de R%-7S<
de"emos reservar e)resamente esacio de memoria' ;na ve/ o"tenido el valor% hay !ue
coger s#lo el tamaDo eseci$icado del valor'

Aor e,emlo% si !ueremos o"tener el valor @iValor de la clave anterior% utili/aremos la siguiente
sentencia XOJOY el 0!Val es imortante

6im lValueye
lValueye as Long
6im :trBu$ s :tring
6im l6ataBu$:i/e s Long

&$ O:8egHueryValue()hZeyueva%
O:8egHueryValue()hZeyueva% T@iValorU% GP% lValueye%
lValueye% ByVal
ByVal GP% l6ataBu$:i/e N
(88O8K:;--(:: hen
&$ lValueye N 8(MK:` hen
:trBu$ N :tringl6ataBu$:i/e%  
&$ O:8egHueryValue()hZey%
O:8egHueryValue()hZey% strValueame%
strValueame% GP% GP% ByVal
ByVal :trBu$%
l6ataBu$:i/e N (88O8K:;--(:: hen
8egHuery:tringValue
8egHuery:tringValue N rue
:tr6ata N Le$t:trBu$% l6ataBu$:i/e 7 1
(nd &$
(nd &$
(nd &$

:i !ueremos o"tener el valor @iuevoValor


@iuevoValor de la clave anterior% utili/aremos la sentencia

6im lValueye s Long


6im lBu$ s Long
6im l6ataBu$:i/e s Long

l6ataBu$:i/e N 4
&$ O:8egHueryValue()hZeyueva% T@iuevoValorU%
T@iuevoValorU% GP% lValueye%
lValueye% lBu$% l6ataBu$:i/e N
(88O8K:;--(:: hen
&$ lValueye
lValueye N 8(MK6*O86 hen
l6ata N lBu$
(nd &$
(nd &$

Borrado de una clave&

Aara "orrar una clave e)istente


e)istente utili/aremos
utili/aremos la $uncion Re#Delete;e! % a la !ue asaremos el
identi$icador de la clave a"ierta y la su"clave !ue !ueremos "orrar' Aor e,emlo% ara "orrar la
clave Z(<KLO-LK@-&(]:OE*8(]@i-lave y todo lo !ue a artir de ella hemos
creado% utili/aríamos la sentencia

&$ O:8egOenZeyZ(<KLO-LK@-&(% T:OE*8(U% hZey N


(88O8K:;--(:: hen
&$ O:8eg6eleteZeyhZey% @i-lave N (88O8K:;--(:: then

(nd &$ @sgBo) T-lave "orradaU


(nd &$
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca F9

Curso de Visual Basic Avanzado


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 hemos
desarrollado% de $orma !ue nos ermita 1G usos y luego no nos de,e e,ecutar más la alicaci#n%
a no ser !ue la registremos' Aara controlar esto utili/aremos el registro de *indo+s% en el
llevaremos el control de veces !ue se ha e,ecutado la alicaci#n y guardaremos el registro de
la alicaci#n% tal y como hacen la mayoría de las alicaciones del mercado'

(esarrollo del e+emlo


-rearemos un m#dulo @od8egistro !ue roorcione las siguientes $unciones

unction Re'CreateOe!,B!Val 0Oe! As #on'$ B!Val lszOe! As Strin'$ 0Result As


#on'- As Boolean

unction
unction Re'SetStri
Re'SetStrin'V
n'Valu
alue,B!V
e,B!Val
al 0Oe! As #on'$
#on'$ B!Val
B!Val strValue
strValue6ame
6ame As Strin'$
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'$ 0Result
As #on'- As Boolean

unction
unction Re'(el
Re'(eleteO
eteOe!,B
e!,B!V
!Val
al 0Oe!
0Oe! As #on'$
#on'$ B!Val
B!Val lszSu
lszSu)Oe
)Oe!! As Strin'
Strin'-- As
Boolean

unction Re'CloseOe!,B!Val 0Oe! As #on'- As Boolean

unction Re'uer!Strin'Value,B!Val 0Oe! As #on'$ B!Val strValue6ame As Strin'$


Str(ata As Strin'- As Boolean

unction Re'uer!6umericValue,B!Val 0Oe! As #on'$ B!Val strValue6ame As Strin'$


l(ata As #on'- As Boolean

(stas $unciones utili/aran sus corresondientes $unciones del A& de *indo+s% tal y como se
ha e)licado antes en este caítulo'

-rearemos un $ormulario ErmAresentacion de inicio de la alicaci#n como el !ue aarece en la


siguiente $igura
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 9G

Curso de Visual Basic Avanzado


Avanzado

-ada ve/ !ue se e,ecute la alicaci#n se lan/araría este $ormulario ara este e,emlo no ha"rá
alicaci#n !ue lan/ar tanto si la alicaci#n se registra como si es está en eríodo de rue"a o
se suera 0ste% el $ormulario se descargará y nada más'

La r
rim
imer
era
a ve/ !ue se e,ece,ecut
ute
e la ali
alica
cacci#n%
i#n% est
este $o
$orm
rmul
ular
ario
io cr
crea
eará
rá una
una clav
clave
e
Z(<KLO-LK@-&(]:OE*8(]genda en el registro% y en esta clave dos valores
@a)&ntentosN1G y um&ntentosN1' ctuali/ará 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 ve/ !ue se e,ecute la alicaci#n se incrementará um&ntentos y se comro"ará si es


menor !ue @a)&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 actuali/ará el cation'

(n todo momento se ermitirá registrar la alicaci#n% en cuyo caso se lan/ará un $ormulario


como el siguiente

l ulsar el "ot#n acetar% crearemos un nuevo valor 6atos8egistro 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 ve/ !ue se e,ecuta si e)iste el valor 6atos8egistro% en cuyo
caso se suone !ue está registrada y no se tomará en cuenta el valor de um&ntentos y
@a)&ntentos del registro% ermitiendo siemre lan/ar la alicaci#n en nuestro caso siemre se
descargará el $ormulario'
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 91

Curso de Visual Basic Avanzado


Avanzado

%&em'lo resuelto

rmPresentacion
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
 (,emlo 9 del -urso de Visual Basic van/ado
van/ado

 Eormulario de resentaci#n% en 0l comro"amos los usos% la registraci#n de la alicaci#n'''
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

Otion ()licit

-onst -on@a)&ntentos N 1G

Arivate :u" ButcetarK-licI


 !uí comro"aríamos si se lan/a la alicaci#n
;nload @e
(nd :u"

Arivate :u" But8egistrarK-licI


6im :tr-lave s :tring
6im :tr-adena8egistro s :tring
6im hIey()istente s Long

 @ostramos el $ormulario de registro


$rm8egistro':ho+ v"@odal

 "rimos la clave del registro


&$ 8egOenZeyZ(<KLO-LK@-&(% :OE*8(]genda%
:OE*8(]genda% hIey()istente hen

 -omro"amos si está registrado


:tr-lave N 6atos8egistro
&$ 8egHuery:tringValuehIey()istente%
8egHuery:tringValuehIey()istente% :tr-lave% :tr-adena8egistro hen
La"e)toAresentacion'-ation
La"e)toAresentacion'-ation N Versi
Versi#n
#n registrada% comletamenta oeracional' P
v"-rL$ P XX6is$r?telaYY
La"um;sos'Visi"le N Ealse
But8egistrar'(na"led N Ealse
()it :u"
(nd &$

 -erramos la clave del registro


8eg-loseZey hIey()istente
(nd &$
(nd :u"

Arivate :u" EormKLoad


6im hZey s Long
6im hIey()istente s Long
6im :tr-lave s :tring
6im :tr-adena8egistro s :tring
6im Lngum&ntentos s Long
6im Lng@a)&ntentos s Long

 "rimos
&$ la clave del regi:tro
8egOenZeyZ(<KLO-LK@-&(% :OE*8(]genda%
:OE*8(]genda% hIey()istente hen
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 92

Curso de Visual Basic Avanzado


Avanzado

 -omro"amos si está registrado


:tr-lave N 6atos8egistro
&$ 8egHuery:tringValuehIey()istente%
8egHuery:tringValuehIey()istente% :tr-lave% :tr-adena8egistro hen
La"e)toAresentacion'-ation
La"e)toAresentacion'-ation N Versi
Versi#n
#n registrada% comletamenta oeracional' P
v"-rL$ P XX6is$r?telaYY
8eg-loseZey hIey()istente
But8egistrar'(na"led N Ealse
()it :u"
(nd &$

 -omo no está registrado% o"tenemos el n?mero má)imo de intentos


:tr-lave N @a)&ntentos
&$ 8egHueryumericValuehIey()istente%
8egHueryumericValuehIey()istente% :tr-lave% Lng@a)&ntentos hen

 -omro"amos cuántos intentos van


:tr-lave N um&ntentos
&$ 8egHueryumericValuehIey()istente%
8egHueryumericValuehIey()istente% :tr-lave% Lngum&ntentos hen

 -omro"amos si se ha llegado al n?mero má)imo de intentos


&$ Lngum&ntentos \ Lng@a)&ntentos hen
 &ncrementamos el n?mero de usos y lo guardamos en el registro
Lngum&ntentos N Lngum&ntentos . 1
8eg:etumericValue
8eg:etumericValue hIey()istente% um&ntentos% Lngum&ntentos

 ctuali/amos el $ormulario
La"um;sos'-
La"um;sos'-ation
ation N La agenda ha sido utili/ada
utili/ada  P Lngum&ntento
Lngum&ntentoss P 
veces má)imo  P Lng@a)&ntentos P 
(lse
La"um;sos'-
La"um;sos'-ation
ation N La agenda ha sido utili/ada
utili/ada  P Lngum&ntento
Lngum&ntentoss P 
veces má)imo  P Lng@a)&ntentos P ' 8egistre la versi#n antes de continuar'
(nd &$
(nd &$
(nd &$
8eg-loseZey hIey()istente
(lse

 -omo no e)iste% la creamos


&$ 8eg-reateZeyZ(<KLO-LK@-&(% :OE*8(]genda%
:OE*8(]genda% hZey hen

 ?mero má)imo de intentos


8eg:etumericValue
8eg:etumericValue hZey% @a)&ntentos% -on@a)&ntentos

 ?mero de intentos reali/ado


8eg:etumericValue
8eg:etumericValue hZey% um&ntentos% 1

8eg-loseZey hZey

 ctuali/amos el $ormulario
La"um;
La"um;sossos'-a
'-ati
tion
on N La agenda
agenda ha sido
sido uti
utili/
li/ada
ada 1 ve/ má)imo
má)imo  P
-on@a)&ntentos P 
(nd &$
(nd &$

(nd :u"
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 93

Curso de Visual Basic Avanzado


Avanzado

rmRe'istro
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
 (,emlo 9 del -urso de Visual Basic van/ado
van/ado

 Eormulario ara introducir los datos del registro de la alicaci#n'
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

Otion ()licit
Arivate :u" ButcetarK-licI
6im hIey()istente s Long
6im :tr-lave s :tring
6im :tr-adena8egistro s :tring

 8egistramos la alicaci#n odríamos comro"ar si es aut0ntico


&$ 8egOenZeyZ(<KLO-LK@-&(% :OE*8(]genda%
:OE*8(]genda% hIey()istente hen

 Lo registramos
:tr-adena8eg
:tr-ad ena8egistro
istro N e
e)t1'e)t
)t1'e)t P 7 P e
e)t2'e)t
)t2'e)t
:tr-lave N 6atos8egistro
&$ 8eg:et:tringValuehIey()istente%
8eg:et:tringValuehIey()istente% :tr-lave% :tr-adena8egistro hen
@sgBo) La alicaci#n ha sido registrada con 0)ito'% % 8egistro
;nload @e
(nd
(nd &$ &$
(nd :u"

Arivate :u" But8egistrarK-licI


;nload @e
(nd :u"

ModRe'istro
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
 (,emlo F del -urso de Visual Basic van/ado
van/ado

 @#dulo donde están las $unciones de acceso al registro y las declaraciones de las A&'
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

Otion ()licit
 A& de maniulaci#n del regi:tro 32 "its
6eclare Eunction O:8eg-loseZey Li" advai32 lias 8eg-loseZey ByVal hZey s Long
s Long
6eclare Eunction O:8eg-reateZey Li" advai32 lias 8eg-reateZey ByVal hZey s
Long% ByVal ls/:u"Zey s :tring% hI8esult s Long s Long
Lon g
6eclare Eunction O:8eg6eleteZey Li" advai32 lias 8eg6eleteZey ByVal hZey s
Long% ByVal ls/:u"Zey s :tring s Long
6eclare Eunction O:8egOenZey Li" advai32 lias 8egOenZey ByVal hZey s Long%
ByVall ls/:u"Zey s :tring% hI8esult s Long s Long
ByVa
6eclare Eunction O:8egHueryValue() Li" advai32 lias 8egHueryValue() ByVal hZey
s Long% ByVal
ByVal ls/Valueame
ls/Valueame s :tring% ByVal
ByVal d+8eserved s Long% ld+ye s Long%
l"6ata s ny% c"6ata s Long s Long
6eclare Eunction O:8eg:etValue() Li" advai32 lias 8eg:etValue() ByVal hZey s
Long% ByVal ls/Valueame s :tring% ByVal d+8eserved s Long% ByVal $d+ye s Long%
l"6ata s ny% ByVal c"6ata s Long s Long
Mlo"al -onst Z(<K-L::(:K8OO N PFGGGGGGG
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 94

Curso de Visual Basic Avanzado


Avanzado

Mlo"al -onst Z(<K-;88(K;:(8 N PFGGGGGG1


Mlo"al -onst Z(<KLO-LK@-&( N PFGGGGGG2
Mlo"al -onst Z(<K;:(8: N PFGGGGGG3
-onst (88O8K:;--(:: N GP

-onst 8(MK:` N 1
-onst 8(MKB&8< N 3
-onst 8(MK6*O86 N 4

 -rea o a"re si ya e)iste una clave en el registro del sistema


Eunction 8eg-reateZeyByVal hZey s Long% ByVal ls/Zey s :tring% hI8esult s Long s
Boolean
On (rror Moo G

&$ O:8eg-reateZeyhZey% ls/Zey% hI8esult N (88O8K:;--(:: hen


8eg-reateZey N rue
(lse
8eg-reateZey N Ealse
(nd &$
(nd Eunction

 socia un valor con nom"re :trValueame N nom"re o sin nom"re :trValueame N 
 con una clave del regi:tro'
Eunction
Euncti on 8eg:et:tring
8eg:et:tringVaValueBy
lueByVa
Vall hZey s Long% ByVal
ByVal strValu
strValueame
eame s :tring%
:tring% ByVal
ByVal
:tr6ata s :tring s Boolean
On (rror Moo G
&$ hZey N G hen ()it Eunction

&$ O:8eg:etValue()hZey%
O:8eg:etValue()hZey% strValueame% GP% 8(MK:`% ByVal :tr6ata% K
Len:tr6ata . 1 N (88O8K:;--(:: hen
8eg:et:tringValue
8eg:et:tringValue N rue
(lse
8eg:et:tringValue
8eg:et:tringValue N Ealse
(nd &$
(nd Eunction

 socia un valor con nom"re strValueame N nom"re o sin nom"re strValueame N 
 con una clave del registro'
Eunction 8eg:etumericValueByVal hZey s Long% ByVal strValueame s :tring% ByVal
l6ata s Long% Otional ByVal
ByVal $Log s Boolean
On (rror Moo G
&$ O:8e
O:8eg:
g:et
etV
Value(
lue()
)hZ
hZey
ey%% st
strV
rVal
alue
ueam
ame%
e% GP
GP%% 8(MK
8(MK6*
6*O8
O86%
6% l6ata
l6ata%% 4 N
(88O8K:;--(:: hen
8eg:etumericValue
8eg:etumericValue N rue
(lse
8eg:etumericValue
8eg:etumericValue N Ealse
(nd &$
(nd Eunction

 "re una clave e)istente en el registro del sistema'


Eunction 8egOenZeyByVal hZey s Long% ByVal ls/:u"Zey s :tring% hI8esult s Long
s Boolean
On (rror Moo G

&$ O:8egOenZeyhZey% ls/:u"Zey% hI8esult N (88O8K:;--(:: hen


8egOenZey N rue
(lse
8egOenZey N Ealse
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 95

Curso de Visual Basic Avanzado


Avanzado

(nd &$
(nd Eunction

 (limina una clave e)istente del regi:tro del sistema'


Eunction 8eg6eleteZeyByVal hZey s Long% ByVal ls/:u"Zey s :tring s Boolean
On (rror Moo G

&$ O:8eg6eleteZeyhZey% ls/:u"Zey N (88O8K:;--(:: hen


8eg6eleteZey N rue
(lse
8eg6eleteZey N Ealse
(nd &$
(nd Eunction

 -ierra una clave a"ierta del registro


Eunction 8eg-loseZeyByVal hZey s Long s Boolean
On (rror Moo G

&$ O:8eg-loseZeyhZey N (88O8K:;--(:: hen


8eg-loseZey N rue
(lse
8eg-loseZey N Ealse
(nd &$
(nd Eunction

 8ecuera los datos de cadena ara un valor con nom"re


 :trValueame N nom"re o sin nom"re :trValueame N 
 dentro de una clave del regi:tro' :i el valor con
 nom"re e)iste% ero sus datos no son una cadena% esta
 $unci#n $allará'
Eunction 8egHuery:tringValueByVal
8egHuery:tringValueByVal hZey s Long% ByVal strValueame s :tring% :tr6ata s
:tring s Boolean
On (rror Moo G

6im lValueye s Long


6im :trBu$ s :tring
6im l6ataBu$:i/e s Long

8egHuery:tringValue N Ealse
8egHuery:tringValue
 O"tiene el tio y longitud de los datos
&$ O:8egHueryValue()hZey%
O:8egHueryValue()hZey% strValueame%
strValueame% GP% lValueye%
lValueye% ByVal
ByVal GP% l6ataBu$:i/e N
(88O8K:;--(:: hen
&$ lValueye
lValueye N 8(MK:` hen
:trBu$ N :tringl6ataBu$:i/e%  
&$ O:8egHueryValue()hZey%
O:8egHueryValue()hZey% strValueame%
strValueame% GP% GP% ByVal
ByVal :trBu$% l6ataBu$:i/e N
(88O8K:;--(:: hen
:tr6ata N Le$t:trBu$% l6ataBu$:i/e 7 1
8egHuery:tringValue
8egHuery:tringValue N rue
(nd &$
(nd &$
(nd &$
(nd Eunction

 8ecuera los datos enteros ara un valor con nom"re


 :trValueame N nom"re o sin nom"re :trValueame N 
 dentro de una clave del regi:tro' :i el valor con nom"re
 e)iste% ero sus datos no son de tio 8(MK6*O86% esta
Eunction
$unci#n $allará'
8egHueryumericValueByVal hZey s Long% ByVal
8egHueryumericValueByVal ByVal strValueame s :tring% l6ata s
Long s Boolean
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 9=

Curso de Visual Basic Avanzado


Avanzado

On (rror Moo G

6im lValueye s Long


6im lBu$ s Long
6im l6ataBu$:i/e s Long

8egHueryumericValue
8egHueryumericValue N Ealse

 O"tiene el tio
l6ataBu$:i/e N 4y longitud de los datos
&$ O:8egHueryV
O:8egHueryValu alue()hZ
e()hZey%
ey% strValu
strValueame%
eame% GP% lValue
lValuey
ye%
e% lBu$% l6ataBu$:i/
l6ataBu$:i/e
e N
(88O8K:;--(:: hen
&$ lValueye
lValueye N 8(MK6*O86 hen
l6ata N lBu$
8egHueryumericValue
8egHueryumericValue N rue
(nd &$
(nd &$
(nd Eunction
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 9C

Curso de Visual Basic Avanzado


Avanzado

AP6(ICE A&A& Eseci%icaciones$ limitaciones ! %ormatos de


arc0ivos de Visual Basic
(n este a0ndice se descri"en los re!uisitos de sistema% las limitaciones de un royecto de
Visual Basic% los tios de archivos !ue se ueden incluir en el royecto de Visual Basic y las
descriciones de los archivos de $ormulario '$rm y de royecto 'v"'

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

Aara las alicaciones de Visual Basic se re!uiere el siguiente hard+are y so$t+are


• @icroso$t *indo+s  3'51 o osterior% o @icroso$t *indo+s 95 o osterior'
• @icrorocesador FG4F= o suerior'
• Aantalla VM o de resoluci#n suerior comati"le con @icroso$t *indo+s'
• F @B de 8@ ara alicaciones' (sto variará deendiendo de las "i"liotecas de tios o los
archivos 6LL esecí$icos !ue incluya en sus alicaciones'
• 1= @B de 8@ ara el entorno de desarrollo de Visual Basic'

Limitaciones de los 'ro!ectos

;n ?nico royecto uede contener hasta 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 más 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 límite en cuanto al n?mero de o",etos distintos de un royecto'

Limitaciones de controles

-ada control no grá$ico todos los controles e)ceto Sha'e% Line


Line,, Ima#e y Label utili/a una
ventana' -ada ventana utili/a recursos del sistema% limitando el n?mero total de ventanas !ue
u
ued
eden
en e)
e)is
istitirr al mism
mismo
o tiem
tiemo'
o' (l lílími
mite
te e)ac
e)acto
to deen
deende
de de lo loss re
recu
curs
rsos
os del sist
sistema
ema
disoni"les y el tio de controles !ue se utilicen'
Aara reducir el consumo
consumo de recursos% utilice controles
controles Sha'e Line,, Label e Ima#e en ve/ de
Sha'e,, Line
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' o o"stante% hay un límite $i,o de 254
nom"res de control or $ormulario' (n este límite una matri/ de controles s#lo cuenta como
uno% ya !ue todos los controles en la matri/ comarten un ?nico nom"re de control'
(l límite ara índices de matrices de controles es de G a 32'C=C ara todas las versiones'
:i coloca controles uno encima de otro% como or e,emlo
e,emlo si utili/a
utili/a varios controles de marco
dentro de otros marcos% Visual Basic no acetará más de seis niveles de controles anidados'
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 9F

Curso de Visual Basic Avanzado


Avanzado

#imitaciones ara determinados controles

La siguiente ta"la muestra las limitaciones de roiedades alica"les a determinados controles


de Visual Basic

Proieda
List edad y Alitroles
-on ca)l
-ontrola)es
le ade cuadro
cuadro de #imn?mero
(l itació
ción má)imo de elementos es 32 ZB> el
ListCount lista y cuadro com"inado límite del tamaDo de cada elemento es 1 ZB
1G24 "ytes'
Te*t -ontr
ontrolol de cuadruadroo de (l límite es de =4 ZB'
te)to
Ca'tion -ontrol de eti!ueta Limitado a 1G24 "ytes'
-ont
-o ntrorole
less de "o"ot#
t#n
n de Limitados
Limita dos a 255 caracteres'
caracteres' :e truncan todos los
comanand do% casilla de títulos !ue sueren ese límite' Los títulos en las
veri$
eri$iicaci
caci#n
#n%% marc
marcoo y roie
ro iedade
dadess de los control
controles
es erson
ersonali
ali/ad
/ados
os
"ot#n de oci#n tienen un límite de 32 ZB'
-ontrol de men? Limitado a 235 caracteres'
Ta# odos lo los co
contr
tro
oles Limitado s#
s#lo or
or la me
memor
oriia di
diso
on
ni"l
"le'
e'
)ame odos los co controles Limitado a 4G caracteres'

Limitaciones de códi#o

La cantidad de c#digo !ue se uede cargar en un $ormulario% clase o m#dulo estándar está
limitada a =5'534 líneas' ;na ?nica línea de c#digo uede constar de 1'G23 "ytes como
má)imo'' Auede ha"er hasta 25= esacios en "lanco delante del te)to en una ?nica línea y no
má)imo
se ueden incluir más de veinticinco caracteres de continuaci#n de línea  K en una ?nica línea
l#gica'

Procedimientos$ tios ! varia)les


o hay límite en cuanto al n?mero de rocedimientos
rocedimientos or m#dulo' -ada rocedimiento
rocedimiento uede
contener hasta =4 ZB de c#digo' :i un rocedimiento o un m#dulo e)cede este límite% Visual
Basic genera un error en tiemo de comilaci#n' :i se encuentra con este error% uede evitarlo
dividi
dividiendo
endo los rocedim
rocedimien
ientos
tos e)trem
e)tremada
adament
mente e grandes
grandes en varios
varios rocedi
rocedimie
miento
ntoss más
e!ueDos o trasladando las declaraciones de nivel de m#dulo a otro m#dulo'
Vi
Visua
suall Basic
Basic utili/
utili/a
a ta"las
ta"las ara
ara almacen
almacenarar los nom"res
nom"res de los identi
identi$ic
$icador
adores
es varia
varia"le
"les%
s%
rocedimientos% constantes% etc' en el c#digo' -ada ta"la está limitada a =4 ZB'

Ta)la de entradas de módulo


(sta ta"la aceta hasta 125 "ytes or m#dulo% con un límite total de =4 ZB% !ue da como
resultado unos 4GG m#dulos or royecto'
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 99

Curso de Visual Basic Avanzado


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$ módulos est8ndar ! módulos de clase

-ada
uede$ormulario% m#dulode
ser como má)imo estándar
=4 ZB' y(ste
m#dulo de clase
segmento tiene contiene
de datos su roiolos
segmento dedatos
siguientes datos !ue
• Varia"les locales declaradas con Static'
Varia"les
• Varia"les a nivel de m#dulo !ue no sean matrices y cadenas de longitud varia"le'
• 4 "ytes ara cada matri/ 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 límite de =4 ZB% Visual Basic generará un error de
tiem
tiemoo de cocom
mililac
aci#
i#n'
n' :i se enencu
cuen
entr
tra
a con
con este
este er
erro
ror%
r% u
ued
ede
e ev
evititarl
arlo
o divid
dividie
iendo
ndo los
r
roc
oced
edimi
imien
entos
tos e)tr
e)trema
emadadame
ment
nte
e gran
grandes
des en vari
varios
os roce
rocedi
dimi
mien
ento
toss másmás e
e!u!ueD
eDos
os o
trasladando las declaraciones a nivel de m#dulo a otro m#dulo'

Tios de%inidos or el usuario


inguna varia"le de un tio de$inido
inguna de$inido or el usuario uede e)ceder los =4 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 =4 ZB
las 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 t0rminos de otros tios de$inidos or el usuario% ero el tamaDo
total de los tios no uede e)ceder los =4 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 estáticas y a nivel de m#dulo no ocuan esacio de ila or!ue se
en
encu
cuen
entr
tran
an en el segmen
segmentoto de dato
datoss ara
ara los
los $o
$orm
rmul
ular
ario
ioss o los m#dul
m#dulos'
os' odo
doss lo
loss
rocedimientos de 6LL a los !ue se llame utili/an esta ila mientras se están e
e,ecutando'
,ecutando'

Visual Basic utili/a 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


lgunas limitaciones de Visual Basic y las alicaciones creadas con 0l están imuestas or
@icroso$t *indo+s' (stas limitaciones ueden cam"iar cuando se instala una versi#n di$erente
de @icroso$t *indo+s'

Recursos de Findo7s
-ada
-ad a ventan
ventana
a a"ierta
a"ierta usa recurso
recursoss del sis
sistem
tema
a ár
áreas
eas de datos
datos uti
utili/
li/adas
adas or @icros
@icroso$t
o$t
*indo+s' :i se agotan los recursos del sistema% se roducirá un error en tiemo de e,ecuci#n'
Auede comro"ar el orcenta,e de recursos del sistema !ue !uedan si elige Acerca de en el
men? A!uda del dministrador de rogramas o del dministrador de archivos en *indo+s 
3'51 o% en *indo+s 95 y *indo+s  4'G% si elige Acerca de en el men? A!uda del ()lorador
de *indo+s'
*indo+s' Las alicaciones
alicaciones tam"i0n
tam"i0n ueden llamar a la $unci#n MetEree:yst
MetEree:ystem8esou
em8esources
rces
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 1GG

Curso de Visual Basic Avanzado


Avanzado

de el A& de *indo+s ara reclamar recursos del sistema% cerrar ventanas como $ormularios
a"iertos y ventanas de c#digo% así como ventanas de otras alicaciones y $inali/ar la e,ecuci#n
de alicaciones'

Formatos de archivos de 'ro!ecto

@icroso$t Visual Basic utili/a


@icroso$t utili/a y crea una serie de archiv
archivos
os tanto en tiemo de diseDo como en
tiemo de e,ecuci#n' Los archivos !ue el royecto o la alicaci#n re!uerirán deenden de su
alcance y $uncionalidad'

E/tensiones de arc0ivos de ro!ecto


Visual Basic crea varios archivos cuando se crea y comila un royecto' (stos se ueden
dividir como sigue tiemo de diseDo% otros desarrollos y tiemo de e,ecuci#n'
Los archivos de tiemo de diseDo son los ladrillos de su royecto or e,emlo% m#dulos de
Basic '"as y m#dulos de $ormulario '$rm'
Otros rocesos y $unciones del entorno de desarrollo de Visual Basic crean diversos archivos
or e,emlo% archivos de deendencias del sistente ara instalaci#n 'de'

Arc0ivos varios ! de tiemo de diseo


La siguiente ta"la muestra todos los archivos de tiemo de diseDo y otros archivos !ue se
ueden crear al desarrollar una alicaci#n

E/tensión (escrición
'"as @#dulo de Basic
'cls @#dulo de clase
'ctl rchivo de control de usuario
'ct) rchivo "inario de control de usuario
'dca -ach0 de diseDador activo
'de rchivo de deendencias del sistente de instalaci#n
'do" rchivo de $ormulario de documento ctive
'do) rchivo "inario de $ormulario de documento ctive
'dsr rchivo de diseDador activo

'ds) rchivo "inario de diseDador activo


'$rm rchivo de $ormulario
'$r) rchivo "inario de $ormulario
'log rchivo de registro de errores de carga
'oca rchivo de cach0 de "i"lioteca de tios de controles
'ag rchivo de ágina de roiedades
'g) rchivo "inario de ágina de roiedades
'res rchivo de recursos
's+t rchivo de
de l
lantilla de
del sistente de
de iin
nstalaci#n de Vi
Visual Ba
Basic
'tl" rchivo yeLi" de utomati/aci#n remota
'v"g rchivo de royecto de gruo de Visual Basic
'v"l rchivo de control de licencia
'v" rchivo de royecto de Visual Basic
'v"r rchivo de registro de utomati/aci#n remota
'v"+ rchivo de esacio de tra"a,o de royecto de Visual Basic
'v"/ rchivo de inicio del sistente
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 1G1

Curso de Visual Basic Avanzado


Avanzado

Arc0ivos de tiemo de e+ecución


l comilar la alicaci#n% todos los archivos necesarios de tiemo de e,ecuci#n se incluyen en
los archivos e,ecuta"les de tiemo de e,ecuci#n' La siguiente ta"la muestra los archivos de
tiemo de e,ecuci#n

E/tensión (escrición
'dll -omonente ctive en roceso
'e)e rchivo e,ecuta"le o comonente ctive
'oc) -ontrol ctive
'v"" rchivo de inicio de documento ctive
'v"d rchivo de estado de documento ctive

Estructuras de %ormularios
 esar de !ue muchos de los lo s archivos de un tíico royecto
ro yecto de Visual Basic están en $ormato
$ ormato
"inario y s#lo los ueden leer determinados rocesos y $unciones de Visual Basic o de su
alicaci#n% los archivos de $ormulario '$rm y de royecto 'v" se guardan como te)to :-&&'
(stos archivos se ueden leer en un visor de te)to or e,emlo% el Bloc de notas'
(n las siguientes secciones se descri"en los archivos de tiemo diseDo y de tiemo de
e,ecuci#n en un royecto tíico de Visual Basic y el $ormato de los archivos de $ormulario '$rm
y de royecto 'v"'
Los archivos de $ormulario de Visual Basic '$rm se crean y se guardan en $ormato :-&&' La
estructura de un $ormulario consiste en lo siguiente
• (l n?mero de versi#n del $ormato de archivo'
• ;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 están anidados en
el $ormulario' Los controles contenidos en otros controles tienen sus roiedades anidadas en
el te)to del contenedor' La $igura '1 ilustra la estructura de la descrici#n del $ormulario'
6Qmero de versión
(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' l 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 diálogo de advertencia ara in$ormar !ue el archivo se guardará en el nuevo $ormato'
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 1G2

Curso de Visual Basic Avanzado


Avanzado

i'ura A.1 Estructura de


de la descrición del %ormulario
%ormulario

(escrición del %ormulario


La descri
descrici
ci#n
#n de un $or
$ormula
mulario
rio emie/a
emie/a con una instruc
instrucci#n Be'in y termina con una
ci#n
instrucci#n End' La sinta)is de la instrucci#n Be'in es la siguiente
Be'in VB'ormbM(Iorm nombre_formulario
La instrucc i#n End indica d#nde termina la descrici#n del $ormulario y d#nde emie/a el
instrucci#n
con,unto
con,un to de atri"utos
atri"utos del $ormulario' instrucci#n End% Visual Basic intentaría leer los
$ormulario' :in la instrucci#n
atri"utos como si se estuvieran descri"iendo los controles y las roiedades del $ormulario% or
lo !ue se roducirían errores'
(ntre las instrucciones Be'in orm y End están las roiedades
roiedades del $ormulario
$ormulario roiamente
roiamente
dicho% seguidas de las descriciones de cada control del $ormulario' La $igura '2 muestra la
estructura anidada de la descrici#n del $ormulario con más detalle'

Bloues de control
;n blo'
blo'ue control cons
ue de control consta
ta de
dell te)t
te)to
o de la desc
descri
rici
ci#n
#n de
dell $o
$orm
rmul
ulari
ario
o !u
!uee de
de$i$ine
ne la
lass
roiedades de un control individual' l igual !ue la descrici#n del $ormulario% los "lo!ues de
control emie/an 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 siguiente
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 )loues de control


(l orden de los "lo!ues de control determina el orden / de los controles' (l orden z es una

ordenaci#n (l
$ormulario' relativa
rimer!ue determina
control la manera del
de la descrici#n en la !ue los controles
$ormulario esta"lecese solaan
la arte entredel
in$erior sí orden
en un
/' Los controles !ue aarecen osteriormente en la descrici#n del $ormulario están más arri"a
en el orden / y% or tanto% solaan a los !ue están más a"a,o en dicho oorden'
rden'
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 1G3

Curso de Visual Basic Avanzado


Avanzado

Bloues de control incrustados


lgunos controles ueden contener otros
ot ros controles' -uando un control está contenido en otro%
su "lo!ue de control está incrustado en el "lo!ue de control del contenedor' Auede incrustar
"lo!ues de control dentro de
• @arcos
• -uadros de imágenes
• @en?s
• -ontroles ersonali/ados% deendiendo de su o",etivo
Los controles incrustados se utili/an 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are/can desu0s de los "lo!ues de control incrustados'

i'ura A.* Estructura anidada


anidada de la descrición
descrición 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 :-&&% esera encontrar todos los controles de men?
,untos' ;na ve/ !ue detecta un control !ue no es de men? a continuaci#n de uno o más
controles de men?% suone !ue no hay más controles de men? en el $ormulario y asa or alto
cual!uier control de men? !ue encuentre durante la carga de ese $ormulario'
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 1G4

Curso de Visual Basic Avanzado


Avanzado

Teclas de m:todo a)reviado


Las teclas de m0todo a"reviado son teclas !ue se utili/an ara activar un control de men?' Los
$orm
$ormul
ular
arios
ios :-&
:-&&& usan
usan la mism
mismaa sinta
sinta)i
)iss !ue
!ue la in
inst
struc
rucci
ci#n
#n SendOe!s ara
ara de$inir
de$inir las
com"inaciones de teclas T.U N @<:-;L:% TU N -8L y TEnU N tecla de $unci#n% donde n
es el n?mero de la tecla' Los caracteres al$a"0ticos se reresentan a sí mismos' La sinta)is de
las teclas de m0todo a"reviado es la siguiente

@0to
@0todo
do a"
a"re
revi
viad
ado
o N E4
E4  \-8
\-8L
L\E
\E4
4

Comentarios en la descrición del %ormulario


Auede agregar comentarios a la descrici#n del $ormulario' Las comillas simles  son los
delimitadores de los comentarios'

Proiedades de la descrición de un %ormulario


-uando
-uan do ViVisu
sual
al Ba
Basi
sicc guar
guarda
da un $o$orm
rmul
ular
ario
io%% orga
organi
ni/a
/a la
lass r
ro
oie
ieda
dade
dess en un or
orde
den
n
redeterminado' o o"stante% al crear un $ormulario las roiedades se ueden organi/ar 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 $ormulario
ad = valor
propiedad
propied
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 T Tru
ruee y G ara
ara alse' Visual Basic interreta todos los
distintos de f 1 o G como True' Las roiedades con valores enumerados incluyen sus
valoress distintos
valore
valores num0ricos con la descrici#n del valor incluida como comentario' Aor e,emlo% la
roiedad BorderSt!le aarece así

Border:tyle N G  inguno
Valores )inarios de roiedades
lgunos 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 ersonali/ados' Visual Basic guarda todos los datos "inarios de un $ormulario en un
archivo de datos "inario aarte del $ormulario'
Visual Basic guarda el archivo de datos "inario en el mismo directorio !ue el $ormulario' (l
archivo de datos "inario tiene el mismo nom"re !ue el $ormulario% ero con la e)tensi#n '$r)'
Visual Basic lee el archivo de datos "inario cuando carga el $ormulario% or lo !ue el archivo de
datos "inario '$r) de"e estar disoni"le ara el $ormulario cuando Visual Basic lo carga' :i
comarte
comar te $ormularios con otras ersonas !ue usan un archivo
archivo de datos "inario% aseg?rese de
roorcionar el archivo de datos "inario '$r)% además del $ormulario '$rm'

Las roiedades !ue tengan datos "inarios como valores aarecen en el $ormulario como una
re$erencia a un desla/amiento de "yte en el archivo de datos "inario' Aor e,emlo% el valor de
una roiedad Picture aarece de la siguiente manera en la descrici#n de un $ormulario
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 1G5

Curso de Visual Basic Avanzado


Avanzado

Begin VB'&mage img6emo


Aicture N @i$orm'$r)G2(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ie/an en el "yte 2(B he) del archivo @i$orm'$r)'

Proiedad Icon
(l valor
valor de la roie
roieda
dadd Icon de un $ormulario deende de !u0 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 rroiedad Icon Contenido del %o%ormulario ASCII


(l icono redeterminado o hace re$erencia a la roiedad Icon
inguno &con N G
-ual!u
-ua l!uier
ier ic
icono
ono distin
distinto
to del icono
icono 8e$erencia de desla/amiento de "yte
redeterminado al arc
archiv
hivo de dat atos
os "in
inar
ario
io'' Aor
e,emlo
&con N @i$orm'$r)GGGG

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 ve/ !ue est0n cargados todos los demás controles'

2nidades de medida
(l tamaDo de los controles% las coordenadas ) e y% así como otros valores de roiedades !ue
utilicen
utilicen unidades de medida se e)resan
e)resan en t+is'
t+is' -uando un control
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 :-&& a las unidades de medida eseci$icadas or la roiedad ScaleMode'

Valores de colores
Los valores de colores aarecen como valores 8MB ro,o% verde y a/ul' Aor e,emlo% la
roiedad oreColor aarece de esta manera
Eore-olor N PGGEEGGGGP
Visual valoress de BColor% convirti0ndolos
Visual Basic tam"i0n uede leer valore convirti0ndolos a 8MB cuando carga el
$ormulario' Los $ormularios :-&& !ue utilicen valores de BColor de"en usar esta sinta)is
oreColor = BColor'bcolor
donde 'bcolor es un valor de G a 15'
O"serv
O"se rve
e !u
!ue
e el argume
argumentnto
o 'bcolor corresonde a los valores de color utili/ados or las
instrucciones grá$icas en otras versiones de Basic% como Visual Basic ara @:76O:% @icroso$t
HuicIBasic y el :istema de desarrollo ro$esional
 ro$esional @icroso$t Basic'
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 1G=

Curso de Visual Basic Avanzado


Avanzado

?)+etos de roiedades
lgunos 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
están delimitados or las instrucciones Be'inProert! y EndProert! de la siguiente $orma
Be'inProert! nombre_propiedad
propiedad<
propiedad< = valor<
propiedad = valor
propiedad
'
'
'
EndProert!

Códi'o de Basic
(l c#digo
c#digo de Basic
Basic aarec
aarecee en el $or
$ormul
mulari
ario
o inmedi
inmediata
atamen
mentete desu0s
desu0s de la secci#
secci#n
n de
atri"utos%
atri"utos% a continuaci#n
continuaci#n de la ?ltima instrucci#n
instrucci#n End en la descrici#n del $ormulario' Las
instrucciones en la secci#n 6eclaraciones 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' l reali/ar cam"ios en el $ormulario y guardar los cam"ios% Visual Basic vuelve a
escri"ir el archivo en $ormato :-&&'
-uando Visual Basic se encuentra con un error mientras está cargando un $ormulario% crea un
archivo de registro e in$orma del error en el archivo de registro' Visual Basic agrega mensa,es
de error al archivo de registro cada ve/ !ue se encuentra con un error en el $ormulario' -uando
se ha terminado de cargar el $ormulario% Visual Basic resenta un mensa,e !ue indica !ue se
cre# un archivo de registro de errores'
(l archivo de registro tiene el mismo nom"re !ue el archivo de $ormulario% ero con la e)tensi#n
'log' Aor e,emlo% si se roducen errores mientras se carga @i$orm'$rm% Visual Basic creará un
archiv
arc hivo
o de regist
registro
ro llamad
llamadoo @i$orm
@i$orm'lo
'log'
g' :i oster
osterior
iorment
mente
e vuelve
vuelve a cargar
cargar @i
@i$orm
$orm'$r
'$rm
m y
contin?an roduci0ndose errores mientras se carga el $ormulario% Visual Basic reemla/ará el
archivo @i$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 archivo 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' o 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 est0 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"i0n aarece si Visual Basic encuentra un control de men? cuyo men? rimario tiene su
r
roi
oiedad C0eced esta"
edad esta"le
lecida a True' Los controles de men? !ue act?an como rimarios ara los
cida
controles
de men?' de men? en un su"men? no ueden tener esta roiedad activada' Visual Basic no carga el control
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 1GC

Curso de Visual Basic Avanzado


Avanzado

Imosi)le esta)lecer la roiedad C0eced 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
C0eced 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 C0eced'
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
m0todo a"reviado de$inida' Los men?s de nivel suerior no ueden tener una tecla de m0todo 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 válidas 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 válidas'
El co
cont
ntro
roll 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 ve/ de un nom"re de roiedad !ue
no se coloca entre comillas' Aor e,emlo
-ation N -omen/ar la demostraci#n
(n este caso% el nom"re de roiedad Cation no de"ería estar entre comillas' Visual Basic asa or alto la
línea 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 válida en Visual Basic' Visual Basic no
cargará el control'
El nom)re de control es demasiado lar'o truncado a nombre7control .
(ste mensa,e aarece si Visual Basic encuentra un nom"re de control con más 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 archivo o si $alta la rimera
instrucci#n Be'in'

El no
nom)
m)rere de
%ormulario. dell %orm
%ormul
ular
ario
io o de M(I
M(Ior
orm
m nombre7,ormulario no es v8l v8lido
ido im
imosi
osi)l
)lee car
car'ar
'ar este
(ste mensa,e aarece si el nom"re de un $ormulario no es una cadena válida en Visual Basic' Visual Basic
no cargará el $ormulario'
Las cadenas
cadenas válida
válidass de"en
de"en eme/a
eme/arr con una letra%
letra% s#lo ueden
ueden incluir
incluir letras
letras%% n?meros
n?meros y signos
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
mensa,e aarece si el nom"re de una roiedad no es una cadena válida
válida en Visual
Visual Basic o tiene más
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 Ordovás Oromendía y Vicente Lema Osca 1GF

Curso de Visual Basic Avanzado


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 válido 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
archivo al !ue aarece
se re$ieresiro"a"lemente
Visual Basic noun
udo usarde
archivo una re$erencia
datos "inariode nom"re
ara de archivo'
el $ormulario (sto
no se ocurrirá en
encuentra si el
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' Aor e,emlo
Aro3GG N 543=
Visual Basic asa or alto la línea de la descrici#n del $ormulario !ue 
rodu,o
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' Aor e,emlo
o N -ah
-ahrr22
22  (n
(n re
real
alid
idad
ad se dese
desea"a"a
a--ha
har
r22
22'
'
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"ería aarecer
entre comillas' Aor e,emlo
-ation N -omen/ar la demostraci#n
Visual Basic asa or alto la línea de la descrici#n del $ormulario !ue 
rodu,o
rodu,o este error'
Error de sinta/is& la roiedad nombre7'ro'iedad del control nombre7control no tiene un =.
(ste mensa,e aarece si Visual Basic encuentra un nom"re y un valor de roiedad sin un signo igual entre
ellos' Aor e,emlo
e)t -omen/ar la
la de
demostraci#n
Visual Basic no carga la roiedad'

ormato del arc0ivo de ro!ecto ,.v)-


Visual Basic
royecto siemre
contiene guarda
entradas losre$le,an
!ue archivos
losde royecto
valores 'v"
de su en $ormato
royecto' :-&&'se(lincluyen
(ntre estos archivo los
de
$ormularios y m#dulos del royecto% re$erencias% ociones varias !ue ha elegido ara controlar
la comilaci#n% etc'
(sta es la aariencia !ue de"e tener un archivo 'v"' (ste royecto incluye m#dulos guardados
con los nom"res de clase y de archivo !ue se muestran en la siguiente ta"la'
Tio de módulo 6om)re de clase 6om)re de arc0ivo
Eormulario @6& Eorm KEorm'$rm
Eormulario BEorm BKEorm'$rm
@#dulo estándar -@odule -K@odule'"as
@#dulo de clase 6-lass 6K-lass'cls
yeN()e
EormNBKEorm'$rm
8e$erenceN[]MGGG2G43G7GGGG7GGGG7-GGG7
GGGGGGGGGG4=2'GG'']'']'']*&6O*:]:<:(@]:6OL(2'LBOL(
EormNKEorm'$rm utomation
@oduleN-@odule> -K@odule'"as
-lassN6-lass> 6K-lass'cls
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 1G9

Curso de Visual Basic Avanzado


Avanzado

:tartuNBEorm
-ommand32N
ameNAro,ect1
el-onte)t&6NG
-omati"le@odeNG
@a,orVerN1
@inorVerNG
8evisionVerNG
uto&ncrementVerNG
:erver:uortEilesNG
Version-omanyameN@icroso$t
-omilationyeNG
Otimi/ationyeNG
EavorAentiumArotmNG
-odeVie+6e"ug&n$oNG
oliasingNG
Bounds-hecING
Over$lo+-hecING
ElAoint-hecING
E6&V-hecING
;nroundedEANG
:tart@odeNG
;nattendedNG
hreadAerO",ectNG
@a)um"erO$hreadsN1
:e agregan entradas al archivo 'v" cuando agrega $ormularios% m#dulos% comonentes% etc' al
royecto' am"i0n se agregan entradas cuando esta"lece ociones ara el royecto' @uchas
de estas ociones se esta"lecen mediante el cuadro de diálogo Proiedades del ro!ecto'
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 11G

Curso de Visual Basic Avanzado


Avanzado

A:ndice B& Convenciones de codi%icación


(ste a0ndice 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 están en$ocadas a la
l#gica del rograma% sino a su estructura y aariencia $ísica' Eacilitan la lectura% comrensi#n y
mantenimiento del c#digo' Las convenciones de codi$icaci#n ueden incluir
• -onvenciones de nom"res ara o",etos% varia"les y rocedimientos'
• Eormatos estandari/ados ara eti!uetar y comentar el c#digo'
• &nstrucciones de esaciado% $ormato y sangría'
(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,icación

La ra/#n rincial de usar un con,unto coherente de convenciones de c#digo es estandari/ar la


estructura
estructura y el estilo de codi$icaci#
codi$icaci#n
n de una alicaci#n
alicaci#n de $orma !ue el autor y otras ersonas
ersonas
uedan leer y entender el c#digo $ácilmente'

Las convenciones
legi"le de codi$icaci#n
y sin am"igedad% correctas dan
!ue es coherente como convenciones
con otras resultado un c#digo $uenteyreciso%
del lengua,e lo más
intuitivo osi"le'

Convenciones de codi,icación mBnimas

;n con,unto de convenciones de codi$icaci#n de ro#sito general de"e de$inir los re!uisitos


mínimos 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 hacer !ue el rograma sea $ácil de leer y de entender
entender sin o"struir
o"struir la creatividad
creatividad
natural del rogramador con imosiciones e)cesivas y restricciones ar"itrarias'
Aor tanto% las convenciones sugeridas en este a0ndice son "reves y sugerentes' o muestran
todo
todoss lo
loss o"
o",e
,etos
tos y cont
contro
role
less osi
osi"l
"les
es%% ni esec
eseci$i$ic
ican
an to
todo
doss lo
loss tios
tios de co
comen
menta
tari
rios
os
in$ormativos !ue odrían ser ?tiles' 6eendiendo del royecto y de las necesidades esecí$icas

de la organi/aci#n%
adicionales como !ui/ás desee amliar estas instrucciones ara !ue incluyan elementos
• -onvencion
-onvenc iones
es ara
ara o",eto
o",etoss esecí
esecí$ic
$icos
os y comon
comonententes
es desarr
desarroll
ollados
ados interna
internament
mente
e o
comrados a otros roveedores'
• Varia"les
Varia"les !ue descri"an las actividades comerciales
come rciales o instalaciones de la organi/aci#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 coherente !ue $acilite la identi$icaci#n del tio
de o",eto'  continuaci#n se o$rece una lista de convenciones recomendadas ara algunos de
los o",etos ermitidos or Visual Basic'

Pre,i&os su#eridos 'ara controles


󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 11
111
1

Curso de Visual Basic Avanzado


Avanzado

Tio de control Pre%i+o E+emlo


Aanel 36 nl nlMruo
Bot#n animado ani aniBu/#n
-asilla de veri$icaci#n chI chI:#loLectura
-uadro
-ua dro com"ina
com"inado%do% cuadro
cuadro de lista
lista c"o c"o&ngl0s
deslega"le
Bot#n de comando cmd cmd:alir
6iálogo com?n dlg dlgrchivo"rir
-omunicaciones com comEa)
-ont
-o ntro
roll d
dent
entro
ro de roc
roced
edimi
imien
ento
toss ctr ctrctivo
cuando no se conoce el tio
esecí$ico
-ontrol de datos dat datBi"lio
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 112

Curso de Visual Basic Avanzado


Avanzado

-uadro com"inado enla/ado a datos d"c"o d"c"oLengua,e


-uadrícula enla/ada a datos d"grd d"grd8esultado-onsulta
-uadro de lista enla/ado a datos d"lst d"lstioarea
-uadro de lista de directorios dir dirOrigen
-uadro de lista de unidades drv drv6estino
-uadro de lista de archivos $ il $ilOrigen
Eormulario $rm $rm(ntrada
@arco $ra $raLengua,e
@edidor gau gau(stado
Mrá$ico gra gra&ngresos
-uadrícula grd grdArecios
Barra de desla/amiento hori/ontal hs" hs"Volumen
&magen &mage img img&cono
(stado de tecla Iey Iey@ay?sculas
(ti!ueta l"l l"l@s,yuda
Línea lin linVertical
-uadro de lista l st lst-#digos6eAolítica
@ensa,e @A& mm mm(nviar@s,
:esi#n @A& ms ms:esi#n
@-& m ci mciVídeo
Eormulario @6& secundario mdi mdiota
@en? mnu mnurchivo"rir
@: Ele) Mrid m sg msg-lientes
@: a" mst mstArimero
ctive ole oleo,a6era"a,o
(s!uema out out6iagrama6eOrg
Aen B(dit "ed "edom"re
Aen edit hed hedEirma
ra/o de luma inI inI@aa
&magen Aicture ic icVM
-li de imagen cl  clBarra6eerramientas
&n$orme rt rtMananciasrimestre1

E
-ouramdaro de n?mero sshn sshn
A
-áírgciunlaos
-uadro de te)to t)t t)tellido
-ron#metro tmr tmrlarma
rri"a7a"a,o ud ud6irecci#n
Barra de desla/amiento ve
vertical vs" vs"Velocidad
-ontrol desli/ante sl d sld(scala
Lista de imágenes ils ilsodosLos&conos
Vista de ár"ol tre treOrgani/aci#n
Barra de herramientas tl" tl"cciones
a":tri ta" ta"Ociones
Barra de estado sta staEechaora
Lista lv+ lv+(nca"e/ados
Barra de rogreso rg rg-argarrchivo
8iche)tBo) rt$ rt$&n$orme
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 113

Curso de Visual Basic Avanzado


Avanzado

Pre,i&os su#eridos 'ara los ob&etos de acceso a datos DA+

;se los re$i,os siguientes ara indicar O",etos de acceso a datos 6O'

?)+eto de )ase de datos Pre%i+o E+emlo


-ontenedor con con&n$ormes

Baostoerddeed"aato
@ ses de datos d
d""e d"
d "e-Jueetntas
6ocumento doc doc&n$ormeVentas
-amo $ld $ld6irecci#n
Mruo gr grEinan/as
ndice id) id)(dad
Aarámetro rm rm-#digoarea
6e$inici#n de consulta !ry !ryVentasAor8egi#n
-on,unto de registros rec recArevisi#n
8elaci#n rel rel6et6e(mleados
6e$inici#n de ta"la t"d t"d-lientes
;suario usr usruevo
(sacio de tra"a,o + s +s@ío

lgunos e,emlos
6im d"Bi"lio s 6ata"ase
6im rec(ditores@6 s 8ecordset% str&nstruc:HL s :tring
-onst 6BK8(6OL< N 4  (sta"lece la constante'
"re la "ase de datos'
:et d"Bi"lio N Oen6ata"aseB&BL&O'@6B
 (sta"lece el te)to ara la instrucci#n :HL'
str&nstruc:HL N :(L(- [ E8O@ (ditores *(8( (stado N @6
 -rea el nuevo o",eto 8ecordset'
:et rec(ditores@6 N d"'Oen8ecordsetstr&nstruc:HL% K
d":#loLectura

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

Las alicaciones suelen usar muchos controles de men?% lo !ue hace ?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 más allá de la eti!ueta inicial mnu% agregando un re$i,o adicional ara cada
nivel de anidamiento% con el título del men? $inal en la ?ltima osici#n de cada nom"re' (n la
ta"la siguiente hay algunos e,emlos'
Sec
ecu
uen
enci
ciaa del t3
t3tu
tulo
lo del men
enQ
Q 6om
6om)re
)re del contr
ontrol
olad
ador
or del menQ
enQ
rchivo "rir mnurchivo"rir
rchivo (nviar correo mnurchivo(nviar-orreo
rchivo (nviar $a) mnurchivo(nviarEa)
Eormato -arácter mnuEormato-arácter
yuda -ontenido mnuyuda-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 Aroiedades de Visual Basic' demás%
los nom"res del control de men? documentan claramente los elementos de men? a los !ue
están ad,untos'

Selección de 're,i&os 'ara otros controles


󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 114

Curso de Visual Basic Avanzado


Avanzado

Aara los controles no mostrados arri"a% de"e intentar esta"lecer un estándar de re$i,os ?nicos
de do
doss o tres
tres cara
caract
cter
eres
es !u
!ue
e sean
sean cohere
coherent
ntes
es'' :ola
:olame
ment
nte
e se de
de"e
"en
n us
usar
ar más
más de tr tres
es
caracteres si roorcionan más claridad'
Aara controles derivados o modi$icados% or e,emlo% amlíe los re$i,os anteriores ara !ue no
ha
haya
ya du
duda
dass so
so"r
"re
e !u0
!u0 cont
control
rol se está
está usanusando
do realm
realmen
ente
te'' Aara
Aara lo
loss co
cont
ntrol
roles
es de otros
otros
r
rov
ovee
eedor
dores%
es% se de"e
de"e ag
agreg
regar
ar al re$
re$i,i,o
o una
una a"revi
a"reviatu
atura
ra de
dell no
nom"r
m"re e de
dell $a"ri
$a"rica
cant
nte
e en
min?sculas'
min?sc ulas' Aor e,emlo%
e,emlo% una instancia de control creada
creada a artir del marco 36 incluido en la
(dici
(dici#n
#n ro$esional
!u0 control de Visual
Visurealmente'
se está usando al Basic odría llevar el re$i,o
re$i,o $ra3d ara evitar con$usiones
con$usiones so"re

Convenciones de nombres de constantes ! variables

demás de los o",etos% las constantes y varia"les tam"i0n


tam "i0n re!uieren convenciones de nom"res
"ien comuestas' (n esta secci#n se muestran las convenciones recomendadas ara las
co
cons
nsta
tant
ntes
es y vari
varia"l
a"les
es ermi
ermititida
dass or Visu
Visual
al Basi
Basic'
c' am"i0n
m"i0n se e) e)l
lic
ican
an cu
cues
estitione
oness
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
?"licas ueden crear má!uinas de estado enormemente comle,as y hacer la l#gica de una
alicaci#n muy di$ícil de entender' Las varia"les glo"ales tam"i0n hacen mucho más di$ícil
mantener y volver a usar el c#digo'
(n Visual Basic las varia"les ueden tener el alcance
a lcance siguiente

Alvel
icalndde
ive cee ro
roce
cedi
dimi
mien
ento
to (
Aeriva
Aricvate
late
ra cen
ión roc
roced
edim
imie
ient
nto%
o% Visrocedimiento
(l i)le en en el !ue
su"rocedimiento o $unci#n está declarada
ivel de m#dulo Arivate en la secci#n odos los rocedimientos del
6eclaraciones de un m#du
m# dulo
lo de $ormu
$ormula
lari
rio
o o de
m#dulo de $ormulario o de c#digo
c#digo '$rm% '"as
Mlo"al Au"lic en la secci#n (n toda la alicaci#n
6eclaraciones de un
m#dulo de c#digo '"as
(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 haya !ue usar
varia"
varia"les
les glo"ale
glo"ales%
s% es conveni
convenient
entee declar
declararl
arlas
as todas
todas en un ?nico
?nico m#dulo
m#dulo agrua
agruadas
das or
$unciones y dar al m#dulo un nom"re signi$icativo !ue indi!ue su $inalidad% como Au"lic'"as'
;na ráctica de codi$icaci#n correcta es escri"ir c#digo modular siemre !ue sea osi"le' Aor
e,emlo% si la alicaci#n muestra un cuadro de diálogo% colo!ue todos los controles y el c#digo
necesario ara e,ecutar la tarea del diálogo en un ?nico $ormulario' (sto ayuda a tener el
c#digo de la alicaci#n organi/ado en comonentes ?tiles y minimi/a la so"recarga en tiemo
de e,ecuci#n'
 e)ceci#n de las varia"les glo"ales !ue no se de"erían 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
rocedimientos de"en estar identi$icadas
identi$icadas en la secci#n
secci#n 6eclaracione
6eclaracioness al rinciio
del rocedimiento' demás% los argumentos se de"en asar a los rocedimientos :u" y
Eunctio
Eunc tion
n mediante
mediante B!Val% a menos !ue sea necesario e)lícitamente cam"iar el valor del
argumento !ue se asa'

Pre%i+os de alcance de varia)les


 medida !ue aumenta el tamaDo del royecto% tam"i0n aumenta la utilidad de reconocer
ráidamente el alcance
una letra delante de de
del tio las re$i,o%
varia"les'
sin(sto se consigue
aumentar escri"iendo
demasiado un re$i,o
la longitud de alcance
del nom"re de
de las
varia"les'
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 115

Curso de Visual Basic Avanzado


Avanzado

Alcance Pre%i+o E+emlo


Mlo"al g gstrom"re;suario
ivel de m#dulo m m"lnArogreso6el-álculo
Local del rocedimiento inguno d"lVelocidad

;na varia"le tiene alcance glo"al si se declara como Pu)lic en un m#dulo estándar o en un
m#dulo
m#dulo de $ormula
$ormulario
rio'' ;na varia"le
varia"le tiene alcance
alcance de nivel de módulo si se declara como
Private en un m#dulo estándar 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' un!ue las constantes estándar 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' Aara los nom"res de constantes% se
de"en seguir las mismas normas !ue ara las varia"les' Aor e,emlo
mint@á)Lista;
mint@á) Lista;suario
suario  Límite
Límite de entradas
entradas má)imas
má)imas ara
ara
 la lista de usuarios valor
 entero% local del m#dulo
gstruevaLínea  -arácter de nunueva lílínea
cadena% glo"al de la
 alicaci#n

Varia)les
6eclarar todas las varia"les ahorra tiemo de rogramaci#n or!ue reduce el n?mero de
errores de"idos a erratas or e,emlo% aom"re;suariom $rente a som"re;suariom
$rente a som"re;suarioem' (n la $icha Editor del cuadro de diálogo ?ciones% active la
o
oci
ci#n
#n (eclaración de varia)les reuerida ' La in inst
struc
rucci
ci#n
#n ?tion E/licit re!uiere !ue
declare todas las varia"les del rograma
r ograma 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'

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 Pre%i+o E+emlo


Boolean "ln "ln(ncontrado
Byte "yt "yt6atos&magen
O",eto -ollection col col*idgets
-urrency cur cur&ngresos
6ate ime dtm dtm&nicio
6ou"le d"l d"lolerancia
(rror err err?m6eOrden
&nteger int int-antidad
Long lng lng6istancia
O",ect o", o",ctivo
:ingle sng sng@edia
:tring str strom"reE
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 11=

Curso de Visual Basic Avanzado


Avanzado

io de$inido or el udt udt(mleado


usuario
Variant vnt vnt-hecI: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' demás% los
no
nom"
m"re
ress de $unc
$uncio
ione
ness de"e
de"en
n eme
eme/a
/arr co
con
n un vever"
r"o%
o% co
como
mo &n&nic
icia
iar
rom
om"r
"re@
e@at
atri
ri// o
-errar6iálogo'
Aara nom"res !ue se usen con $recuencia o ara t0rminos largos% se recomienda usar
a"reviaturas estándar ara !ue los nom"res tengan una longitud ra/ona"le' (n general% los
nom"res de varia"les con más de 32 caracteres ueden ser di$íciles de leer en antallas VM'
-uando se usen a"reviaturas% hay !ue asegurarse de !ue sean coherentes en toda la
alicaci#n' lternar 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 muchos 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 comien/an con u% será
$ácil reconocerlos cuando se est0 tra"a,ando con tios de$inidos or el usuario' Aor e,emlo%
ucli se odría usar como re$i,o ara las varia"les de un tio -liente de$inido or el usuario'

Convenciones de codi,icación estructurada

demás de las convenciones de nom"res% las convenciones de codi$icaci#n estructurada% como


comentarios al c#digo y sangrías coherentes% ueden me,orar mucho la legi"ilidad del c#digo'

Convenciones de comentarios al códi'o


odos los rocedimientos y $unciones de"en comen/ar con un comentario "reve !ue descri"a
las características $uncionales del rocedimiento !u0 hace' (sta descrici#n no de"e descri"ir
los detalles de imlementaci#n c#mo lo hace% 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 líneas necesarios descri"irán 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 est0n en un intervalo
esecí$ico' am"i0n hay !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 trav0s de argumentos de re$erencia'
Los "lo!ues del comentario de enca"e/ado del rocedimiento de"en incluir los siguientes
enca"e/
enca"e/ado
adoss de secci#n
secci#n'' (n la secci#
secci#n
n siguie
siguiente
nte%% 6ar
6ar $or
$ormat
mato
o al c#digo
c#digo%% hay algunos
algunos
e,emlos'

Enca)ezado de (escrición del comentario


sección
Einalidad Lo !ue hace el rocedimiento no c#mo lo hace'
Aremisas L
oiscual!uier
ta de
de cca
adotro
a va
vaelemento
ria"le e)
e)te!ue
rna%noco
cosea
ntroo"vio'
l% archivo a"ierto
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 11C

Curso de Visual Basic Avanzado


Avanzado

($ectos Lista de
d e ca
c ada va
v aria"le e)
e )terna% co
c ontrol o archivo
a$ectados y el e$ecto !ue tiene s#lo si no es o"vio'
(ntradas odos los argumentos !ue uedan no ser o"vios' Los
argum
arg ument
entos
os se escr
escri"
i"en
en en un una
a lílíne
nea
a a
aar
arte
te co
con
n
comentarios de línea'
8esultados ()licaci#n de los valores devueltos or las $unciones'
8ecuerde los untos siguientes
• -ada declaraci#n de varia"le imortante de"e incluir un comentario de línea !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 línea s#lo sean necesarios en los detalles de imlementaci#n comle,os'
• l rinciio del m#dulo '"as !ue contiene las declaraciones de constantes gen0ricas de
Visual
Visual Basic del royecto% de"e incluir un resumen !ue descri"a
descri"a la alicaci#n%
alicaci#n% enumerando
enumerando
los rinciales
rinciales o",etos
o",etos de datos% rocedimientos
rocedimientos%% algoritmos%
algoritmos% cuadros de diálogo%
diálogo% "ases de
datos y deendencias del sistema' lgunas veces uede ser ?til un seudoc#digo !ue
descri"a el algoritmo'

(ar %ormato al códi'o


-omo muchos rogramadores usan todavía antallas VM% hay !ue a,ustarse al esacio de la
antalla
estructuraenl#gica
la medida de lo osi"le
y el anidamiento' y son
(stos hacer !ue elindicadores
algunos $ormato del c#digo siga re$le,ando la
• Los "lo!ues anidados estándar% searados or ta"uladores% de"en llevar una sangría de
cuatro esacios redeterminado'
• (l comentario del es!uema $uncional de un rocedimiento de"e llevar una sangría de un
esacio' Las instrucciones de nivel suerior !ue siguen al comentario del es!uema de"en
llevar una sangría de un ta"ulador% con cada "lo!ue anidado searado or una sangría de
un ta"ulador adicional' Aor e,emlo
󰂩 1999 Jorge Ordovás Oromendía y Vicente Lema Osca 11F

Curso de Visual Basic Avanzado


Avanzado

[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
 Einali
Einalidad
dad ;"ica
;"ica el ri
rimer
mer caso
caso enco
encontra
ntrado
do de un
un
 usuario eseci$icado en la matri/
 Lista;suario'
 (ntradas
 strL
strLis
ista
ta;s
;sua
uari
rio
o
 list
lista
a de
de usu
usuar
ario
ioss ar
ara
a "us
"usca
carr'
 ststr;
r;susuari
ario6
o6est
est nom"
nom"rere de
dell usu
usuari
arioo "usca
"uscado
do''
 8esultadosndice del rimer caso de rs;suario6est
 encontrado en la matri/ rasLista;suario'
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
 :i no se encuentra el usuario de destino% devuelve 71'
Eunction intBuscar;suario strLista;suario s :tring% str;suario6est
str;sua rio6est s K
:trings &nteger
6im i s &nteger  -ontador de "ucle'
6im "l"ln(ncontrad
ado
o s &ntege
eger  &ndic
dicador de
 destino encontrado'
intBuscar;suario N 71
iNG
*hile i \N ;"oundstrLista;suario and ot "ln(ncontrado
&$ strLista;suarioi N str;suario6est hen
"ln(ncontrado N rue
intBuscar;suario N i
(nd &$
*end
(nd Eunction

A'ruación de constantes
Las varia"les y constantes
constantes de$inidas se de"en agruar or $unciones en lugar de dividirlas
dividirlas en
áreas aisladas o archivos eseciales' Las constantes gen0ricas 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 ! 
;se siemre oeradorr U ara
siemre el oerado ara unir cade
cadenas
nas y el oerad or  cuando tra"a,e con valores
oerador
num0ricos' (l uso del oerador  ara concatenar uede causar ro"lemas cuando se oera
so"re dos varia"les Variant' Aor e,emlo
vntVar1
vntVar1 N 1G'G1
vntVar2 N 11
vnt8esult N vntVa
vntVar1
r1 . vntVar2
vntVar2 vnt8esult N 21'G1
vnt8esult N vntVar1 P vntVar2 vnt8esult N 1G'G111

Crear cadenas ara Ms'Bo/$ InutBo/ ! consultas S#


-uando est0 creando una cadena larga% use el carácter de su"rayado de continuaci#n de línea
ara crear m?ltiles líneas de c#digo% de $orma !ue ueda leer o deurar la cadena $ácilmente'
(sta t0cnica es esecialmente ?til cuando se muestra un cuadro de mensa,e  Ms'Bo/ o un
cuadro de entrada InutBo/% o cuando se crea una cadena :HL' Aor e,emlo
6im @s, s :tring
@s, N (sto es un árra$o !ue estará en un K
P  cuadro de mensa,es' (l te)to está searado en K
P  varias líneas de c#digo en el c#digo de origen%  K
P lo !ue $acilita al rogramador la tarea de leer y deurar'
@sgBo) @s,
6im - s :tring
- N :(L(- [ K
P
P  E8O@
*(8(ítulo
jEechaK de u"licaci#nk  19FF
-onsultaítulos':HL N -

También podría gustarte