Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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 roiedades....................................................................................3
Controles comunes: Label, !e"t#o",
!e"t#o", Command#utton, C$ec%#o".......................................................3
C$ec%#o".................................................... ...3
&dentificar el tio 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
Conceto de encasulación )*ublic v.s. *rivate+..................................................................................3
tilización de variables de ob'eto.........................................................................................................3
&nstrucción *roerty..............................................................................................................................3
*roerty..............................................................................................................................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
*roiedades y mtodos 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
ecueración de elementos de una colección......................................................................................
colección.......................................................................................3 .3
Control 4croll#ar................................................................................................................................3
4croll#ar................................................................................................................................3
5-s concetos de clases: eventos &nitialize y !erminate...........................................
!erminate........................................................
......................
..............3
.....3
EJEMPLO PROPUESTO..................................................................................................................................3
6b'etivo.................................................................................................................................................3
Desarrollo del e'emlo.....................................................................................................................
e'emlo..........................................................................................................................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 comonente 0ctive8.................................................................................
........................................................................................................................3
0ctive8..............................................................................................................3
.............................3
!ios de comonentes 0ctive8...............................................................................................................3
0ctive8...............................................................................................................3
Frm*resentacion..........................................................................................................................
Frm*resentacion............................................ .......................................................................................
......... 3
Frmegistro...........................................................
Frmegistro...........................................................................................................................................3
................................................................................3
5odegistro...............................................................................................................................
5odegistro........................................................................................................................................
...........3
..3
A%&NDICE A' ES%ECIFICACIONES LIMITACIONES Y FORMATOS DE ARCIVOS 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, tios 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, tios y variables..........................................................................................................3
variables..........................................................................................................3
!ios definidos or el usuario...............................................................................................................3
sacio 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 tiemo de dise?o......................................................................................
dise?o...............................................................................................
............3
...3
0rc$ivos de tiemo de e'ecución.....................................................................................................
e'ecución...........................................................................................................3......3
structuras de formularios....................................................................................................................3
=>mero de versión.................................................................................................................................3
versión.................................................................................................................................3
Descrició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 mtodo abreviado..........................
abreviado...................................................................................................................3
.........................................................................................3
Comentarios en la descrición del formulario......................................................................................3
*roiedades de la descrición de un formulario....................................................................
formulario..............................................................................
..............3
....3
4inta"is...................................................................................................................................................3
(a
(alores
lores binarios de roiedades............................................................................................................3
roiedades............................................................................................................3
*roiedad &con..............................................................................................................................
&con......................................................................................................................................
........33
*roiedad !ab&nde".......................
!ab&nde"...............................................................................................................................3
........................................................................................................3
nidades de medida..............................................................................................................................3
(a
(alores
lores de colores.......................................................
colores..................................................................................................................................
...........................................................................33
6b'etos de roiedades.........................................................................................................................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
!ios de datos de variables...................................................................................................................3
Introducción al manual
Visual Basic se ha convertido en un imortante entorno de desarrollo !ue cu"re todos los
asectos de la rogramaci#n ro$esional% desde las alicaciones $inancieras a la construcci#n
de comonentes 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% comara"le a la
de lengua,es tradicionalmente considerados sueriores 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 rinciios y t0cnicas involucradas en el desarrollo
de alicaciones 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 6O% 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 rouesto% 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 roia ayuda de Visual Basic' Los autores hemos re$erido limitar en la medida de lo
osi"le
e,e
e,emlosla roue
mlos carga
ro te#rica
uesto
stos delueltos
s y resuel
res manual% tototenciando
tos%% totalm
alment
ente elnales%
e $uncio asecto
$uncionales% !ueráctico
ayudarácon
ayudarán la inclusi#n
n al lector en de
lector la
comrensi#n de los contenidos del curso'
• ;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,emlo en el !ue se onen en ráctica los conocimientos reci0n ad!uiridos
• < or suuesto% una soluci#n al e,emlo rouesto'
Visual Basic roorciona una gran cantidad de elementos !ue ermiten aumentar la otencia
de nuestras alicaciones considera"lemente' un!ue el estudio individual de dichos o",etos se
escaa al ro#sito de este curso% en los e,emlos iremos rooniendo el uso de di$erentes
tios de o",etos ara ir aumentando nuestro vocabulario en Visual Basic'
1. ormularios ! eventos
Introducción
(l rimer aso ara crear una alicaci#n con Visual Basic es crear la inte
inter$a/%
r$a/% la arte visual de
la alicaci#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 alicaci#n'
Los $ormularios son o",etos !ue e)onen las roiedades !ue de$inen su aariencia% los
m0todos !ue de$inen su comortamiento y los eventos !ue de$inen la $orma en !ue interact?an
con el usuario' @ediante el esta"lecimiento de las roiedades del $ormulario y la escritura de
c#digo de Visual Basic ara resonder a sus eventos se ersonali/a el o",eto ara cu"rir las
necesidades de la alicaci#n'
o
odos
dos los lengua,es de rogramaci#n ara *indo+s comarten la misma característica la
orientaci#n a eventos' Las alicaciones creadas ara *indo+s no siguen una estructura de
e,ecuci#n lineal' (sto imlica !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 resonder a las acciones !ue el
usuario% el sistema oerativo u otras alicaciones 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 alicaci#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 corresondiente su"rutina de atenci#n al evento'
(l o",etivo de este caítulo es recordar los conocimientos "ásicos% ero imrescindi"les% ara el
mane,o de $ormularios en Visual Basic' aremos incai0 en el conceto de $ormulario como
o",eto% con sus roiedades% m0todos y eventos' :e comro"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 esecialmente los eventos !ue uede reci"ir un $ormulario%
tanto en el roceso de carga como en la e,ecuci#n de la alicaci#n y en el roceso de descarga
del mismo'
Conocimientos teóricos
;n o",eto de uso diario como el glo"o de un niDo tiene tam"i0n roiedades% m0todos y
eventos' (ntre las roiedades de un glo"o se incluyen atri"utos visi"les como el eso% el
diámetro y el color' Otras roiedades 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 roiedades> lo
!ue varía de un glo"o a otros son los valores de estas roiedades'
;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 escaar' 6e nuevo% todos los glo"os ueden e$ectuar estos m0todos'
Los glo"os tienen además resuestas rede$inidas a ciertos eventos e)ternos' Aor e,emlo% un
glo"o resonderí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 resonder a eventos'
Aara hacer visi"le un $ormulario se invoca el m0todo Show' Aor e,emlo% la sentencia
Eorm1':ho+
mostraría el $ormulario Eorm1' &nvocar el m0todo Show tiene el mismo e$ecto !ue esta"lecer a
True la roiedad Visible del $ormulario'
(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 comonen'
• 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 roiedad
roiedad 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 comonen y odemos actuar so"re ellos% ues el $ormulario es visi"le' 6urante este
estado% cada ve/ !ue hay !ue reintar el $ormulario or e,emlo% cuando una ventana !ue
se ha situado
situado so"re 0ste desaarece
desaarece se genera el evento
evento Paint' demás% si el $ormulario
recuera
lt.a" y el
lt.a" $oco desu0s
volver desu0s al
de$ormulario%
ha"erlo erdido or e,emlo%
se genera el eventoalActivate
cam"iar' a otra alicaci#n con
#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 imortante en el roceso de desarrollo de una alicaci#n'
a
am"i0n
m"i0n odemos comro"ar el valor de una varia"le si utili/amos la sentencia
?nombre_variable
nombre_variable=valor
%&em'lo 'ro'uesto
-on este e,emlo veremos los estados or los !ue asa un $ormulario durante su ciclo de vida'
demás% comro"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
corresondiente 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'
%&em'lo resuelto
ormulario 1
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
(,emlo 1 del -urso de Visual Basic van/ado
van/ado
Otion ()licit
:u" EormKLoad
6e"ug'Arint Eormulario1 (vento Load
(nd :u"
ormulario *
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
(,emlo 1 del -urso de Visual Basic van/ado
van/ado
(l o",etivo de este e,emlo es reconocer los eventos !ue un
$ormulario uede reci"ir% así como el orden en el !ue se
reci"en
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
Otion ()licit
Los controles son o",etos !ue están contenidos en los o",etos de $ormularios' -ada tio de
control tiene su roio con,unto de roiedades% m0todos y eventos% !ue lo hacen adecuado
aramás
son una adecuados
$inalidad
$inalidados
adecuad determinada'
determinada
escri"' irlgunos
ara escri"ir der te)to%
o mostrar
mostra los controles
mientras!ue
!ueuede
otros usar eneslas
controles
control alicaciones
alicacio
ermiten nes
tener
acceso a otras alicaciones y rocesan los datos como si la alicaci#n remota $ormara arte del
c#digo'
(ste caítulo resenta los concetos "ásicos del tra"a,o con $ormularios y controles% y las
roiedades% 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 tiemo de e,ecuci#n los tios de controles
utili/ados en nuestros $ormularios'
Conocimientos teóricos
Los tios de eventos reconocidos or un o",eto varían% ero muchos tios son comunes a la
mayoría de los controles' Aor e,emlo% 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 roiedades de los controles determinan su asecto% c#mo se mostrará al usuario' (stas
roiedades de$inen sus atri"utos color% tamaDo% $orma% etc' l igual !ue en el caso de los
eventos% los o",etos de Visual Basic comarten una serie de roiedades comunes% como
)ame o Visible% y otras esecí$icas de su tio'
La $unci#n yeame 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 tio de o",eto !ue estemos tratando
tratando%%
así como crear $unciones generales ara diversos tios de controles'
yeame -ommandButton1
La $unci#
$unci#nn y
yeO$
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 tio
tio if .. then ...'' (sta $unci#n nos ermite identi$icar la clase a la !ue
.... then
erteneceel o",eto% ara oder oerar en consecuencia'
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 tio de controles del $ormulario'
%&em'lo 'ro'uesto
1' -reare
-rearemos
mos el siguien
siguiente
te $ormul
$ormulari
ario
o
3' (n $unci#n
$unci#n del tio
tio 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
%&em'lo resuelto
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
(,emlo 2 del -urso de Visual Basic van/ado
van/ado
(l o",etivo de este e,emlo es identi$icar los o",etos contenidos
en un $ormulario y oerar con ellos en $unci#n de su tio'
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
Otion ()licit
asta ahora hemos visto los o",etos !ue roorciona 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 concetual de los o",etos' Aara comrender 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
eserar todos tienen las mismas roiedades y eventos'
(n el caítulo anterior hemos ha"lado de las roiedades 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 roorci
roorciona
onan
n un con,un
con,unto
to de métodos% !ue
determinan las acciones !ue el o",eto uede reali/ar'
Conocimientos teóricos
Los o",etos de Visual Basic tienen propieda des, métodos y eventos. Las roiedades 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 obeto. (l tio
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 roiedades 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'
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
La sentencia 6e7 crea una instancia de la clase eseci$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 oerativo 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,emlo% 5 instancias de *ord al mismo tiemo'''' Aara
li"erar la memoria y los recursos !ue consume un o",eto utili/aremos la sentencia
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 roiedades'
roiedades' Aodemos controlar esto creando
creando todas las
roiedades de tio 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,emlo% odemos necesitar !ue el AV erminal Aunto de Venta de una tienda ueda
modi$icar el saldo de una tar,eta lo !ue se corresondería con la comra de un cliente> sin
em"argo% no tiene sentido !ue dicho AV ermita al vendedor comro"ar el saldo de la cuenta
del cliente% o hacer una trans$erencia a su roia cuenta'
Visual Basic ermite acceder y modi$icar el valor de una roiedad rivada a trav0s de los
procedimientos
procedimi propiedad o Pro'ert! '
entos de propiedad
Procedimiento Proósito
Proert! "et 6evuelve el valor de una roiedad
Proert! #et (sta"lece el valor de una roiedad
Proert! Set (sta"lece
(sta" lece el valor de una roiedad
roiedad de o",eto
es decir
decir%% una roied
roiedad
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 roiedad 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 roie
roiedad
dad%%
mientras !ue Pro'ert! Let nos osi"ilita asignarle un valor'
Pro'ert! Set tam"i0n ermite esta"lecer el valor de una roiedad 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
roiedad' Visual Basic llama a Proert! Set si se utili/a la instrucci#n Set y a Proert! #et
en caso contrario'
(sta roiedad 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 conceto ara oder alicarlo en el e,emlo rouesto'
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 tiemo 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
%&em'lo 'ro'uesto
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
roied
iedades
ades nombre, apellidos, dirección, teléfono
y n"mero' Aara cada una de las roiedades crearemos sus corresondientes m0todos de
roiedad Pro'ert! -et y Pro'ert! Let'
3' &mlem
&mlementa
entarem
remos
os tam"i0
tam"i0n
n un m0todo
m0todo $uestra%& !ue muestre mediante un ms#bo* el valor
de las roiedades de un o",eto Eicha creado reviamente'
4' (n el $ormulari
$ormulario%
o% una ve/ esta"lecidas
esta"lecidas las
las roiedades
roiedades de la $icha
$icha nom"re%
nom"re% aellidos''
aellidos'''
' 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 roiedades'
5' Aara
Aara esta"lece
esta"lecerr la roie
roiedad
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'
%&em'lo resuelto
ormulario
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
(,emlo 3 del -urso de Visual Basic van/ado
van/ado
(l o",etivo de este e,emlo es $amilliari/arnos con el uso de o",etos'
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
Otion ()licit
Clase ic0a
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
(,emlo 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
Otion ()licit
asta ahora hemos arendido c#mo se crea e instancia una clase sencilla% y los concetos
más imortantes de la rogramaci#n orientada a o",etos en Visual Basic'
(n estemas
clases
clases caítulo arenderemos
sencil
sencillas
las'' Aara elloa desarrollar
Aara ello arend
arenderem
eremosclases mas comle,as
os a usar coleccionesutili/ando
colecciones colecciones
de clases
clases% de
% y haremos
haremos
hincai0 en la otimi/aci#n en tiemo 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 desla/amiento hori/ontal :crollBar'
Conocimientos teóricos
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 tios de datos%
los o",etos y las matrices estándar% ero no los tios de$inidos or el usuario'
Las varia"les Variant siemre ocuan 1= "ytes% indeendientemente 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 alicar ReDim a un o",eto Collection% lo !ue roduce
roduce un c#digo
c#digo más limio 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 tios de datos enumerados
anteriormente' :in em"argo% siemre tenemos !ue tener resente !ue si "ien los o",etos
Collection nos ermitirán escri"ir un c#digo limio y $ácil de mantener% estamos agando el
recio de almacenar los elementos en varia"les Variant'
(stas roiedades y m0todos s#lo roorcionan los servicios más "ásicos de las colecciones'
Aor e,emlo% el m0todo Add no uede comro"ar el tio de o",eto !ue se agrega a la colecci#n
ara asegurar !ue la colecci#n contenga un ?nico tio de o",eto' Aodemos roorcionar una
$uncionalidad más ro"usta% y roiedades% m0todos y eventos adicionales% si creamos nuestra
roia clase de colecci#n% como haremos en el e,emlo corresondiente a este caítulo'
⊗
@ás e)actamente% una varia"le Variant ocua siemre 1= "ytes incluso si los datos se
encuentran almacenados en cual'uier otra parte. Aor e,emlo% si asignamos una cadena o una
matri/ a una varia"le de tio Variant% 0sta contiene un untero a una coia 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 tio 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 tios de datos
num0ricos se almacenan ocuando siemre los 1= "ytes'
;n (ndice es un dato de tio #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,emlo% si
insertamos el c#digo siguiente en el Load de un $ormulario aarecería en la antalla Debu# el
nom"re de los controles !ue están egados en 0l
:e suone
suone !ue la roie
roiedad
dad 6& es un tio Strin#' :i esta roiedad es un n?mero or
e,emlo% un tio Lon#% utili/aríamos
utili/aríamos la $unci#n
$unci#n CStr ara convertirlo
convertirlo al valor Strin# re!uerido
or las claves
(l m0todo Add aceta argumentos con nom"re' Aara agregar una ersona nueva como tercer
elemento de la colecci#n% odemos escri"ir
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,emlo% before:=1 inserta
inserta un elemento
elemento al rinciio de la colecci#n%
colecci#n%
ya !ue los o",etos Collection están "asados en uno'
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*
-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,emlo !ue ara el m0todo Remove% cual!uiera de estas dos
instrucciones recuerará el tercer elemento de la colecci#n
o "ien
:i utili/amos n?meros enteros como claves% de"emos emlear la $unci#n CStr ara convertirlos
a cadenas antes de asarlos a los m0todos Item o Remove' Los o",etos Collection siemre
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,emlo
de c#digo anterior tam"i0n se uede escri"ir de la siguiente manera
o "ien
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 tiemo'
o es conveniente% or tanto% guardar un valor num0rico de índice y eserar recuerar el
mismo elemento más tarde' Lo me,or es utili/ar claves ara este ro#sito'
Control >ScrollBar
Las "arras de desla/amiento roorcionan un medio sencillo de recorrer largas listas de
elementos o grandes cantidades de in$ormaci#n al desla/arse hori/ontal o verticalmente
dentro de una alicaci#n o de un control'
Las "arras de desla/amiento son un elemento com?n de la inter$a/ de *indo+s 95 y de
*indo+s '
Lo
Loss co
cont
ntrol
roles
es >ScrollBar y VScrollBar no son igual !ue las "arras de desla/amiento
incororadas !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 desla/amiento aarecen automáticamente cuando la alicaci#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 roie dad ScrollBars está
roiedad
esta"lecida a True'
(n las versiones anteriores de Visual Basic% las "arras de desla/amiento se solían utili/ar
como disositivos de entrada' :in em"argo% las recomendaciones de la inter$a/ de *indo+s
sugieren ahora !ue se utilicen como disositivos 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 (mresarial 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 interrete como clave y la
varia"le !ue contiene el valor no es de tio Strin#% de"emos utili/ar CStr ara convertirla' :i
deseamos !ue un valor se interrete como índice y la varia"le !ue contiene el valor no es de un
tio de datos num0ricos% de"emos utili/ar CLn# ara convertirla'
Los controles Scroll0ar utili/an los eventos Scroll y Chan#e ara suervisar el movimiento del
cuadro de desla/amiento a lo largo de la "arra de desla/amiento'
Evento (escrición
-hange Ocurre desu0s de mover el cuadro de
:croll desla/amiento'
O curre al
al mo
mover el
el cu
cuadro dede de
desla/amiento' o
o
ocurre si se hace clic en las $lechas o en la "arra de
desla/amiento'
demás de utili/ar los clics del rat#n ara cam"iar el valor de la "arra de desla/amiento% el
usuario tam"i0n uede arrastrar el cuadro de desla/amiento a cual!uier osici#n de la "arra'
(l valor resultante deende de la osici#n del cuadro de desla/amiento% ero siemre se
encuentra
encuen tra dentro del intervalo de$inido
de$inido or las roiedades
roiedades 1in y 1a* esta"lecidas or el
usuario'
o
odas
das las clases roorcionan 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' :uone 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'
%&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'
2' -rearemos
-rearemos una clase genda
genda con una roiedad
roiedad rivada
rivada -olEichas
-olEichas de tio Collection% !ue
no tendr
tendrá
á m0to
m0todo
doss Pro'ert! asocia
asociados
dos'' -rearem
-rearemos
os un m0todo
m0todo Pro'ert! -et llamado
Int6umic0as !ue nos devuelva el n?mero de $ichas de la colecci#n -olEichas'
3' &mlementare
&mlementaremosmos un m0todo
m0todo ?"lico
?"lico -rearEic
-rearEicha
ha !ue reci"e
reci"e como
como argumentos
argumentos elel nom"re%
nom"re%
aellido% direcci#n y tel0$ono y crea una $icha nueva utili/aremos la clase Eicha de$inida en
el e,
e,em
emlo
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 esesec
ecie
ie de TcTcam
amo
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' &mlementare
&mlementaremos
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 corresondiente'
=' -omo
-omo ?ltim
?ltimo
o element
elemento
o de la
la clase%
clase% en el evento
evento Terminate li"eraremos todo el esacio 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 &ntumEich
&ntumEichactu
actual
al
!ue indicará el n?mero de la $icha cuyos datos aarecen 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 Tueva
Tueva $ichaU%
$ichaU% de"emos
de"emos aumenta
aumentarr la roiedad
roiedad 1a* de la "arra de scroll%
osicionarnos en el ?ltimo elemento y limiar los datos nom"re% aellidos% direcci#n y
tel0$ono% rearando 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 limiar el
$ormulario'
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'
%&em'lo Resuelto
ormulario
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
(,emlo 4 del -urso de Visual Basic van/ado
van/ado
6e$inici#n del $ormulario% este será el inter$a/ del usuario'
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
Otion ()licit
-on$irmamos el "orrado
&$ @sgBo)Q6esea eliminar la $icha actualR% v"<eso%
v"<eso% Borrado de $icha N v"o hen
()it :u"
(nd &$
(nd :u"
(nd :u"
ctuali/amos el $rame
Erame1'-ation N Eicha P &ntumEichactual
(nd &$
(nd Eunction
Clase A'enda
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
(,emlo 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
Otion ()licit
&nsertamos
como Iey ellac#digo
nuevade$icha en la ara
la $icha% colecci#n
oderde $ichas% desu0s
"uscarla oniendo
or c#digo convertimos a string el c#digo or!ue el Iey
tiene !ue ser un string
-olEichas'dd O",Eicha% -:trO",Eicha'&ntumEicha
(liminamos la $icha
:et O",Eicha N othing
(nd Eunction
. Tecnolo'3a ActiveD
Introducción
Conocimientos teóricos
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 siemre ha resentado diversos controles !ue odíamos utili/ar en nuestras
alicaciones' hora odemos crear nuestros roios 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 gruo de controles con los controles e)istentes'
Los controles ctive se ueden deurar 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 roiedades% constantes con nom"re y eventos'
Aodemos comilar nuestros controles ctive directamente en el archivo e,ecuta"le de nuestra
alicaci#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'
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
• ActiveD (## ,li)rer3as-& Los comonentes ctive roorciona c#digo !ue se uede volver
a utili/ar en $orma de o",etos' ;na alicaci#n
alicaci#n cliente uede crear un o",eto a artir de un
comonente ctive servidor y utili/ar sus roiedades y m0todos' Los comonentes
ctive 6LL se e,ecutan dentro del esacio de direcciones del rograma !ue los utili/a'
• ActiveD EDE& ;n comonente ctive (( es muy similar a un comonente ctive 6LL'
La ?nica di$erencia es !ue un comonente ctive (( se e,ecuta en su roio esacio de
direcc
direccion
iones%
es% lo !ue ermite
ermite !ue el cliente uede e,ecutar un m0todo del comonente y
continuar con su e,ecuci#n mientras el comonente reali/a el tra"a,o% manteniendo el control
de la e,ecuci#n del rograma rincial 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 comle,a'
;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,emlo%
e,emlo% odemos utili/ar una matri/
grande durante un tiemo 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 oerativo $uncione con muy oca memoria'
Aara asignar el n?mero real de elementos utili/aremos la instrucci#n ReDim' Aor e,emlo% 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
aar
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 alicaci#n realice
una acci#n en tiemo de e,ecuci#n'
La instrucci#n ReDim aceta 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 suerior 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,emlo% si de$inimos
la matri/ anterior de esta $orma
-adamomento
ese ve/ !ue e,ecutamos
matri/la' Visual
en la matri/' instrucci#n resta"lse
BasicReDim
resta"leceerderán
ece todosallos
los valores valores
valor almacenados
Emt! en
en matrices
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 rearar la matri/ ara contener datos nuevos o
cuando deseemos reducir el tamaDo de la matri/ ara !ue ocue 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,emlo% odemos amliar 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 suerior
:#lo se uede cam"iar el límite suerior 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 tiemo de e,ecuci#n' sí ues%
odemos utili/ar un c#digo como el siguiente
Matrices de controles
Visual Basic ermite crear matrices de controles dinámicamente y situar los nuevos controles a
voluntad en un $ormulario' :uongamos !ue tenemos un control llamado @i-tl or e,emlo% 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 aroiadamente
aroiadamente su roiedad
roiedad To' y Le,t% y hacerlo
visi"le esta"leciendo a True la roiedad Visible'
1' (,
(,ec
ecut
utar el Asistente ara instalar alicaciones.
ar el
1' :eleccionar
:eleccionar el royecto
royecto corresondiente
corresondiente al control ctive
ctive%% marcando la oci#n Instalación
ara trans%erencia desde Internet.
1' 6urant
6urantee el roceso
roceso de creaci
creaci#n
#n de los archivos
archivos%% eseci
eseci$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 comonentes 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 roiedades necesario si !ueremos e,ecutar el
control desde $uera de Visual Basic% como es el caso'
(l asistente nos creará rincialmente dos archivos con el nom"re del control ctive% uno con
e)tensi#n '-B !ue contiene el roio control y otros elementos utili/ados or 0l% si rocede y
otro con e)tensi#n '@ en el !ue se muestra un e,emlo de ágina @L !ue utili/a el control
ctive'
%&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,emlo odemos ver la
otencia !ue tiene esta herramienta% ya !ue con el uso de un control odemos tener una
alicaci#n "astante comlicada corriendo detrás% siendo muy $ácil el imlantaci#n ara usos
osteriores'
Proiedades
• StrTurno almacena el carácter corresondiente al turno actual TOU o TU
• 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 tiemo de diseDo
en el control ctive% generará una matrí/ ordenada de 3)3 "otones índices de G a
F'
Inicializarormulario& iniciali/ará el cation de los "otones% el turno y el
• Su) Inicializarormulario&
n?mero de ,ugadas'
• unction >a!TresEnRa!a,-
>a!TresEnRa!a,- As Boolean comro"ará cuando hay tres en raya% en
$unci#n
$unci#n del cation
cation 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
comro"ar si hay tres en raya% comro"ar si el "ot#n ya ha sido ulsado% y en caso
contrario cam"iar el cation del mismo% comro"ar si se han marcado ya todas las
casillas% incrementar el n?mero de ,ugadas reali/adas'''
%&em'lo resuelto
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
(,emlo 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
Otion ()licit
-am"iamos de :trurno
&$ :trurno N O hen
:trurno N
(lse
:trurno N O
(nd &$
Eilas hori/ontales
Eor &nt& N G o 2
&$ But-elda3 [ &nt&'-ation \ v"ull:tring nd K
But-elda3 [ &nt&'-ation N But-elda3 [ &nt& . 1'-ation nd K
But-elda3 [ &nt&'-ation N But-elda3 [ &nt& . 2'-ation hen
ayres(n8aya
ayres(n8a ya N rue
()it Eunction
(nd &$
e)t
Eilas verticales
Eor &nt& N G o 2
&$ But-elda&nt&'-ation \ v"ull:tring nd K
6iagonales
&$ But-eldaG'-ation \ v"ull:tring nd K
But-eldaG'-ation N But-elda4'-ation nd K
But-eldaG'-ation N But-eldaF'-ation hen
ayres(n8aya
ayres(n8a ya N rue
()it Eunction
(nd &$
&$ But-elda2'-ation \ v"ull:tring nd K
But-elda2'-ation N But-elda4'-ation nd K
But-elda2'-ation N But-elda='-ation hen
ayres(n8aya
ayres(n8a ya N rue
()it Eunction
(nd &$
ayres(n8aya
ayres(n8 aya N Ealse
(nd Eunction
&niciali/amos el :trurno
:trurno N
&niciali/amos el ta"lero
&niciali/arEormulario
(nd :u"
. Acceso
Acceso a )ases de datos ,(A? ! Het-
Introducción
(n Visual Basic e)isten m?ltiles 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 deende de nuestras
necesidades unos
datos e)ternas% m0todos!ue
mientras sonotros
más atos ara
aortan unalicaciones sencillas al
mayor rendimiento sinser
cone)i#n a "ases
utili/ados de
contra
servidores inteligentes como :HL :erver'
Vi
Visua
suall Basic
Basic roorc
roorcion
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% 6O 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'
Conocimientos teóricos
(A? ! Het
(l modelo 6O es una inter$a/ de rogramaci#n !ue osi"ilita un control total de la "ase de
datos' (s decir% 6O $acilita una colecci#n de clases de o",etos !ue roorcionan las
r
roi
oied
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
oer
eraci
acion
ones
es
necesarias ara administrar una "ase de datos $unciones ara crear "ases de datos% de$inir
ta"las% camos e índices% esta"lecer relaciones entre las ta"las% desla/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 oeraciones% de$inidas so"re o",etos de
dato
acceso de datos% en oeraciones $ísicas !ue se e$ect?an directamente so"re los roios
archivos de las "ases de datos y !ue controlan todos los mecanismos de inter$a/ con las
distintas "ases de datos comati"les' ay tres categorías de "ases de datos !ue Visual
Basic reconoce a trav0s de 6O 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 maniula directamente estas "ases de datos% !ue
roorcionan 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 cumlen 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,emlos C y F'
(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'
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 comleta de 6O'
: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,eml
-omo e,emlo
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% @ia"la% cuya estructura es la
siguiente
6om)re
6om )re del Tio
camo
6& e)to
om"re e)to
ellidos e
e)to
)to
(l o",eto D0%n#ine contiene y controla todos los otros o",etos en la ,erar!uía de los o",etos de
6O' (s ?nico or alicaci#n
alicaci#n no ueden crearse otros o",etos 6B(ngine'
6B(ngine' ;tili/aremos
;tili/aremos el
$or(s'ace esacio de tra"a,o or de$ecto de este o",eto ara a"rir la "ase de datos%
eseci$icando el path comleto del archivo
;n o",et
o",etoo Recordset reresenta 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
tios% 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 tios
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 coia $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 tio' :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 tio de Sna'shot en el !ue s#lo se ermite el
desla/amiento hacia delante so"re el con,unto de resultados o"tenido en una
consulta' (s el Recordset !ue menos $uncionalidad roorciona% con la venta,a de
!ue es el más ráido'
(n el siguiente cuadro se recogen los tios 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 alicaci#n
-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
(n las siguie
siguientes
ntes líneas
líneas se e)onen
e)onen varios
varios e,emlos
e,emlos de uso de Recordsets utili/ando en
muchos casos sentencias esec3%icas de 6O ara acceder a "ases de datos Jet' (ste tio 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 tio de entornos uede suoner una imortante "a,ada en el rendimiento de la
alicaci#n% siendo re$eri"le el uso de 6O con O6B-6irect o 86O% como veremos en los
siguientes e,emlos'
Aara insertar
insertar un registro
registro nuevo 6&NU12345=C
6&NU12345=CFU%
FU% om"reNUnas
om"reNUnastasioU
tasioU%% ellidos
ellidosNUA0re
NUA0re//
@artínU en la ta"la @ia"la
@ia"la
6im 8seta"la
8seta"la as 8ecordset
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
roi
oied
edad
ad
RecordCount del Recordset
6im 8seta"la
8seta"la as 8ecordset
6im um(lementos as integer
Aara
el m0mostrar en la antalla
todo 1ove)e*t de
d
Debu# los datos de cada registro de la ta"la T@ia"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 camos del registro utili/ando la sinta)is Recordset7Abierto8
)ombre7del7cam'o ' La roiedad %+F del Recordset nos indicará cuando se ha llegado al
$inal del con,unto de registros
6im 8seta"la
8seta"la as 8ecordset
:et 8seta"la
8seta"la N VarB6'Oen8ecordsetT@ia
VarB6'Oen8ecordsetT@ia"laU%d"OenEor+ardOnly
"laU%d"OenEor+ardOnly
*ith 8seta"la
6o ;ntil '(OE
6e"ug'Arint T6& U P Y6& P v"-8LE P K
Tom"re T P Yom"re P v"-8LE P K
Tellidos T P Yellidos
'@ovee)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 cumle
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 roiedad )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
eseci$icados
6im 8seta"la
8seta"la as 8ecordset
:et 8seta"la
8seta"la N VarB6'Oen8ecordsetT@ia
VarB6'Oen8ecordsetT@ia"laU%d"Oen:nashot
"laU%d"Oen:nashot
*ith 8seta"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
Tom"re T P Yom"re P v"-8LE P K
Tellidos T P Yellidos
(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 8seta"la
8seta"la as 8ecordset
:et 8seta"la
8seta"la N VarB6'Oen8ecordsetT@ia
VarB6'Oen8ecordsetT@ia"laU%d"Oen:nashot
"laU%d"Oen:nashot
*ith 8seta"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
Moveistr& (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'
%&em'lo 'ro'uesto
?)+etivo
(l o",etivo de este e,emlo es amliar el e,emlo de la agenda de $orma !ue los datos est0n
ahora almacenados en una "ase de datos'
-ada caa s#lo odrá relacionarse con su caa inmediata suerior e in$erior% como muestra el
di"u,o
(l o",etivo es aislar cada caa de la imlementaci#n de las demás% de $orma !ue las caas
in
in$e
$eri
rior
ores
es ueda
sueriores⊗
ue
' (ndan
n ser cam"i
cael
articular% m"iad
adas
as sin
o",etivo si!ue
n !u
!ue
seeretende
las modi$
moden
i$ic
icaci
acion
esteones
es re
reer
ercu
e,emlo y cuta
lostan
n en
dos la
lass ca
caa
siguientesas
ess
crear una caa de acceso a la "ase de datos di$erente en cada e,emlo% ero utili/ando el
mismo inter$a/ de usuario y la misma agenda'
⊗
(sta indeendencia entre las di$erentes caas es lo !ue con$iere su otencia al modelo de
desarrollo estructurado en caas% ermitiendo una gran $le)i"ilidad en el desarrollo y
mantenimiento de las alicaciones'
• Pu)lic Proert! "et Int6umic0as,- 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
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
Int6umic0a As Inte'er- As Claic0a @0todo ara o"tener una $icha esecí$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'
Pu)lic Proert! "et 6umic0as,- As Inte'er @0todo ara o"tener el n?mero de $ichas de
la ta"la genda'
Pu)lic unction
Pu)lic unction CerrarA'
CerrarA'enda,-
enda,- As Codi'oRet
Codi'oRetorno
orno @0todo ara cerrar la "ase de
datos'
acceso a "ases de datos desde Visual Basic% !ue utilice los c#digos roorcionados en el
manual ara estos tres elementos% y desarrolle ersonalmente las clases !ue imlementan las
demás caas'
Pu)lic
Pu)lic u
unc
ncti
tion
on "uar
"uarda
dar
ric
ic0a
0a,B
,B!V
!Val
al ?)+
?)+ic
ic0a
0a As Cla
Claic
ic0a
0a$$ ?
?ti
tion
onal
al B!Re
B!Re%%
Int6umic0a As Inte'er- As Codi'oRetorno @0todo ara guardar una $icha' 6evuelve el
n?mero de $icha asignado or la "ase de datos como camo autonum0rico'
Pu)lic unction
Pu)lic unction Borraric
Borraric0a,B!
0a,B!Va
Vall Int6umic0
Int6umic0a-
a- As Codi'oRetorno @0to
Codi'oRetorno @0todo
do ara
ara
"orrar una $icha de la ta"la genda'
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 corresondiente secci#n de tratamiento de error% ara
intercetar los osi"les errores del motor de la "ase de datos' demás% todas las $unciones
devolverán un c#digo de retorno eseci$icado or el tio 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 6O roorciona'
%&em'lo resuelto
Mod(e%iniciones
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
(,emlo = del -urso de Visual Basic van/ado
van/ado
rchivo con el estándar de devoluci#n de las $unciones'
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
Otion ()licit
rmA'enda
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
(,emlo = 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
Otion ()licit
-on$irmamos el "orrado
&$ @sgBo)Q6esea eliminar la $icha actualR% v"<eso%
v"<eso% Borrado de $icha N v"o hen
()it :u"
(nd &$
Borramos la $icha actual
O",genda'BorrarEicha &ntumEichactual
(nd :u"
ctuali/amos el $ormulario
ctuali/arEormulario
()it :u"
(nd &$
ctuali/amos el $ormulario
ctuali/arEormulario
(nd &$
(nd :u"
)t6ireccion N O",Eicha':tr6ireccion
)tele$ono N O",Eicha':trele$ono
O",Eic ha':trele$ono
ctuali/amos el $rame
Erame1'-ation N Eicha P &ntumEichactual
(nd &$
(nd &$
(nd Eunction
ClaA'enda
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
(,emlo = 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
Otion ()licit
(nd Eunction
Cla(A?@Het
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
(,emlo = del -urso de Visual Basic van/ado
van/ado
-lase de acceso a "ases
"ase s de datos utili/ando 6O y
$unciones (-L;:&V: de Jet
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
Otion ()licit
-erramos el 8ecordset
8seta"la'-lose
()it Aroerty
ratamiento(rror
umEichas N 71
(nd Aroerty
Au"lic Eunction
On (rror Moo "rirgenda s -odigo8etorno
ratamiento(rror
"rirgenda N OI
()it Eunction
ratamiento(rror
"rirgenda N (rror
(nd Eunction
-errargenda N OI
()it Eunction
ratamiento(rror
-errargenda N (rror
(nd Eunction
*ith 8seta"la
Dadimos una nueva $icha
'dde+
Yom"re N O",Eicha':trom"re
Yellidos N O",Eicha':trellidos
Y6ireccion N O",Eicha':tr6ireccion
Yele$ono N O",Eicha':trele$ono
O",Eic ha':trele$ono
-erramos el recordset
8seta"la'-lose
MuardarEicha N OI
()it Eunction
ratamiento(rror
MuardarEicha N (rror
(nd Eunction
(nd()it
&$ 6o
'@ovee)t
Loo
(nd *ith
-omro"amos
-omro"amos si hay !ue "uscar or or n?mero de $icha
(lse&$ ot &s@issing&ntumEicha hen
"rimos un recordset de tio d"Oen:nashot% ara oder
"uscar con EindEirst
:et 8seta"la
8seta"la N VarB6'Oen8ecordset-onom"rea
VarB6'Oen8ecordset-onom"rea"la% "la% d"Oen:nashot
*ith 8seta"la
Llenamos el 8ecordset
'@oveLast
-omro"amos
-omro"amos si la hemos encontrado%
encontrado% o hemos llegado
llegado al
$inal del 8ecordset sin encontrarla
*ith 8seta"la
&$ '(OE Or 'o@atch N rue hen
O"tenerEicha N (rror
(lse
Muardamos los datos o"tenidos
O",Eicha':trom"re N Yom"re
O",Eicha':trellidos N Yellidos
O",Eicha':tr6ireccion N Y6ireccion
O",Eicha':trele$ono
O",Eich a':trele$ono N Yele$ono
O",Eicha'&ntumEicha N YumEicha
O"tenerEicha N OI
(nd &$
(nd *ith
-erramos el 8ecordset
8seta"la'-lose
()it Eunction
ratamiento(rror
O"tenerEicha N (rror
(nd Eunction
-erramos el 8ecordset
'-lose
(nd *ith
BorrarEicha N OI
()it Eunction
ratamiento(rror
BorrarEicha N (rror
(nd Eunction
==
1999 Jorge Ordovás Oromendía y Vicente Lema Osca
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% deendiendo 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
=C
1999 Jorge Ordovás Oromendía y Vicente Lema Osca
Conocimientos teóricos
• ?(BC(irect no utili/a el motor Jet' (n realidad no es más !ue un inter$a/ 6O 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'
: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,emlo 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: 66at
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&
=F
1999 Jorge Ordovás Oromendía y Vicente Lema Osca
Arimero necesitamos crear un esacio de tra"a,o esecí$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 esacio de tra"a,o'
:et Var*Is
Var*Is N -reate*orIsace% % % d";seO6B-
:et Var-one)ion N Var*Is'Oen-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'
Aara sacar en la antalla Debu# los datos de cada registro de la ta"la T@ia"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 camos del registro actual% utili/aremos la
colecci#n Fields del Recordset% !ue contiene todos los camos del registro actual'
*ith 8set6atos
6o *hile ot '(OE
6e"ug'Arint T6& U P 'EieldsG'Value P v"-8LE P K
Tom"re T P 'Eields1'Value P v"-8LE P K
Tellidos T P 'Eields2'Va
' Eields2'Value
lue
'@ovee)t
Loo
(nd *ith
-uando
de regist!ueremos
registros
ros in
inserreali/ar
sert% unadelete
t% udate%
udate% 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 roiedad RowsA,ected de la cone)i#n'
=9
1999 Jorge Ordovás Oromendía y Vicente Lema Osca =9
%&em'lo 'ro'uesto
?)+etivo
(l o",etivo de este e,emlo es cam"iar la caa de acceso a la "ase de datos desarrollada en el
e,emlo
e,eml o anterior ara !ue utilice
utilice 6O y O6B-6irect
O6B-6irect en lugar de Jet ara acceder a la misma
"ase de datos% ero a trav0s de O6B-'
;na ve/ creada esta clase% el ?nico cam"io a reali/ar en la alicaci#n es sustituir en la clase
agenda -lagenda la sentencia
or
%&em'lo resuelto
;tili/aremos
;tili/ $ormulario rmA'enda % el m#dulo
aremos el $ormulario m#dulo Mod(e%iniciones y las clase Claic0a y
clase
ClaA'enda con la modi$icaci#n comentada'
Cla(A?@?(BC(irect
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
(,emlo C del -urso de Visual Basic van/ado
van/ado
-lase de acceso a "ases
"ase s de datos utili/ando 6OKO6B-6irect
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
Otion ()licit
(,ecutamos la consulta
:et 8set6atos N Var-one)ion'Oen8ecordset-adena-one)ion
Var-one)ion'Oen8ecordset-adena-one)ion
-erramos el 8ecordset
8set6atos'-lose
()it Aroerty
ratamiento(rror
umEichas N 71
(nd Aroerty
"rirgenda N OI
()it Eunction
ratamiento(rror
"rirgenda N (rror
(nd Eunction
-erramos el *orIsace
Var*Is'-lose
-errargenda N OI
()it Eunction
ratamiento(rror
-errargenda N (rror
(nd Eunction
(,ecutamos la consulta
Va
Var-one)ion'()ecute
r-one)ion'()ecute -adena:HL
-omro"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 &$
-erramos el 8ecordset
8set6atos'-lose
()it Eunction
ratamiento(rror
MuardarEicha N (rror
(nd Eunction
O",Eicha':trellidos N 'Eields2'Value
'Eields2'Value
O",Eicha':tr6ireccion N 'Eields3'Value
'Eields3'Value
O",Eicha':trele$ono
O",Eicha':trele$ono N 'Eields4'Value
'Eields4'Value
O"tenerEicha N OI
(nd &$
(nd *ith
-erramos el 8ecordset
8set6atos'-lose
()it Eunction
ratamiento(rror
O"tenerEicha N (rror
(nd Eunction
ratamiento(rror
BorrarEicha N (rror
(nd Eunction
Conocimientos teóricos
?)+eto de R(? Tio ,si alica)le- ?)+eto de (A? Tio ,si alica)le-
euivalente
rdo(ngine 6B(ngine
rdo(rror (rror
rdo(nvironment *orIsace
rdo-onnection 6ata"ase
rdoa"le a"le6e$
o está imlementado &nde)
rdo8esultset 8ecordset
o imlementado io ta"le
io Zeyset io 6ynaset
io static lSe io :nashot sSl
io dynamic ninguno
io $or+ard7only io $or+ard7only
sin cursor ninguno
rdo-olumn Eield
rdoHuery Huery6e$
rdoAarameter Aarameter
o imlementado 8elation
o imlementado Mrou
o imlementado ;ser
1999 Jorge Ordovás Oromendía y Vicente Lema Osca C=
:i rogramamos con Visual Basic 5'G% es necesario incluir en el royecto una re$erencia a
1icroso,t Remote Data +b&ect 94: '
Varia)les
Varia)les utilizadas&
(n los siguient
siguientes
es e,eml
e,emlos
os utili/
utili/arem
aremos
os una varia"le
varia"le Var-on
Var-one)i
e)ion
on !ue reresenta
reresentará
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
(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 eseci$icar el tio de cursor a utili/ar
utili/ando
utili/ando la roiedad
roiedad CursorDriver de la cone)i#n
cone)i#n eseci$icaremos
eseci$icaremos rd"se+dbc% así como
la cadena de cone)i#n usando la roiedad Connect
*ith Va
Var-one)ion
r-one)ion
'-ursor6river N rd;seOd"c
'-onnect N -on-adena-one)ion
'(sta"lish-onnection rd6riveroAromt
(nd *ith
-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'
Aara sacar en la antalla Debu# los datos de cada registro de la ta"la T@ia"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 camos del registro actual% utili/aremos la
colecci#n rdoColumns del Resultset % !ue contiene todos los camos del registro actual'
*ith 8set6atos
6o *hile ot '(OE
6e"ug'Arint T6& U P 'rdo-olumnsG'Value P v"-8LE P K
1999 Jorge Ordovás Oromendía y Vicente Lema Osca CC
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
%&em'lo 'ro'uesto
?)+etivo
(l o",etivo de este e,emlo es cam"iar la caa de acceso a la "ase de datos desarrollada en el
e,emlo anterior ara !ue utilice 86O en lugar de 6O y O6B-6irect ara acceder a la misma
misma
"ase de datos a trav0s de O6B-'
;na ve/ creada esta clase% el ?nico cam"io a reali/ar en la alicaci#n es sustituir en la clase
agenda -lagenda la sentencia
or
%&em'lo resuelto
ClaR(?
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
(,emlo F del -urso de Visual Basic van/ado
van/ado
-lase de acceso a "ases de datos utili/ando 86O
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
Otion ()licit
-erramos el rdoresultset
8set6atos'-lose
()it Aroerty
ratamiento(rror
umEichas N 71
(nd Aroerty
"rirgenda N OI
()it Eunction
ratamiento(rror
"rirgenda
(nd Eunction N (rror
1999 Jorge Ordovás Oromendía y Vicente Lema Osca FG
-errargenda N OI
()it Eunction
ratamiento(rror
-errargenda N (rror
(nd Eunction
(,ecutamos la consulta
Va
Var-one)ion'()ecute
r-one)ion'()ecute -adena:HL
-erramos el rdoresultset
8set6atos'-lose
1999 Jorge Ordovás Oromendía y Vicente Lema Osca F1
()it Eunction
ratamiento(rror
MuardarEicha N (rror
(nd Eunction
-omro"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'&ntumEicha N 'rdo-olumnsG'Value
O",Eicha':trom"re N 'rdo-olumns1'Value
O",Eicha':trellidos N 'rdo-olumns2'Value
O",Eicha':tr6ireccion N 'rdo-olumns3'Value
O",Eicha':trele$ono
O",Eicha':trele$ono N 'rdo-olumns4'Value
'rdo-olumns4'Value
O"tenerEicha N OI
(nd &$
(nd *ith
-erramos el rdoresultset
8set6atos'-lose
1999 Jorge Ordovás Oromendía y Vicente Lema Osca F2
()it Eunction
ratamiento(rror
O"tenerEicha N (rror
(nd Eunction
ratamiento(rror
BorrarEicha N (rror
(nd Eunction
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
coml
mle,
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 tios'
Aero
Aer o todos
todos los accesos
accesos al regist
registro
ro de)en ser controlados% ya !ue del registro deende 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 reerc
reercut
utir
ir en el
$uncionamiento correcto del sistema'
Conocimientos teóricos
(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'
Aodemos
Aod emos accede
accederr man
manualm ente a los valores almacenados en el registro de *indo+s
ualmente
utili/ando la alicaci#n Re#edit
am"i0n odemos acceder al registro de *indo+s desde Visual Basic utili/ando las $unciones
!ue roorciona el A& de *indo+s !ue veremos mas adelante% ero antes ro$undi/aremos
en la de$inici#n del re4istro '
Aara acceder al valor contenido en una clave es necesario conocer el :path comleto de
0sta or e,emlo% 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]Versionum"er'
rsionum"er'
1999 Jorge Ordovás Oromendía y Vicente Lema Osca F5
Aero el ro"lema !ue tienen los visores A& es !ue no roorcionan 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'
Aara oder utili/ar estas $unciones es necesario declarar tam"i0n varias constantes% !ue se
eseci$ican en el siguiente cuadro ⊗
Constante (escrición
Mlo"al
Mlo"al -onst
-onst Z(<
Z(<K-L
K-L::(
::(:K8
:K8OO
OO N PFGG
PFGGGGG
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 PFGGGGGG1
PFGGGGGG1 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 PFGGGGGG2
PFGGGGGG2 6e$ine la rama
rama Z(<KLO-
Z(<KLO-LK@-
LK@-&(
&(
Mlo"al -onst Z(<K;:(8: N PFGGGGGG3 6e$ine la ra
rama Z
Z(<K;:(8:
-onst (88O8K:;--(:: N GP Valor de error
-onst 8(MK:` N 1 io de dato :tring
-onst 8(MKB&8< N 3 io de dato "inario
-onst 8(MK6*O86 N 4 io de dato 6*O86
Aa
Aara
ra a"
a"ririrr un
una a clav
clave
e e)is
e)iste
tent
ntee de"e
de"emo
moss ese
eseci
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 tio 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,emlo%
e,emlo% 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
⊗
()isten más constantes de este tio% ero s#lo mencionamos las necesarias ara el
desarrollo del e,emlo corresondiente a este caítulo
1999 Jorge Ordovás Oromendía y Vicente Lema Osca FC
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 comro"ar si el valor devuelto or la
$unci#n es (88O8K:;--(::' Aor e,emlo% ara cerrar la clave a"ierta en el e,emlo anterior%
utili/aríamos el siguiente $ragmento de c#digo
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 eseci$ica% se entenderá !ue es el valor or de$ecto de dicha clave y el roio valor' (s
ne
nece
cesa
sari
rio
o co
conc
ncre
reta
tarr !u0
!u0 titio
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,emlo% 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()hZeyueva%
O:8eg:etValue()hZeyueva% T@iValorU% GP% 8(MK:`% T(sto es una rue"aU%
LenT(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 @iuevoValor% !ue contendrá el
n?mero 1C como vamos a crearlo como 8(MK6*O86% el tamaDo es 4
&$ O:8eg:etValue()hZeyueva%
O:8eg:etValue()hZeyueva% T@iuevoValorU% 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
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 eseci$ica%
eseci$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 tio 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 tios y tamaDos di$erentes% esta $unci#n se llamará dos
veces la rimera con un buffer vacío GP ara o"tener el tio y el tamaDo del valor> la segunda
con el buffer corresondi
corresondiente
ente a este tio y de tamaDo correcto
correcto XOJOY en el caso de R%-7S<
de"emos reservar e)resamente esacio de memoria' ;na ve/ o"tenido el valor% hay !ue
coger s#lo el tamaDo eseci$icado del valor'
Aor e,emlo% si !ueremos o"tener el valor @iValor de la clave anterior% utili/aremos la siguiente
sentencia XOJOY el 0!Val es imortante
6im lValueye
lValueye as Long
6im :trBu$ s :tring
6im l6ataBu$:i/e s Long
&$ O:8egHueryValue()hZeyueva%
O:8egHueryValue()hZeyueva% T@iValorU% GP% lValueye%
lValueye% ByVal
ByVal GP% l6ataBu$:i/e N
(88O8K:;--(:: hen
&$ lValueye N 8(MK:` hen
:trBu$ N :tringl6ataBu$:i/e%
&$ O:8egHueryValue()hZey%
O:8egHueryValue()hZey% strValueame%
strValueame% 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 &$
l6ataBu$:i/e N 4
&$ O:8egHueryValue()hZeyueva% T@iuevoValorU%
T@iuevoValorU% GP% lValueye%
lValueye% lBu$% l6ataBu$:i/e N
(88O8K:;--(:: hen
&$ lValueye
lValueye N 8(MK6*O86 hen
l6ata N lBu$
(nd &$
(nd &$
%&em'lo 'ro'uesto
?)+etivo
(l o",etivo de este e,emlo es crear un $ormulario de inicio de la alicaci#n !ue hemos
desarrollado% de $orma !ue nos ermita 1G usos y luego no nos de,e e,ecutar más la alicaci#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 alicaci#n y guardaremos el registro de
la alicaci#n% tal y como hacen la mayoría de las alicaciones del mercado'
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
unction Re'(el
Re'(eleteO
eteOe!,B
e!,B!V
!Val
al 0Oe!
0Oe! As #on'$
#on'$ B!Val
B!Val lszSu
lszSu)Oe
)Oe!! As Strin'
Strin'-- As
Boolean
(stas $unciones utili/aran sus corresondientes $unciones del A& de *indo+s% tal y como se
ha e)licado antes en este caítulo'
-ada ve/ !ue se e,ecute la alicaci#n se lan/araría este $ormulario ara este e,emlo no ha"rá
alicaci#n !ue lan/ar tanto si la alicaci#n se registra como si es está en eríodo de rue"a o
se suera 0ste% el $ormulario se descargará y nada más'
La r
rim
imer
era
a ve/ !ue se e,ece,ecut
ute
e la ali
alica
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 cation del la"el in$erior ara mostrar el
n?mero má)imo de e,ecuciones ermitidas y el n?mero actual de e,ecuciones'
l ulsar el "ot#n acetar% crearemos un nuevo valor 6atos8egistro en nuestra clave% !ue
contendrá el nom"re y clave de registro searados or un gui#n'
La alicaci#n de"e comro"ar cada ve/ !ue se e,ecuta si e)iste el valor 6atos8egistro% en cuyo
caso se suone !ue está registrada y no se tomará en cuenta el valor de um&ntentos y
@a)&ntentos del registro% ermitiendo siemre lan/ar la alicaci#n en nuestro caso siemre se
descargará el $ormulario'
1999 Jorge Ordovás Oromendía y Vicente Lema Osca 91
%&em'lo resuelto
rmPresentacion
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
(,emlo 9 del -urso de Visual Basic van/ado
van/ado
Eormulario de resentaci#n% en 0l comro"amos los usos% la registraci#n de la alicaci#n'''
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
Otion ()licit
-onst -on@a)&ntentos N 1G
"rimos
&$ la clave del regi:tro
8egOenZeyZ(<KLO-LK@-&(% :OE*8(]genda%
:OE*8(]genda% hIey()istente hen
1999 Jorge Ordovás Oromendía y Vicente Lema Osca 92
ctuali/amos el $ormulario
La"um;sos'-
La"um;sos'-ation
ation N La agenda ha sido utili/ada
utili/ada P Lngum&ntento
Lngum&ntentoss P
veces má)imo P Lng@a)&ntentos P
(lse
La"um;sos'-
La"um;sos'-ation
ation N La agenda ha sido utili/ada
utili/ada P Lngum&ntento
Lngum&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
8eg-loseZey hZey
ctuali/amos el $ormulario
La"um;
La"um;sossos'-a
'-ati
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
rmRe'istro
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
(,emlo 9 del -urso de Visual Basic van/ado
van/ado
Eormulario ara introducir los datos del registro de la alicaci#n'
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
Otion ()licit
Arivate :u" ButcetarK-licI
6im hIey()istente s Long
6im :tr-lave s :tring
6im :tr-adena8egistro s :tring
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:tringValuehIey()istente%
8eg:et:tringValuehIey()istente% :tr-lave% :tr-adena8egistro hen
@sgBo) La alicaci#n ha sido registrada con 0)ito'% % 8egistro
;nload @e
(nd
(nd &$ &$
(nd :u"
ModRe'istro
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
(,emlo 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
Otion ()licit
A& de maniulaci#n del regi:tro 32 "its
6eclare Eunction O:8eg-loseZey Li" advai32 lias 8eg-loseZey ByVal hZey s Long
s Long
6eclare Eunction O:8eg-reateZey Li" advai32 lias 8eg-reateZey ByVal hZey s
Long% ByVal ls/:u"Zey s :tring% hI8esult s Long s Long
Lon g
6eclare Eunction O:8eg6eleteZey Li" advai32 lias 8eg6eleteZey ByVal hZey s
Long% ByVal ls/:u"Zey s :tring s Long
6eclare Eunction O:8egOenZey Li" advai32 lias 8egOenZey ByVal hZey s Long%
ByVall ls/:u"Zey s :tring% hI8esult s Long s Long
ByVa
6eclare Eunction O:8egHueryValue() Li" advai32 lias 8egHueryValue() ByVal hZey
s Long% ByVal
ByVal ls/Valueame
ls/Valueame s :tring% ByVal
ByVal d+8eserved s Long% ld+ye s Long%
l"6ata s ny% c"6ata s Long s Long
6eclare Eunction O:8eg:etValue() Li" advai32 lias 8eg:etValue() ByVal hZey s
Long% ByVal ls/Valueame s :tring% ByVal d+8eserved s Long% ByVal $d+ye s Long%
l"6ata s ny% ByVal c"6ata s Long s Long
Mlo"al -onst Z(<K-L::(:K8OO N PFGGGGGGG
1999 Jorge Ordovás Oromendía y Vicente Lema Osca 94
-onst 8(MK:` N 1
-onst 8(MKB&8< N 3
-onst 8(MK6*O86 N 4
socia un valor con nom"re :trValueame N nom"re o sin nom"re :trValueame N
con una clave del regi:tro'
Eunction
Euncti on 8eg:et:tring
8eg:et:tringVaValueBy
lueByVa
Vall hZey s Long% ByVal
ByVal strValu
strValueame
eame s :tring%
:tring% ByVal
ByVal
:tr6ata s :tring s Boolean
On (rror Moo G
&$ hZey N G hen ()it Eunction
&$ O:8eg:etValue()hZey%
O:8eg:etValue()hZey% strValueame% 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 strValueame N nom"re o sin nom"re strValueame N
con una clave del registro'
Eunction 8eg:etumericValueByVal hZey s Long% ByVal strValueame s :tring% ByVal
l6ata s Long% Otional ByVal
ByVal $Log s Boolean
On (rror Moo G
&$ O:8e
O:8eg:
g:et
etV
Value(
lue()
)hZ
hZey
ey%% st
strV
rVal
alue
ueam
ame%
e% GP
GP%% 8(MK
8(MK6*
6*O8
O86%
6% l6ata
l6ata%% 4 N
(88O8K:;--(:: hen
8eg:etumericValue
8eg:etumericValue N rue
(lse
8eg:etumericValue
8eg:etumericValue N Ealse
(nd &$
(nd Eunction
(nd &$
(nd Eunction
8egHuery:tringValue N Ealse
8egHuery:tringValue
O"tiene el tio y longitud de los datos
&$ O:8egHueryValue()hZey%
O:8egHueryValue()hZey% strValueame%
strValueame% GP% lValueye%
lValueye% ByVal
ByVal GP% l6ataBu$:i/e N
(88O8K:;--(:: hen
&$ lValueye
lValueye N 8(MK:` hen
:trBu$ N :tringl6ataBu$:i/e%
&$ O:8egHueryValue()hZey%
O:8egHueryValue()hZey% strValueame%
strValueame% 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
On (rror Moo G
8egHueryumericValue
8egHueryumericValue N Ealse
O"tiene el tio
l6ataBu$:i/e N 4y longitud de los datos
&$ O:8egHueryV
O:8egHueryValu alue()hZ
e()hZey%
ey% strValu
strValueame%
eame% GP% lValue
lValuey
ye%
e% lBu$% l6ataBu$:i/
l6ataBu$:i/e
e N
(88O8K:;--(:: hen
&$ lValueye
lValueye N 8(MK6*O86 hen
l6ata N lBu$
8egHueryumericValue
8egHueryumericValue N rue
(nd &$
(nd &$
(nd Eunction
1999 Jorge Ordovás Oromendía y Vicente Lema Osca 9C
;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 imone ning?n límite en cuanto al n?mero de o",etos distintos de un royecto'
Limitaciones de controles
Proieda
List edad y Alitroles
-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 sueren ese límite' Los títulos en las
veri$
eri$iicaci
caci#n
#n%% marc
marcoo y roie
ro iedade
dadess de los control
controles
es erson
ersonali
ali/ad
/ados
os
"ot#n de oci#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
diso
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= esacios 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'
Las siguientes limitaciones son alica"les a las varia"les en el lengua,e Visual Basic
-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 roiolos
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'
Esacio de ila
Los argumentos y las varia"les locales en los rocedimientos ocuan esacio de ila en tiemo
de e,ecuci#n' Las varia"les estáticas y a nivel de m#dulo no ocuan esacio 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 roios usos% como el almacenamiento de valores
intermedios al evaluar e)resiones'
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 tiemo de e,ecuci#n'
Auede comro"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 alicaciones
alicaciones 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
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 alicaciones y $inali/ar la e,ecuci#n
de alicaciones'
E/tensión (escrició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 deendencias 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
E/tensión (escrición
'dll -omonente ctive en roceso
'e)e rchivo e,ecuta"le o comonente 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
alicaci#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,emlo% el Bloc de notas'
(n las siguientes secciones se descri"en los archivos de tiemo diseDo y de tiemo 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 descrici#n del $ormulario'
• ;n con,unto de atri"utos del $ormulario'
• (l c#digo Basic del $ormulario'
La descrici#n del $ormulario contiene los valores de las roiedades del $ormulario' Los
"lo!ues de te)to !ue de$inen las roiedades de los controles del $ormulario están anidados en
el $ormulario' Los controles contenidos en otros controles tienen sus roiedades anidadas en
el te)to del contenedor' La $igura '1 ilustra la estructura de la descrici#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
alicaci#n de Visual Basic !ue tiene un n?mero de versi#n menor !ue 5'GG% aarece 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
Bloues de control
;n blo'
blo'ue control cons
ue de control consta
ta de
dell te)t
te)to
o de la desc
descri
rici
ci#n
#n de
dell $o
$orm
rmul
ulari
ario
o !u
!uee de
de$i$ine
ne la
lass
roiedades de un control individual' l igual !ue la descrici#n del $ormulario% los "lo!ues de
control emie/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 roiedades ara el control aarecen entre la instrucci#n Be'in y la instrucci#n End'
ordenaci#n (l
$ormulario' relativa
rimer!ue determina
control la manera del
de la descrici#n en la !ue los controles
$ormulario esta"lecese solaan
la arte entredel
in$erior sí orden
en un
/' Los controles !ue aarecen osteriormente en la descrici#n del $ormulario están más arri"a
en el orden / y% or tanto% solaan 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
Controles de menQ
Los controles de men? de"en aarecer ,untos al $inal de la descrici#n del $ormulario% ,usto
antes de !ue emiece la secci#n de atri"utos' -uando Visual Basic encuentra un control de
men? durante la carga de un $ormulario :-&&% esera 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?% suone !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
@0to
@0todo
do a"
a"re
revi
viad
ado
o N E4
E4 \-8
\-8L
L\E
\E4
4
Sinta/is
;se esta sinta)is ara de$inir las roiedades en la descrici#n del $ormulario
ad = valor
propiedad
propied
Los valores de roiedad de te)to de"en aarecer entre comillas do"les' Las roiedades
"ooleanas tienen un valor f 1 ara T Tru
ruee y G ara
ara alse' Visual Basic interreta todos los
distintos de f 1 o G como True' Las roiedades con valores enumerados incluyen sus
valoress distintos
valore
valores num0ricos con la descrici#n del valor incluida como comentario' Aor e,emlo% la
roiedad BorderSt!le aarece así
Border:tyle N G inguno
Valores )inarios de roiedades
lgunos controles disonen de roiedades cuyos valores son datos "inarios% como la
roiedad Picture del cuadro de imagen y los controles de imagen o ciertas roiedades de los
controles ersonali/ados' Visual Basic guarda todos los datos "inarios de un $ormulario en un
archivo de datos "inario aarte 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 disoni"le ara el $ormulario cuando Visual Basic lo carga' :i
comarte
comar te $ormularios con otras ersonas !ue usan un archivo
archivo de datos "inario% aseg?rese de
roorcionar el archivo de datos "inario '$r)% además del $ormulario '$rm'
Las roiedades !ue tengan datos "inarios como valores aarecen en el $ormulario como una
re$erencia a un desla/amiento de "yte en el archivo de datos "inario' Aor e,emlo% el valor de
una roiedad Picture aarece de la siguiente manera en la descrici#n de un $ormulario
1999 Jorge Ordovás Oromendía y Vicente Lema Osca 1G5
Proiedad Icon
(l valor
valor de la roie
roieda
dadd Icon de un $ormulario deende de !u0 icono se utilice ara el
$ormulario' La siguiente ta"la muestra los valores de la roiedad Icon y la manera en !ue esas
roiedades aarecen en un $ormulario'
Proiedad Ta)Inde/
:i no se eseci$ica la roiedad 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 roiedades !ue
utilicen
utilicen unidades de medida se e)resan
e)resan en t+is'
t+is' -uando un control
control usa un modo de escala
di$erente a los t+is y Visual Basic carga el $ormulario% convierte los valores en t+is del
$ormulario :-&& a las unidades de medida eseci$icadas or la roiedad ScaleMode'
Valores de colores
Los valores de colores aarecen como valores 8MB ro,o% verde y a/ul' Aor e,emlo% la
roiedad oreColor aarece de esta manera
Eore-olor N PGGEEGGGGP
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 corresonde 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=
?)+etos de roiedades
lgunos o",etos de roiedades% como or e,emlo el o",eto ont% aarecen como un "lo!ue
distinto y muestran todos los valores de las di$erentes roiedades del o",eto' (stos "lo!ues
están delimitados or las instrucciones Be'inProert! y EndProert! de la siguiente $orma
Be'inProert! nombre_propiedad
propiedad<
propiedad< = valor<
propiedad = valor
propiedad
'
'
'
EndProert!
Códi'o de Basic
(l c#digo
c#digo de Basic
Basic aarec
aarecee en el $or
$ormul
mulari
ario
o inmedi
inmediata
atamen
mentete desu0s
desu0s 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 descrici#n del $ormulario' Las
instrucciones en la secci#n 6eclaraciones de un $ormulario aarecen rimero% seguidas de los
rocedimientos de evento% los rocedimientos generales y las $unciones'
El no
nom)
m)rere de
%ormulario. dell %orm
%ormul
ular
ario
io o de M(I
M(Ior
orm
m nombre7,ormulario no es v8l v8lido
ido im
imosi
osi)l
)lee car
car'ar
'ar este
(ste mensa,e aarece 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 eme/a
eme/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 roiedad del control nombre7control no es v8lido.
(ste mensa,e
mensa,e aarece si el nom"re de una roiedad 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 roiedad'
Imosi)le car'ar la roiedad nombre7'ro'iedad del control nombre7control4
(ste mensa,e aarece si Visual Basic encuentra una roiedad desconocida' Visual Basic asa or alto esta
roiedad cuando carga el $ormulario'
1999 Jorge Ordovás Oromendía y Vicente Lema Osca 1GF
:tartuNBEorm
-ommand32N
ameNAro,ect1
el-onte)t&6NG
-omati"le@odeNG
@a,orVerN1
@inorVerNG
8evisionVerNG
uto&ncrementVerNG
:erver:uortEilesNG
Version-omanyameN@icroso$t
-omilationyeNG
Otimi/ationyeNG
EavorAentiumArotmNG
-odeVie+6e"ug&n$oNG
oliasingNG
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% comonentes% etc' al
royecto' am"i0n se agregan entradas cuando esta"lece ociones ara el royecto' @uchas
de estas ociones se esta"lecen mediante el cuadro de diálogo Proiedades del ro!ecto'
1999 Jorge Ordovás Oromendía y Vicente Lema Osca 11G
Las convenciones
legi"le de codi$icaci#n
y sin am"igedad% correctas dan
!ue es coherente como convenciones
con otras resultado un c#digo $uenteyreciso%
del lengua,e lo más
intuitivo osi"le'
de la organi/aci#n%
adicionales como !ui/ás desee amliar estas instrucciones ara !ue incluyan elementos
• -onvencion
-onvenc iones
es ara
ara o",eto
o",etoss esecí
esecí$ic
$icos
os y comon
comonententes
es desarr
desarroll
ollados
ados interna
internament
mente
e o
comrados 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 emresa considere imortante ara conseguir
mayor claridad y legi"ilidad'
Los o",etos de"en llevar nom"res con un re$i,o coherente !ue $acilite la identi$icaci#n del tio
de o",eto' continuaci#n se o$rece una lista de convenciones recomendadas ara algunos de
los o",etos ermitidos or Visual Basic'
E
-ouramdaro de n?mero sshn sshn
A
-áírgciunlaos
-uadro de te)to t)t t)tellido
-ron#metro tmr tmrlarma
rri"a7a"a,o ud ud6irecci#n
Barra de desla/amiento ve
vertical vs" vs"Velocidad
-ontrol desli/ante sl d sld(scala
Lista de imágenes ils ilsodosLos&conos
Vista de ár"ol tre treOrgani/aci#n
Barra de herramientas tl" tl"cciones
a":tri ta" ta"Ociones
Barra de estado sta staEechaora
Lista lv+ lv+(nca"e/ados
Barra de rogreso rg rg-argarrchivo
8iche)tBo) rt$ rt$&n$orme
1999 Jorge Ordovás Oromendía y Vicente Lema Osca 113
;se los re$i,os siguientes ara indicar O",etos de acceso a datos 6O'
Baostoerddeed"aato
@ ses de datos d
d""e d"
d "e-Jueetntas
6ocumento doc doc&n$ormeVentas
-amo $ld $ld6irecci#n
Mruo gr grEinan/as
ndice id) id)(dad
Aarámetro rm rm-#digoarea
6e$inici#n de consulta !ry !ryVentasAor8egi#n
-on,unto de registros rec recArevisi#n
8elaci#n rel rel6et6e(mleados
6e$inici#n de ta"la t"d t"d-lientes
;suario usr usruevo
(sacio de tra"a,o + s +s@ío
lgunos e,emlos
6im d"Bi"lio s 6ata"ase
6im rec(ditores@6 s 8ecordset% str&nstruc:HL s :tring
-onst 6BK8(6OL< N 4 (sta"lece la constante'
"re la "ase de datos'
:et d"Bi"lio N Oen6ata"aseB&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"'Oen8ecordsetstr&nstruc:HL% K
d":#loLectura
Las alicaciones 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,emlos'
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 mnurchivo"rir
rchivo (nviar correo mnurchivo(nviar-orreo
rchivo (nviar $a) mnurchivo(nviarEa)
Eormato -arácter mnuEormato-arácter
yuda -ontenido mnuyuda-ontenido
-uando se usa esta convenci#n de nom"res% todos los miem"ros de un gruo de men?s
determinado se muestran uno ,unto a otro en la ventana Aroiedades 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'
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 roorcionan más claridad'
Aara controles derivados o modi$icados% or e,emlo% amlí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,emlo%
e,emlo% 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
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% Visrocedimiento
(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 alicaci#n
6eclaraciones de un
m#dulo de c#digo '"as
(n una alicaci#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 comartir 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 agrua
agruadas
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 siemre !ue sea osi"le' Aor
e,emlo% si la alicaci#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 alicaci#n organi/ado en comonentes ?tiles y minimi/a la so"recarga en tiemo
de e,ecuci#n'
e)ceci#n de las varia"les glo"ales !ue no se de"erían asar% los rocedimientos y
$unciones de"en oerar 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 rinciio
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'
;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% resectivamente'
Constantes
(l cuero 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 tio 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,emlo
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
gstruevaLínea -arácter de nunueva lílínea
cadena% glo"al de la
alicaci#n
Varia)les
6eclarar todas las varia"les ahorra tiemo de rogramaci#n or!ue reduce el n?mero de
errores de"idos a erratas or e,emlo% aom"re;suariom $rente a som"re;suariom
$rente a som"re;suarioem' (n la $icha Editor del cuadro de diálogo ?ciones% active la
o
oci
ci#n
#n (eclaración de varia)les reuerida ' 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 tio de datos' Ocionalmente% y en esecial
ara rogramas largos% el re$i,o se uede amliar ara indicar el alcance de la varia"le'
;se los re$i,os siguientes ara indicar el tio de datos de una varia"le'
($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
aar
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 imortante 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 imlementaci#n comle,os'
• l rinciio 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 alicaci#n%
alicaci#n% enumerando
enumerando
los rinciales
rinciales o",etos
o",etos de datos% rocedimientos
rocedimientos%% algoritmos%
algoritmos% cuadros de diálogo%
diálogo% "ases de
datos y deendencias del sistema' lgunas veces uede ser ?til un seudoc#digo !ue
descri"a el algoritmo'
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
Einali
Einalidad
dad ;"ica
;"ica el ri
rimer
mer caso
caso enco
encontra
ntrado
do de un
un
usuario eseci$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''
8esultadosndice 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
:trings &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 ;"oundstrLista;suario and ot "ln(ncontrado
&$ strLista;suarioi N str;suario6est hen
"ln(ncontrado N rue
intBuscar;suario N i
(nd &$
*end
(nd Eunction
A'ruación de constantes
Las varia"les y constantes
constantes de$inidas se de"en agruar or $unciones en lugar de dividirlas
dividirlas en
áreas aisladas o archivos eseciales' Las constantes gen0ricas de Visual Basic se de"en
agruar en un ?nico m#dulo ara seararlas de las declaraciones esecí$icas de la alicaci#n'
?eradores U !
;se siemre oeradorr U ara
siemre el oerado ara unir cade
cadenas
nas y el oerad or cuando tra"a,e con valores
oerador
num0ricos' (l uso del oerador ara concatenar uede causar ro"lemas cuando se oera
so"re dos varia"les Variant' Aor e,emlo
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