Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
aplicacin ) descarga todos los #ormularios& 2uando nali0a su aplicacin con la sentencia
(nd no se desencadena ning/n e!ento de los #ormularios&
(jemplos
H Descarga el +ormulario actual
"rivate Sub cmdCerrar@Clic& ' (
-nload )e
End Sub
H FinaliFa la aplicaci:n
"rivate Sub cmdFinaliFar@Clic& ' (
End
End Sub
,l ,ditor de men/s
,sta 5erramienta permite crear men/s personali0ados para la aplicacin )
denir sus propiedades& Para ingresar* estando en tiempo de dise6o* 5aga
clic en el men/ Herramientas ) luego en la orden (ditor de Men:s o en
el botn e-ui!alente de la barra de 5erramientas estndar&
Nota: Para poder ingresar el editor de men9s no de$e encontrarse en la
)entana de cdigo.
.pciones del cuadro de di1logo
Parte Descripcin
2aption 'e permite escribir el nombre del comando o del men/ -ue
desea -ue apare0ca en la barra de men/s o en un men/& +i
desea crear una barra separadora en el men/* escriba un
/nico guin 3>4 en el cuadro 2aption&
Parte Descripcin
Para dar al usuario acceso a tra!s del teclado a un elemento
del men/* escriba el signo P delante de una letra& ,n tiempo de
e(ecucin* esta letra aparecer subra)ada 3el signo P no ser
!isible4 ) el usuario tendr acceso al men/ o al comando si
presiona las
teclas 4#* ) la correspondiente a la letra subra)ada& +i necesita
-ue apare0ca en el men/ el signo P* deber escribir dos signos
P consecuti!os&
;ame 'e permite escribir un nombre de control para el elemento del
men/& ,l nombre de control es un identicador -ue slo se
utili0a para tener acceso al elemento del men/ en el cdigo* no
aparece en ning/n men/&
Inde8 'e permite asignar un !alor numrico -ue determina la posicin
del control en una matri0 de controles& ,sta posicin no tiene
ninguna relacin con la ubicacin del control en la pantalla&
+5ortcut 'e permite seleccionar una tecla de mtodo abre!iado para
cada comando&
@elp2onte8tID 'e permite asignar un !alor numrico /nico para el Id& de
conte8to& ,ste !alor se utili0a para encontrar el tema de A)uda
apropiado en el arc5i!o de A)uda identicado mediante la
propiedad @elp:ile&
;egotiatePosition 'e permite seleccionar la propiedad ;egotiatePosition del
men/& ,sta propiedad determina si el men/ aparece o no en un
#ormulario contenedor ) cmo aparece&
25ecKed 'e permite 5acer -ue apare0ca inicialmente una marca de
!ericacin a la i0-uierda de un elemento del men/& +e utili0a
normalmente para indicar si una opcin de alternar est
acti!ada o no&
,nabled 'e permite seleccionar si el elemento del men/ debe responder
a e!entos& Desacti!e esta opcin si desea -ue el elemento del
men/ no est disponible ) apare0ca atenuado&
Visible 'e permite 5acer -ue un elemento apare0ca en el men/&
$indo%'ist Determina si el control del men/ contiene una lista de
#ormularios secundarios "DI abiertos en una aplicacin "DI&
:lec5a a la derec5a
Pasa el men/ seleccionado a un ni!el in#erior cada !e0 -ue 5ace
clic en el botn& Puede crear 5asta cuatro ni!eles de submen/s&
:lec5a a la i0-uierda
Pasa el men/ seleccionado a un ni!el superior cada !e0 -ue
5ace clic en el botn& Puede crear 5asta cuatro ni!eles de
submen/s&
:lec5a arriba
2ada !e0 -ue se 5ace clic en este botn* el elemento
seleccionado del men/ se mue!e 5acia arriba una posicin
dentro del mismo ni!el de men/&
:lec5a aba(o
2ada !e0 -ue se 5ace clic en este botn* el elemento
seleccionado del men/ se mue!e 5acia aba(o una posicin
dentro del mismo ni!el de men/&
'ista "en/s ,s un cuadro de lista -ue muestra en orden (err-uico
todos los elementos del men/&
'os elementos de los submen/s aparecen indentados para
indicar su ubicacin o su ni!el en la (erar-u.a&
+iguiente +elecciona la l.nea siguiente&
Insertar Inserta una l.nea en el cuadro de lista* inmediatamente encima
de la l.nea actualmente
Parte Descripcin
seleccionada&
,liminar ,limina Borra la l.nea actualmente seleccionada&
Aceptar 2ierra el ,ditor de men/s ) aplica todos los cambios e#ectuados
en el /ltimo #ormulario
seleccionado& ,l men/ est disponible en tiempo de dise6o* pero
si selecciona un men/
en la #ase de dise6o* se abre la !entana 2digo para el e!ento
2lic de ese men/ en lugar de e(ecutarse el cdigo del e!ento&
2ancelar 2ierra el ,ditor de men/s ) cancela todos los cambios&
A6adiendo 2ontroles Adicionales al 2uadro de @erramientas
,l 2uadro de @erramientas contiene los controles intr.nsecos o estndar de
Visual Basic& ,s posible ampliar el cuadro de 5erramientas a6adiendo
controles Acti!eJ& 'a edicin pro#esional de Visual Basic proporciona
controles Acti!eJ adicionales& 9ambin es posible comprar controles Acti!eJ
a terceras partes&
Para a6adir un control Acti!eJ al cuadro de 5erramientas 5aga lo siguiente:
1& 1& ,n el men/ .royecto* 5aga clic en Componentes& Visual Basic
mostrar el cuadro de dilogo Componentes&
A& A& ,n la c5a Controles* 5aga clic en el control -ue desea incluir* )
luego 5aga clic en 4ceptar& Visual Basic a6adir el control al cuadro de
5erramientas&
El control -oolBar
1n control *oolbar contiene una coleccin de ob(etos Button utili0ados
para crear una barra de 5erramientas asociada a una aplicacin&
Comentarios
;ormalmente* una barra de 5erramientas contiene botones -ue
corresponden a elementos de men/ de una aplicacin* proporcionando una
inter#a0 grca al usuario -ue le permite tener acceso a las #unciones )
comandos empleados con ms #recuencia en esa aplicacin&
,l control *oolbar le permite crear barras de 5erramientas agregando ob(etos Button a
una coleccin Buttons7 cada ob(eto Button puede tener te8to opcional o una
imagen* proporcionados por un control /mage#ist asociado& Puede mostrar una
imagen en un botn con la propiedad /mage o mostrar te8to con la propiedad
Caption* o ambos* para cada ob(eto Button& ,n tiempo de dise6o puede agregar
ob(etos Button al control utili0ando la .@gina de propiedades del control
9oolbar& ,n tiempo de e(ecucin* puede agregar o -uitar botones de la coleccin
Buttons mediante los mtodos 4dd ) Aemove&
Para programar el control *oolbar* agregue cdigo al e!ento ButtonClick para -ue
responda al botn seleccionado& 9ambin puede determinar el comportamiento )
la apariencia de cada ob(eto Button mediante la propiedad !tyle& Por e(emplo* si
a cuatro botones se les asigna el estilo Button,roup* slo se podr presionar
uno de ellos ) al menos uno estar siempre presionado&
'a #acilidad de uso se me(ora considerablemente programando
descripciones *ool*ip*et de cada ob(eto Button& Para mostrar
in#ormacin sobre 5erramientas* la propiedad !ho"*ips debe establecerse
a 9rue&
El Control Image#ist
1n control /mage#ist contiene una coleccin de ob(etos #ist/mage* a
cada uno de los cuales se puede 5acer re#erencia mediante su .ndice o su
cla!e& ,l control /mage#ist no est concebido para utili0arlo en solitario*
sino como punto de almacenamiento central para proporcionar
cmodamente imgenes a otros controles&
Comentarios
Puede usar el control /mage#ist con cual-uier control -ue asigne un ob(eto
.icture a una propiedad .icture&
,s posible agregar imgenes de di#erentes tama6os al control /mage#ist*
pero todas se a(ustan al mismo tama6o& ,l tama6o de los ob(etos de
#ist/mage est determinado por uno de los siguientes !alores:
,l !alor de las propiedades /mage>idth ) /mageHeight antes
de agregar alguna imagen&
'as dimensiones de la primera imagen agregada&
;o 5a) ninguna limitacin en cuanto al tama6o de la imagen* pero el
n/mero total de imgenes -ue se puede cargar est limitado por la
cantidad de memoria disponible&
Durante el dise6o del programa puede agregar imgenes mediante la c5a
,eneral del cuadro de dilogo .ropiedades del control /mage#ist& ,n
tiempo de e(ecucin puede agregar imgenes mediante el mtodo 4dd
para la coleccin #ist/mages&
Nota8 #os controles Toolbar e Image&ist *orman parte del grupo de
controles !cti)e4 adicionales Microso*t <indo:s Common Controls =.>
6arc+i)o C.MC-#?(..C47. Para usarlos en su aplicacin de$e agregar el
arc+i)o C.MC-#?(..C4 al proyecto. Cuando distri$uya su aplicacin'
instale el arc+i)o C.MC-#?(..C4 en la carpeta 5ystem o 5ystem?( 6en
plata*ormas con <indo:s @-7 de Microso*t <indo:s del usuario.
Inter#a0 de "/ltiples Documentos 3"DI Y "ultiple Document
Inter#ase4
El .$,eto MDIForm
1n #ormulario "DI es una !entana -ue act/a como #ondo de una aplicacin
) es el contenedor de #ormularios -ue tienen su propiedad "DI25ild
establecida a 9rue& Para crear un ob(eto "DI:orm* eli(a 4gregar 'ormulario
M5/ en el men/ .royecto* luego de agregarlo tenga en cuenta lo
siguiente:
1na aplicacin slo puede tener un ob(eto "DI:orm* pero !arios
#ormularios secundarios "DI&
+i un #ormulario secundario "DI tiene men/s* la barra de men/s del
#ormulario secundario reempla0ar automticamente a la barra de
men/s del ob(eto "DI:orm cuando el #ormulario secundario "DI est
acti!o&
1n #ormulario secundario "DI minimi0ado se mostrar como un icono
en el "DI:orm&
1n ob(eto "DI:orm slo puede contener controles "enu ) PictureBo8*
) controles personali0ados -ue tengan una propiedad Align& Para colocar
otros controles en un "DI:orm* puede dibu(ar un cuadro de imagen en el
#ormulario ) despus dibu(ar otros controles dentro del cuadro de
imagen& Puede utili0ar el mtodo Print para mostrar te8to en un cuadro
de imagen de un "DI:orm* pero no puede usar este mtodo para
mostrar te8to en el "DI:orm propiamente dic5o&
1n ob(eto "DI:orm no puede ser modal&
'os #ormularios secundarios "DI se dise6an de #orma independiente
del "DI:orm* pero siempre estn contenidos en el "DI:orm en tiempo de
e(ecucin&
Formulario secundario MDI
1n #ormulario contenido dentro de un #ormulario "DI en una aplicacin con
inter#a0 de m/ltiples documentos 3"DI4& Para crear un #ormulario
secundario* estable0ca su propiedad "DI25ild a 9rue&
Propiedad MDIC+ild
De!uel!e o establece un !alor -ue indica si un #ormulario debe mostrarse
como #ormulario secundario "DI dentro de un #ormulario "DI& ,s de slo
lectura en tiempo de e(ecucin& 'os !alores admitidos para la propiedad
"DI25ild son:
Valor5escripci$n
9rue ,l #ormulario es "DI secundario ) se mostrar dentro del #ormulario
"DI primario&
:alse 3Predeterminado4 ,l #ormulario no es "DI secundario&
Comentarios
1tilice esta propiedad al crear una aplicacin con inter#a0 de m/ltiples
documentos 3"DI4& ,n tiempo de e(ecucin* los #ormularios -ue tengan
establecida a 9rue esta propiedad se mostrarn dentro de un #ormulario
"DI& 'os #ormularios "DI secundarios pueden ma8imi0arse* minimi0arse )
despla0arse* siempre dentro del #ormulario "DI primario& 2uando traba(e
con #ormularios "DI secundarios* tenga en cuenta lo siguiente:
,n tiempo de e(ecucin* cuando un #ormulario "DI secundario se
ma8imi0a* su t.tulo se combina con el del #ormulario "DI primario&
,n tiempo de dise6o* los #ormularios "DI secundarios se muestran de
la misma #orma -ue el resto ) slo se mostrarn dentro del #ormulario
primario en tiempo de e(ecucin& ,l icono de un #ormulario "DI
secundario en la !entana Pro)ecto es distinto de los iconos de otros tipos
de #ormularios&
'os #ormularios "DI secundarios no pueden ser modales&
,l entorno operati!o "icroso#t $indo%s controla el tama6o ) la
posicin iniciales de los #ormularios "DI secundarios* a menos -ue los
estable0ca espec.camente en el procedimiento de e!ento 'oad&
+i se 5ace re#erencia a un #ormulario "DI secundario antes de cargar
el #ormulario "DI primario* ste se cargar automticamente& +in
embargo* si se 5ace re#erencia al #ormulario "DI primario antes de
cargar un #ormulario "DI secundario* el #ormulario "DI secundario no se
cargar&
Parte B: 9ipos De Datos* 2onstantes
) Variables
9ipos de Datos
1n tipo de dato determina la naturale0a del dominio de !alores -ue puede tomar una
!ariable* las operaciones en -ue puede participar ) el espacio de memoria -ue necesita& 'a
tabla siguiente muestra los tipos de datos* inclu)endo el tama6o de almacenamiento ) el
inter!alo&
*ipo de 5ato *ama-o de
4lmacenamient
o
Aango
B)te 1 b)te I a AFF
Boolean A b)tes 9rue o :alse
Integer A b)tes >BA&HGW a BA&HGH
'ong
3entero largo4
C b)tes >A&1CH&CWB&GCW a A&1CH&CWB&GCH
+ingle
3coma DotanteN
precisin simple4
C b)tes >B*CIAWAB,BW a >1*CI1AXW,>CF para !alores negati!os7
1*CI1AXW,>CF a B*CIAWAB,BW para !alores positi!os
Double
3coma DotanteN
precisin doble4
W b)tes >1*HXHGXB1BCWGABA,BIW a >C*XCIGFGCFWC1ACH,>BAC para
!alores negati!os7 C*XCIGFGCFWC1ACH,>BAC a
1*HXHGXB1BCWGABA,BIW para !alores positi!os
2urrenc)
3entero a escala4
W b)tes >XAA&BBH&AIB&GWF&CHH*FWIW a XAA&BBH&AIB&GWF&CHH*FWIH
Decimal 1C b)tes QN>
HX&AAW&1GA&F1C&AGC&BBH&FXB&FCB&XFI&BBF sin punto
decimal7
QN>
H*XAAW1GAF1CAGCBBHFXBFCBXFIBBF con AW posiciones a la
derec5a del signo decimal7 el n/mero ms pe-ue6o distinto
de cero es
QN>
I*IIIIIIIIIIIIIIIIIIIIIIIIII1
Date W b)tes 1 de enero de 1II a B1 de Diciembre de XXXX
=b(ect C b)tes 2ual-uier re#erencia a tipo =b(ect
+tring
3longitud
!ariable4
1I b)tes Q
longitud de la
cadena
Desde I a A&III millones
+tring
3longitud (a4
'ongitud de la
cadena
Desde 1 a GF&CII apro8imadamente
Variant
3con n/meros4
1G b)tes 2ual-uier !alor numrico 5asta el inter!alo de un tipo
Double
Variant
3con caracteres4
AA b)tes Q
longitud de la
cadena
,l mismo inter!alo para un tipo +tring de longitud !ariable&
Denido por el
usuario
3utili0ando 9)pe4
;/mero
re-uerido
por los elementos
,l inter!alo de cada elemento es el mismo -ue el inter!alo
de su tipo de datos
Nota: #as matrices de cual0uier tipo de datos re0uieren (> $ytes de memoria m1s cuatro
$ytes para cada dimensin de matriz' m1s el n9mero de $ytes 0ue ocupan los propios
datos. Por e,emplo' los datos de una matriz unidimensional 0ue constan de cuatro
elementos de datos tipo Integer de dos $ytes cada uno' ocupan oc+o $ytes. #os oc+o
$ytes 0ue re0uieren los datos m1s los (A $ytes necesarios para la matriz suman un
re0uisito total de memoria de ?( $ytes para dic+a matriz. ;n tipo Variant 0ue contiene una
matriz re0uiere &( $ytes m1s 0ue la matriz por s" sola.
Con)ertir tipos de datos
Visual Basic proporciona !arias #unciones de con!ersin -ue puede utili0ar para con!ertir
!alores de tipos de datos espec.cos& Por e(emplo* para con!ertir un !alor a Currency,
utilice la #uncin Ccur?
"ago"orSemana = Ccur '/oras K "ago"orHora(
'a siguiente tabla muestra las #unciones de con!ersin:
%unciones de
Conversi$n Convierten una epresi$n en
2bool Boolean
2b)te B)te
2cur 2urrenc)
2date Date
2Dbl Double
2int Integer
2'ng 'ong
2+ng +ingle
2+tr +tring
2!ar Variant
2V,rr ,rror
Nota: #os )alores 0ue se pasan a una *uncin de con)ersin de$en ser )1lidos para el tipo
de dato de destino o se producir1 un error. Por e,emplo' si intenta con)ertir un tipo &ong
en un Integer' el tipo de &ong de$e de estar en el inter)alo )1lido del tipo de dato
Integer.
Variables
'as !ariables se utili0an para almacenar !alores temporalmente durante la e(ecucin de
una aplicacin& 'as !ariables tienen un nombre 3la palabra -ue utili0a para re#erirse al !alor
-ue contiene la !ariable4 ) un tipo de dato 3-ue determina la clase de dato -ue la !ariable
puede almacenar4&
!lmacenamiento y recuperacin de datos en )aria$les
1tilice una sentencia de asignacin para reali0ar clculos ) asignar el resultado a una
!ariable:
"an0anaVendidas Z 1I S +e pasa el !alor 1I a la !ariable
"an0anasVendidas Z "an0anasVendidas Q 1
=bser!e -ue el signo igual del e(emplo es un operador de asignacin* no un operador de
igualdad7 el !alor '( se asigna a la !ariable ManBanasVendidas.
Declaracin de Varia$les
Declarar una !ariable es decirle al programa algo de antemano& +e declara una !ariable
mediante la instruccin 5im, proporcionando un nombre a la !ariable* seg/n la siguiente
sinta8is:
5im nombre>!ariable T4s tipoU
'as !ariables -ue se declaran en un procedimiento mediante la sentencia 5im slo e8isten
mientras se e(ecuta el procedimiento& 2uando termina el procedimiento* desaparece el
!alor de la !ariable& Adems* el !alor de una !ariable de un procedimiento es local a dic5o
procedimiento7 es decir* no puede tener acceso a una !ariable de un procedimiento desde
otro procedimiento& ,stas caracter.sticas le permiten utili0ar los mismos nombres de
!ariables en distintos procedimientos sin preocuparse por posibles conDictos o
modicaciones accidentales&
,l nombre de una !ariable debe cumplir con los siguientes re-uisitos:
Debe comen0ar con una letra&
;o puede incluir un punto o un carcter de declaracin de tipo 3[*P*\*]*^*_4&
;o debe e8ceder de AFF caracteres&
Debe ser /nica en el mismo alcance* -ue es el inter!alo desde el -ue se puede
5acer re#erencia a la !ariable: un procedimiento* #ormulario* etc&
'a clusula opcional 4s tipo de la sentencia 5im le permite denir el tipo de dato o de
ob(eto de la !ariable -ue !a a declarar& 'os tipos de datos denen el tipo de in#ormacin
-ue almacena la !ariable& Algunos e(emplos de tipos de datos son !tring, /nteger )
Currency. 'as !ariables tambin pueden contener ob(etos de Visual Basic u otras
aplicaciones& Algunos e(emplos de tipos de ob(eto de Visual Basic* o clases* son =b(ect*
:orm1 ) 9e8tBo8&
@a) otras #ormas de declarar !ariables:
Declarar una !ariable en la seccin Declaraciones de un mdulo de #ormulario*
estndar o de clase* en !e0 de un procedimiento* 5ace -ue la !ariable est disponible
para todos los procedimientos del mdulo&
Declarar una !ariable mediante la palabra cla!e .ublic 5ace -ue est accesible
para toda la aplicacin&
Declarar una !ariable local mediante la palabra cla!e !tatic conser!a su !alor
aun-ue termine el procedimiento&
Declaracin Impl"cita
;o tiene por -u declarar una !ariable antes de utili0arla& Por e(emplo* podr.a escribir una
#uncin donde no 5iciera #alta declarar *empVal antes de utili0arla:
Function ;aLF 'num(
TempIal = 2bs 'num(
;aLF = Sr'TempIal(
End Function
Visual Basic crea automticamente una !ariable con ese nombre* -ue puede utili0ar como
si la 5ubiera declarado e8pl.citamente& Aun-ue es cmodo* puede pro!ocar errores sutiles
en el cdigo si se e-ui!oca de nombre de !ariable& Por e(emplo* suponga -ue 5a escrito
esta #uncin:
Function ;aLF 'num(
TempIal = 2bs 'num(
;aLF = Sr 'TemIal(
End Function
A primera !ista* parece igual& Pero como se 5a escrito errneamente la !ariable *empVal
en la tercera l.nea* la #uncin de!ol!er siempre cero& 2uando Visual Basic encuentra un
nombre nue!o* no puede a!eriguar si realmente desea declarar una !ariable nue!a o
simplemente 5a escrito de #orma errnea una !ariable e8istente* por lo -ue crea una
!ariable nue!a con ese nombre&
Declaracin Expl"cita
Para e!itar problemas al e-ui!ocarse de nombre en las !ariables* puede congurar Visual
Basic para -ue le a!ise siempre -ue encuentre un nombre -ue no se 5a)a declarado
e8pl.citamente como una !ariable&
Para declarar !ariables de #orma e8pl.cita:
Inclu)a esta sentencia en la seccin Declaraciones Benerales del mdulo de clase*
de #ormulario o estndar:
#ption Explicit
> o bien >
,n el men/ Herramientas, eli(a 7pciones* 5aga clic en la c5a (ditor ) acti!e la
opcin 5eclaraci$n de variables re2uerida. ,sto inserta automticamente la
sentencia 7ption (plicit en los mdulos nue!os* pero no en los )a creados* por lo
-ue tendr -ue agregar manualmente 7ption (plicit a los mdulos e8istentes en el
pro)ecto&
+i 5ubiera tenido e#ecto dic5a instruccin en el mdulo de #ormulario o mdulo estndar
-ue contiene la #uncin Aa+B, Visual Basic 5abr.a reconocido 9empVal ) 9emVal como
!ariables no declaradas ) 5abr.a generado errores para ambas& Deber.a* por tanto* declara
e8pl.citamente 9empVal:
Function ;aLF 'num(
Dim TempIal
TempIal = 2bs 'num(
;aLF = Sr 'TemIal(
End Fuction
!lcance de las Varia$les
,l alcance de una !ariable dene en -u partes del cdigo son reconocidas& 2uando
declara una !ariable en un procedimiento* slo el cdigo de dic5o procedimiento puede
tener acceso o modicar el !alor de la !ariable7 tiene un alcance local al procedimiento& A
!eces* sin embargo* se necesita utili0ar una !ariable con un alcance ms general* como
a-uella cu)o !alor est disponible para todos los procedimientos del mismo mdulo o
incluso para todos los procedimientos de toda la aplicacin& Visual Basic le permite
especicar el alcance de una !ariable cuando la declara&
(stablecido el alcance de las variables
Dependiendo de cmo se declara* una !ariable tiene como alcance un procedimiento
3local4 o un mdulo&
4lcance .rivado .:blico
;i!el de procedimiento 'as !ariables son pri!adas ;o es aplicable& ;o
al procedimiento donde se puede declarar !ariables
declaran& p/blicas dentro de un
procedimiento&
;i!el de mdulo 'as !ariables son pri!adas 'as !ariables estn
al mdulo donde se disponibles para todos
declaran& los mdulos&
Varia$les utilizadas en un procedimiento
'as !ariables al ni!el de procedimiento slo se reconocen en el procedimiento en el -ue se
5an declarado& +e las conoce tambin como !ariables locales& +e declaran mediante las
palabras cla!e 5im o !tatic. Por e(emplo:
Dim intTemp 2s *nteger
> o bien >
Static intContador 2s *nteger
'os !alores de !ariables locales declaradas con !tatic e8isten mientras se e(ecuta la
aplicacin* mientras -ue las !ariables declaradas con 5im slo e8isten mientras se e(ecuta
el procedimiento&
Varia$les utilizadas en un mdulo
De #orma predeterminada* una !ariable al ni!el de mdulo est disponible para todos los
procedimientos del mdulo* pero no para el cdigo de otros mdulos& 2ree !ariables al
ni!el de mdulo declarndolas con la palabra cla!e .rivate en la seccin 5eclaraciones
,enerales al principio del mdulo& Por e(emplo:
"rivate intTemp 2s *nteger
Al ni!el de mdulo* no 5a) di#erencia entre .rivate ) 5im, pero es pre#erible usar
.rivate por-ue contrasta con .ublic ) 5ace -ue el cdigo sea ms #cil de comprender&
Varia$les utilizadas por todos los mdulos
Para 5acer -ue una !ariable al ni!el de mdulo est disponible para otros mdulos* utilice
la palabra cla!e .ublic para declararlas& 'os !alores de las !ariables p/blicas estn
disponibles para todos los procedimientos de la aplicacin& Al igual -ue todas las !ariables
al ni!el del mdulo* las !ariables p/blicas se declaran en la seccin 5eclaraciones
,enerales al principio del mdulo& Por e(emplo:
"ublic intTemp 2s *nteger
Nota: @o puede declarar )aria$les p9$licas en un procedimiento' slo en la seccin
Declaraciones )enerales de un mdulo.
2onstantes
A menudo !er -ue el cdigo contiene !alores constantes -ue reaparecen una ) otra !e0& =
puede -ue el cdigo dependa de ciertos n/meros -ue resulten di#.ciles de recordar
3n/meros -ue* por s. mismos* no tienen un signicado ob!io4&
,n estos casos* puede me(orar muc5o la legibilidad del cdigo ) #acilitar su mantenimiento
si utili0a constantes& 1na constante es un nombre signicati!o -ue sustitu)e a un n/mero
o una cadena -ue no !ar.a& Aun-ue una constante recuerda ligeramente a una !ariable* no
puede modicar una constante o asignarle un !alor nue!o como ocurre con una !ariable&
@a) dos or.genes para las constantes:
2onstantes intr*nsecas o de8nidas por el sistema proporcionadas por Visual
Basic&
'as constantes simblicas o de8nidas por el usuario se declaran mediante la
instruccin Const.
Creacin de sus propias constantes
'a sinta8is para declarar una constante es la siguiente:
C.ublicD.rivateE Const nombreRconstante T4s tipoU F e8presin
,l argumento nom$reCconstante es un nombre simblico !lido 3las reglas son las mismas
-ue para crear nombres de !ariable4 ) expresin est compuesta por constantes )
operadores de cadena o numricos7 sin embargo* no puede utili0ar llamadas a #unciones en
expresin& 1na instruccin Const puede representar una cantidad matemtica o de #ec5a )
5ora:
Const con"i = M.CNCOP?QOMORPSP
"ublic Const con)ax"lanetas 2s *nteger = P
Const conFec/aSalida = TCGCGPOT
+e puede utili0ar tambin la instruccin Const para denir constantes de cadena:
"ublic Const conIersion = 1 .S.C..24
Const con!ombreClave = 1Enigma4
Puede colocar ms de una declaracin de constante en una /nica l.nea si las separa con
comas:
"ublic Const con"i=M.CN6 con)ax"lanetas=P6 con"ob)undial=QE8.P
A menudo* la e8presin del lado derec5o del signo igual 3 Z 4 es un n/mero o cadena
literal* pero tambin puede ser una e8presin -ue d como resultado un n/mero o una
cadena 3aun-ue la expresin no puede contener llamadas a #unciones4& Puede incluso
denir constantes en trminos de constantes pre!iamente denidas:
Const con"i? = con"i K ?
1na !e0 -ue dena las constantes* puede colocarlas en el cdigo para 5acerlo ms legible&
Por e(emplo:
Static SistemaSolar 'C To con)ax"lanetas(
*+ num"ersonas U con"op)undial T/en Exit Sub
!lcance de las constantes de2nidas por el usuario
1na instruccin Const tiene igual alcance -ue una declaracin de !ariable ) se le aplican
las mismas reglas:
Para crear una constante -ue slo e8ista en un procedimiento* declrela dentro del
procedimiento&
Para crear una constante disponible para todos los procedimientos de un mdulo*
pero no para el cdigo -ue est #uera del mdulo* declrela en la seccin
5eclaraciones ,enerales del mdulo&
Para crear una constante disponible en toda la aplicacin* declare la constante en la
seccin 5eclaraciones ,enerales de un mdulo estndar ) colo-ue delante de Const
la palabra cla!e .ublic. ;o se pueden declarar las constantes p/blicas en un mdulo
de clase o de #ormulario&
E)itar re*erencias circulares
2omo es posible denir constantes en trminos de otras constantes* deber tener cuidado
para no establecer un ciclo o re#erencia circular entre dos o ms constantes& +e produce un
ciclo cuando se tienen dos o ms constantes p/blicas* cada una de las cuales est denida
en #uncin de la otra& Por e(emplo:
'En el ):dulo CA
"ublic Const con2 = conB K ? ' Disponible en toda la aplicaci:n
'En el ):dulo ?A
"ublic Const conB = con2 G ? ' Disponible en toda la aplicaci:n
+i se produce un ciclo* Visual Basic generar un error cuando intente e(ecutar la aplicacin&
;o puede e(ecutar el cdigo 5asta -ue resuel!a la re#erencia circular& Para e!itar la
creacin de un ciclo* restrin(a todas las constantes p/blicas a un /nico mdulo o* al menos*
al menor n/mero posible de mdulos&
2on!enciones para ;ombres de 2onstantes ) Variables
'as !ariables se deben denir siempre con el menor alcance posible& 'as !ariables globales
3p/blicas4 pueden 5acer lgica de una aplicacin mu) di#.cil de entender& 'as !ariables
globales tambin 5acen ms di#.cil mantener ) !ol!er a usar el cdigo&
,n Visual Basic las !ariables pueden tener el alcance siguiente:
4lcance 5eclaraci$n Visible en
;i!el de procedimiento 5im o !tatic en el ,l procedimiento en el
Procedimiento* -ue est declarada
+ubprocedimiento o
:uncin
4lcance 5eclaraci$n Visible en
;i!el de mdulo .rivate en la seccin 9odos los procedimientos
Declaraciones Benerales del mdulo de #ormulario
de un mdulo de o de cdigo
#ormulario o de cdigo
3&#rm* &bas4
Elobal .ublic en la seccin ,n toda de aplicacin
Declaraciones Benerales
de un mdulo de cdigo
3&bas4
,n una aplicacin de Visual Basic* las !ariables globales se deben usar slo cuando no
e8ista ninguna otra #orma cmoda de compartir datos entre #ormularios& 2uando 5a)a -ue
usar !ariables globales* es con!eniente declararlas todas en un /nico mdulo agrupadas
por #unciones ) dar al mdulo un nombre signicati!o -ue indi-ue su nalidad* como
P/blicas&
1na prctica de codicacin correcta es escribir cdigo modular siempre -ue sea posible&
Por e(emplo* si la aplicacin muestra un cuadro de dilogo* colo-ue todos los controles ) el
cdigo necesario para e(ecutar la tarea del dilogo en un /nico #ormulario& ,sto a)uda a
tener cdigo de la aplicacin organi0ado en componentes /tiles ) minimi0a la sobrecarga
en tiempo de e(ecucin&
A e8cepcin de las !ariables globales 3 -ue no se deber.an pasar4* los procedimientos )
#unciones deben operar slo sobre los ob(etos -ue se les pasan&
Pre2,os de alcance de )aria$les
A medida -ue aumenta el tama6o del pro)ecto* tambin aumenta la utilidad de reconocer
rpidamente el alcance de las !ariables& ,sto se consigue escribiendo un pre(o de alcance
de una letra delante del pre(o de tipo* sin aumentar demasiado la longitud del nombre de
las !ariables&
4lcance .re8jo (jemplo
Elobal g gstr;ombre1suario
;i!el de mdulo m mblnProgresoDel2lculo
'ocal del Procedimiento ;inguno dblVelocidad
1na !ariable tiene alcance glo$al si se declara como .ublic en un mdulo estndar o en un
mdulo de #ormulario& 1na !ariable tiene alcance de ni)el de mdulo si se declara como
.rivate en un mdulo estndar o en un mdulo de #ormulario* respecti!amente&
Nota: #a co+erencia es crucial para usar esta t%cnica de *orma producti)aD el corrector de
sintaxis de Visual Basic no interceptar1 las )aria$les de ni)el de mdulo 0ue comience con
EpF.
Constantes
,l nombre de las constantes se debe escribir en ma)/sculas ) min/sculas* con la letra
inicial de cada palabra en ma)/sculas& Aun-ue las constantes estndar de Visual Basic no
inclu)en in#ormacin de tipo de datos ) el alcance de una constante& Para los nombres de
constantes* se deben seguir las mismas normas -ue para las !ariables& Por e(emplo:
mint)5x,ista-suario H ,Lmite de entradas m5ximas para la
H lista de usuarios
H 'valor entero6 local del m:dulo(
gstr!ueva,Lnea H Car5cter de nueva lLnea
H 'cadena6 global de la aplicaci:n(
Varia$les
Declarar todas las !ariables a5orra tiempo de programacin por-ue reduce el n/mero de
errores debidos a nombres de !ariables errados 3por e(emplo* a;ombre1suario9mp #rente
a s;ombre1suario9mp #rente a s;ombre1suario9emp4& ,n la c5a (ditor del cuadro de
dilogo 7pciones* acti!e la opcin 5eclaraci$n de variables re2uerida. 'a instruccin
7ption (plicit re-uiere -ue declare todas las !ariables del programa de Visual Basic&
'as !ariables deben lle!ar un pre(o para indicar su tipo de datos& =pcionalmente* ) en
especial para programas largos* el pre(o se puede ampliar para indicar el alcance de la
!ariable&
-ipos de datos de )aria$les
1se los siguientes pre(os para indicar el tipo de datos de una !ariable&
*ipo de datos .re8jo (jemplo
Boolean bln bln,ncontrado
B)te b)t b)tDatosImagen
=b(eto 2ollection col col$idgets
2urrenc) cur curIngresos
Date 39ime4 dtm dtmInicio
Double dbl dbl9olerancia
,rror err err;/mDe=rden
Integer int int2antidad
'ong lng lngDistancia
=b(ect ob( ob(Acti!o
+ingle sng sng"edia
+tring str str;ombre:
Denido por el usuario udt udt,mpleado
Variant !nt !nt25ecK+um
@om$res descripti)os de )aria$les y procedimientos
,l cuerpo de un nombre de !ariable o procedimiento se debe escribir en ma)/sculas )
min/sculas ) debe tener la longitud necesaria para describir su #uncionalidad& Adems* los
nombres de #unciones deben empe0ar con un !erbo* como Iniciar;ombre"atri0 o
2errarDilogo&
Para nombres -ue se usen con #recuencia o para trminos largos* se recomienda usar
abre!iaturas estndar para -ue los nombres tengan una longitud ra0onable& ,n general* los
nombres de !ariables con ms de BA caracteres pueden ser di#.ciles de leer en pantalla
VEA&
2uando se usen abre!iaturas* 5a) -ue asegurarse de -ue sean co5erentes en toda la
aplicacin& Alterar aleatoriamente entre 2nt ) 2ontar dentro de un pro)ecto pro!oca una
con#usin innecesaria&
-ipos de2nidos por el usuario
,n un pro)ecto grande con muc5os tipos denidos por el usuario* suele ser /til dar a cada
uno de estos tipos un pre(o de tres caracteres& +i estos pre(os comien0an con LuM* ser
#cil reconocerlos cuando se est traba(ando con tipos denidos por el usuario& Por
e(emplo* LucliM se podr.a usar como pre(o para las !ariables de un tipo 2liente denido por
el usuario&
9ipos Adicionales de Variables
3egistros o Estructuras
+on tipos de datos denidos por el usuario& ,s bsicamente un con(unto de !arios datos de
tipos elementales agrupados ba(o una denominacin com/n& Debe declararse en la seccin
5eclaraciones ,enerales de un mdulo& +e usa la palabra reser!ada *ype.
!intais
-ype @om$reDel@ue)o-ipo
@om$reDelElemento& !s -ipoDato
@om$reDelElemento( !s -ipoDato
@om$reDelElemento? !s -ipoDato
...
...
End -ype
(jemplo
T7pe ;egEmpleado
EmpC:digo 2s *nteger
Emp!ombre 2s String K N.
EmpCargo 2s String K CO
End T7pe
!rreglo de Varia$les
1n arreglo es una coleccin de elementos del mismo tipo con un nombre com/n& 'os
elementos son identicados por el nombre com/n ) un .ndice&
!intais
Dim @om$reDel!rreglo6 Dimensin&' Dimensin(' ... 7 !s -ipoDeDato
Visual Basic soporta 5asta GI dimensiones& Al declarar las dimensiones se puede indicar un
solo n/mero* en cu)o caso se entiende -ue dic5a dimensin !a de cero 5asta el n/mero
indicado& 9ambin es posible indicar e8pl.citamente el inicio ) trmino de la dimensin&
(jemplo
Dim ,istaC '?.( 2s *nteger ' ?C elementos6 del . al ?.
Dim ,ista? 'C to ?.( 2s *nteger ' ?. elementos6 del C al ?.
Dim Tabla 'C to C.6 C to ?.( 2s String ' Tabla de C. x ?.
!rreglos Din1micos
@a) situaciones en las cuales se desea usar un arreglo* pero al momento del dise6o no se
sabe sus dimensiones& Para este tipo de situaciones Visual Basic permite declaraciones de
arreglos del siguiente modo:
Dim x ' ( 2s *nteger
...
...
;edim x 'lst,ista.,istCount(
2uando se redimensiona un arreglo* los !alores almacenados anteriormente se pierden*
por-ue cada elemento es reiniciali0ado con cero o null dependiendo del tipo de dato del
elemento& +i se desea preser!ar los !alores debemos usar la palabra cla!e .reserve en la
sentencia de redimensionamiento&
;edim "reserve x ' int!BmeroDeElementos (
=P,?AD=?,+
!ritm%ticos
` ,8ponenciacin
< "ultiplicacin
N Di!isin
Di!isin entera
"od ?esiduo entero 3,(m: A "od B4
Q +uma
- - ?esta
P 2oncatenacin de cadenas
Comparacin
Z Igual
ab Distinto
"enor -ue
aZ "enor o igual
bZ "a)or o igual
'iKe 2ompara dos cadenas
< 2ero o ms caracteres 3,(m: cad 'iKe Lma<M4
? 2ual-uier carcter
^ 2ual-uier d.gito 3I>X4
TlistaU cual-uier carcter en lista
TclistaU cual-uier carcter -ue no esta en lista
Is 1sado para comparar dos !ariables de re#erencia a ob(etos
#gicos
And LVM lgico
=r L=M lgico
Jor L=M ,8clusi!o
;ot ;egacin
Parte C: ,structuras de 2ontrol
,structuras de 2ontrol
'as estructuras de control le permiten controlar el Du(o de e(ecucin del programa&
9enemos dos tipos de estructuras de control:
,structuras de decisin
,structuras de bucle
Estructuras de Decisin
'os procedimientos de Visual Basic pueden probar condiciones )* dependiendo de los
resultados* reali0ar di#erentes operaciones& ,ntre las estructuras de decisin -ue acepta
Visual Basic se inclu)en las siguientes:
I*...-+en
I*...-+en...Else
5elect Case
/'...*hen
1se la estructura /'...*hen para e(ecutar una o ms instrucciones basadas en una
condicin& Puede utili0ar la sinta8is de una l.nea o un blo-ue de !arias l.neas:
I+ condicin T$en 5entencias
I+ condicin T$en
5entencias
"nd I+
Condicin normalmente es una comparacin* pero puede ser cual-uier e8presin -ue d
como resultado un !alor numrico& Visual Basic interpreta este !alor como *rue o %alse7
un !alor numrico cero es %alse ) se considera *rue cual-uier !alor numrico distinto de
cero& +i condicin es *rue, Visual Basic e(ecuta todas las sentencias -ue siguen a la
palabra cla!e *hen. Puede utili0ar sinta8is de una l.nea o de !arias l.neas para e(ecutar
una sentencia basada en una condicin* los siguientes dos e(emplos son e-ui!alentes:
*+ cualuierFec/a V !oE T/en CualuierFec/a = !oE
*+ cualuierFec/a V !oE T/en
CualuierFec/a = !oE
End *+
=bser!e -ue el #ormato de una /nica l.nea de /'...*hen no utili0a la instruccin (nd /'. +i
se desea e(ecutar ms de una l.nea de cdigo cuando condicin sea *rue, debe utili0ar la
sinta8is de blo-ue de !arias l.neas /'...*hen...(nd /'.
*+ cualuierFec/a V !oE T/en
CualuierFec/a = !oE
TimerC.Enabled = False H Desactiva el control Timer.
End *+
*+ c/&2lumno-!*.Ialue=C T/en
txtCosto = Format 'txtCostoK..S.64Fixed4(
txtC:digo.Enabled = True
End *+
/'...*hen...(lse
1tilice un blo-ue /'...*he...(lse para denir !arios blo-ues de sentencias* uno de los
cuales se e(ecutar:
I+ condicin& T$en
G$lo0ue de sentencias &H
,"lseI+ condicin( T$en
G$lo0ue de sentencias (HH ...
,"lse
G$lo0ue de sentencias nHH
"nd I+
Visual Basic e!al/a primero condici$n6. +i es %alse* Visual Basic procede a e!aluar
condici$nG ) as. sucesi!amente* 5asta -ue encuentre una condicin *rue. 2uando
encuentra una condicin *rue, Visual Basic e(ecuta el blo-ue de instrucciones
correspondientes ) despus e(ecuta el cdigo -ue sigue a (nd /'. =pcionalmente* puede
incluir un blo-ue de instrucciones (lse, -ue Visual Basic e(ecutar sin ninguna de las
condiciones es *rue.
/'...*hen...(lse/' es un caso especial de /'...*hen...(lse. =bser!e -ue puede tener
cual-uier n/mero de clusula (lse/' o ninguna& Puede incluir una clusula (lse sin tener
en cuenta si tiene o no clusula (lse/'.
Por e(emplo* la aplicacin podr.a reali0ar distintas acciones dependiendo del control en -ue
se 5a)a 5ec5o clic de una matri0 de controles de men/:
"rivate Sub mnuCut%Clic& '*ndex 2s *nteger(
*+ *ndex = . T/en H Comando Cortar
Cop72ctiveControl H ,lama a procedimientos generales
Clear2ctiveControl
Else*+ *ndex = C T/en H Comando Copiar
Cop72ctiveControl
Else*+ *ndex = ? T/en H Comando Borrar
Clear2ctiveControl
Else H Comando "egar
"aste2ctiveControl
End *+
End Sub
*+ Clave-suario=4DS*4 T/en
H "ermite al usuario entrar al sistema
...
...
Else
H )ostrar un mensa9e advirtiendo error en la clave
...
...
End *+
"rivate Sub DeterminaCondici:n ' (
*+ Ial 'txt"romedio( U=CM T/en
txtCondici:n = 12probado4
Else*+ Ial 'txt"romedio( U= C. T/en
txtCondici:n = 12sistente4
Else
txtCondici:n = 1Desaprobado4
End *+
End Sub
=bser!e -ue siempre puede agregar ms clusulas (lse/' a la estructura /'...*hen. +in
embargo* esta sinta8is puede resultar tediosa de escribir cuando cada (lse/' compara la
misma e8presin con un !alor distinto& Para estas situaciones* puede utili0ar la estructura
de decisin !elect Case.
!elect Case
Visual Basic proporciona la estructura !elect Case como alternati!a a /'...*hen...(lse
para e(ecutar selecti!amente un blo-ue de sentencias entre !arios blo-ues& 'a sentencia
!elect Case o#rece posibilidades similares a la instruccin /'...*hen...(lse, pero 5ace -ue
el cdigo sea ms legible cuando 5a) !arias opciones&
'a estructura !elect Case #unciona con una /nica e8presin de prueba -ue se e!al/a una
!e0 solamente* al principio de la estructura& Visual Basic compara el resultado de esta
e8presin con los !alores de cada Case de la estructura& +i 5a) una coincidencia* e(ecuta el
blo-ue de sentencias asociado a ese Case?
#elec Case expresinCprue$a
,Case listaCexpresiones&
G$lo0ue de sentencias &HH
,Case listaCexpresiones(
G$lo0ue de sentencias (HH
.
.
.
,Case "lse
G$lo0ue de sentencias nHH
"nd #elect
2ada lista_expresiones es una lista de uno a ms !alores& +i 5a) ms de un !alor en una
lista* se separan los !alores con comas& 2ada blo-.e de sentencias contiene cero o ms
instrucciones& +i ms de un Case coincide con la e8presin de prueba* slo se e(ecutar el
blo-ue de instrucciones asociado con la primera coincidencia& Visual Basic e(ecuta las
instrucciones de la clusula 3opcional4 Case (lse si ning/n !alor de la lista de e8presiones
coincide con la e8presin de prueba&
Por e(emplo* suponga -ue agrega otro comando al men/ (dici$n en el e(emplo
/'...*hen...(lse. Podr.a agregar otra clusula (lse/' o podr.a escribir la #uncin con !elect
Case?
"rivate Sub mnuCut%Clic& '*ndex 2s *nteger(
Select Case *ndex
Case . H Comando Cortar
Cop72ctiveControl H ,lama a procedimientos generales
Clear2ctiveControl
Case C H Comando copiar.
Cop72ctiveControl
Case ? H Comando borrar.
Clear2ctiveControl
Case M H Comando "egar.
"aste2ctiveControl
Case Else
+rmFind.S/oE H )uestra el cuadro de
H di5logo Buscar.
End Select
End Sub
Select Case Tipo-suario
Case 1Supervisor4
H "roporciona al usuario privilegios de Supervisor
...
...
Case 1-suario4
H "roporciona al usuario privilegios de -suario
...
...
Case Else
H "roporciona al usuario privilegio de invitado
...
...
End Select
=bser!e -ue la estructura !elect Case e!al/a una e8presin cada !e0 -ue al principio de
la estructura& Por el contrario* la estructura /'...*hen...(lse puede e!aluar una e8presin
di#erente en cada sentencia (lse/'. +lo puede sustituir una esructura /'...*hen...(lse con
una estructura !elect Case si la intruccin /' ) cada instruccin (lse/' e!al/a la misma
e8presin&
7tros (jemplos
*+ Ientas U C..... T/en
strDscto = Format '..C.6 1Fixed4(
Else*+ Ientas U O.... T/en
strDscto = Format '...O6 1Fixed4(
Else
strDscto = Format '...?6 1Fixed4(
End *+
Select Case Cantidad
Case C
sngDscto = ...
Case ?6 M
sngDscto = ...O
Case N To Q
sngDscto = ..C.
Case Else
sngDscto = ..?.
End Select
int;pta = )sgBox '13uarda cambios antes de salir4 6 vb>es!o(
Select Case int;pta
Case vb>es
3uardarCambios
-nload )e
Case vb!o
-nload )e
End Select
Estrucuras de 3epeticion
'as estructuras de repeticin o bucle le permiten e(ecutar una o ms l.neas de cdigo
repetidamente& 'as estructuras de repeticin -ue acepta Visual Basic son:
Do&&&'oop
:or&&&;e8t
:or ,ac5&&&;e8t
5o...#oop
1tilice el bucle 5o para e(ecutar un blo-ue de sentencias un n/mero indenido de !eces&
@a) algunas !ariantes en la sentencia 5o...#oop, pero cada una e!al/a una condicin
numrica para determinar si contin/a la e(ecucin& 2omo ocurre con /'...*hen, la
condicin debe ser un !alor o una e8presin -ue d como resultado %alse 3cero4 o *rue
3distinto de cero4&
,n el siguiente e(emplo de 5o...#oop, las sentencias se e(ecutan siempre ) cuando
condicin sea *rue?
Do /$ile condicin
5entencias
&oop
2uando Visual Basic e(ecuta este bucle 5o, primero e!al/a condicin. +i condicin es
%alse 3cero4* se salta todas las sentencias. +i es *rue 3distinto de cero4 Visual Basic
e(ecuta las sentencias* !uel!e a la instruccin 5o >hile ) prueba la condicin de nue!o&
Por tanto* el bucle se puede e(ecutar cual-uier n/mero de !eces* siempre ) cuando
condicin sea distinta de cero o *rue. ;unca se e(ecutan las sentencias si condicin es
%alse inicialmente& Por e(emplo* este procedimiento cuenta las !eces -ue se repite una
cadena destino dentro de otra cadena repitiendo el bucle tantas !eces como se encuentre
la cadena de destino:
Function ContarCadenas 'cadenalarga6 destino(
Dim posici:n6 contador
posici:n = C
Do D/ile *nStr 'posici:n6 cadenalarga6 destino(
posici:n = *nStr 'posici:n6 cadenalarga6 destino(8C
contador = contador 8 C
,oop
ContarCadenas = contador
End Function
+i la cadena destino no est en la otra cadena* /n!tr de!uel!e I ) no se e(ecuta el bucle&
=tra !ariante de la instruccin 5o...#oop e(ecuta las sentencias primero ) prueba la
condicin despus de cada e(ecucin& ,sta !ariacin garanti0a al menos una e(ecucin de
sentencias:
Do
5entencias
&oop /$ile condicin
@a) otras dos !ariantes anlogas a las dos anteriores* e8cepto en -ue repiten el bucle
siempre ) cuando condicin sea %alse en !e0 de *rue.
Hace el bucle cero o m@s veces Hace el bucle al menos una veB
Do Until condicin Do
5entencias 5entencias
&oop &oop Until condicin
%or...&et
'os bucles 5o #uncionan bien cuando no se sabe cuntas !eces se necesitar e(ecutar las
sentencias del bucle& +in embargo* cuando se sabe -ue se !a a e(ecutar las sentencias
un n/mero determinado de !eces* es me(or elegir el bucle %or...&et. A di#erencia del
bucle 5o, el bucle %or utili0a una !ariable llamada contador -ue incrementa o reduce su
!alor en cada repeticin del bucle& 'a sinta8is es la siguiente:
For contador I iniciar To 2nalizar G#tep incrementoH
5entencias
Next GcontadorH
'os argumentos contador, iniciar, 8naliBar e incremento son todos numricos&
Nota: El argumento incremento puede ser positi)o o negati)o. 5i incremento es
positi)o' iniciar de$e ser menor o igual 0ue 0nali1ar o no se e,ecutar1n las sentencias del
$ucle. 5i incremento es negati)o' iniciar de$e ser mayor o igual 0ue 0nali1ar para 0ue
se e,ecute el cuerpo del $ucle. 5i no se esta$lece #tep, el )alor predeterminado de
incremento es &. Al e(ecutar el bucle %or, Visual Basic:
1& 1& ,stablece contador al mismo !alor -ue iniciar.
A& A& 2omprueba si contador es ma)or -ue 0nali1ar. +i lo es* Visual Basic sale del
bucle& 3+i incremento es negati!o* Visual Basic comprueba si contador es menor -ue
0nali1ar.4
B& B& ,(ecuta las sentencias.
C& C& Incrementa contador en 1 o en incremento, si se especic&
F& F& ?epite los pasos A a C&
,ste cdigo imprime los nombres de todas las #uentes de pantalla disponibles:
"rivate Sub Form@Clic& ' (
Dim * 2s *nteger
For i = . To Screen.FontCount
"rint Screen.Fonts 'i(
!ext
End Sub
%or (ach...&et
,l bucle %or (ach...&et es similar al bucle %or...&et, pero repite un grupo de sentencia
por cada elemento de una coleccin de ob(etos o de una matri0 en !e0 de repetir las
sentencias un n/mero especicado de !eces& ,sto resulta especialmente /til si no se sabe
cuntos elementos 5a) en la coleccin& @e a-u. la sinta8is del bucle %or (ach...&et?
For "ac$ elemento In grupo
5entencias
Next elemento
Por e(emplo* el siguiente procedimiento !ub abre la base de datos Biblio&mdb ) agrega el
nombre de cada tabla a un cuadro de lista&
Sub ,istTableDe+s ' (
Dim ob9Db 2s Database
Set ob9Db = #penDatabase'"cAG2rc/ivos de programaGDevstudioG" W %
"vbGbiblio.mdb"6 True6 False(
For Eac/ TableDe+ *n ob9Db.TableDe+s ' (
,istC.2dd*tem TableDe+.!ame
!ext TableDe+
End Sub
9enga en cuenta las restricciones siguientes cuando utilice %or (ach...&et?
Para las colecciones* elemento slo puede ser una !ariable Variant, una !ariable
7bject genrica o un ob(eto mostrado en el ,8aminador de ob(etos&
Para las matrices* elemento slo puede ser una !ariable Variant.
;o puede utili0ar %or (ach...&et con una matri0 de tipos denidos por el usuario
por-ue un Variant no puede contener un tipo denido por el usuario&
,l siguiente e(emplo 5abilita todos los C.adro de Texto del #ormulario?
"rivate Sub )odoEdici:n ' (
Dim control
For Eac/ control *n +ormC.Controls
*+ T7pe#+ control *s TextBox T/en
Control.Enabled = True
End *+
!ext control
End Sub
5alida de una Estructura de Control
'a instruccin (it le permite salir directamente de un bucle %or o de un bucle 5o. 'a
sinta8is de la sentencia (it es sencilla: (it %or puede aparecer tantas !eces como sea
necesario dentro de un bucle %or ) (it 5o puede aparecer tantas !eces como sea
necesario dentro de un bucle 5o?
For contador I iniciar To 2nalizar G#tep incrementoH
G$lo0ue sentenciasH
G"xit ForH
G$lo0ue sentenciasH
Next GcontadorH
Do GJ/$ile K UntilL condicinH
G$lo0ue de sentenciasH
G"xit DoH
G$lo0ue de sentenciasH
&oop
Do
G$lo0ue de sentenciasH
G"xit DoH
G$lo0ue de sentenciasH
&oop GJ/$ile K UntilL condicinH
(it %or ) (it 5o son mu) /tiles )a -ue* algunas !eces* resulta apropiado salir
inmediatamente de un bucle sin reali0ar ms iteraciones o sentencias dentro del bucle&
2uando utilice la instruccin (it para salir de un bucle* el !alor de la !ariable contador
diere* dependiendo de cmo 5a)a salido del bucle:
2uando termina un bucle* la !ariable contador contiene el !alor del l.mite superior
ms el paso&
2uando sale de un bucle prematuramente* la !ariable contador conser!a su !alor
seg/n las reglas usuales del alcance&
2uando sale antes del nal de una coleccin* la !ariable contador contiene
&othing si se trata de un tipo de dato 7bject ) (mpty si es un tipo de dato Variant.
Parte F: 2ontroles ,stndar Adicionales
) Procedimientos
2ontrol "arco 3:rame4
,ste control permite agrupar otros controles para darle ma)or #uncionalidad a la inter#a0&
'os controles Botones de 7pci$n necesariamente tienen -ue estar agrupados por el
control Marco. Para agrupar controles* dibu(e primero el control "arco )* a continuacin*
dibu(e los controles dentro de "arco&
Propiedades
2aption 9.tulo de marco&
,nabled Determina si est 5abilitado para responder a las acciones del
usuario&
;ame ;ombre del control&
Visible Determina si el Marco ) los controles -ue contiene estn !isibles o no&
2ontrol 2asilla de Vericacin 325ecKBo84
'as casillas de !ericacin se utili0an para proporcionar al usuario opciones de tipo +iN;o o
VerdaderoN:also& 2uando el usuario selecciona una opcin 3acti!a la casilla4* aparece una
marca de !ericacin 3a 4 dentro de la casilla&
Propiedades
2aption Descripcin -ue acompa6a a la casilla&
,nabled 9rueN:alse& Determina si est 5abilitado para responder a las acciones
del usuario&
;ame ;ombre del control&
Value I Y 1nc5ecKed 3Vac.o* no marcado4
1 Y 25ecKed 3"arcado4
A Y Era)ed 3Eris* Indenido4
Visible Determina si la casilla est !isible o no&
E)entos
2licK =curre cuando el usuario 5ace clic sobre la casilla&
2ontrol Botn de =pcin 3=ptionButton4
,stos controles se utili0an para -ue el usuario seleccione una opcin de un grupo opciones&
'a opcin seleccionada tiene un punto en el centro&
Propiedades
2aption Descripcin -ue acompa6a a la opcin&
,nabled 9rueN:alse& Determina si est 5abilitado para responder a las acciones
del usuario&
;ame ;ombre del control&
Value 9rueN:alse* marcado o no marcado&
Visible 9rueN:alse& Determina si el botn est !isible o no&
E)entos
2licK =curre cuando el usuario 5ace clic sobre el botn&
Arreglo de 2ontroles
2uando creamos un arreglo de controles* todos los controles -ue #orman el arreglo deben
tener el mismo nombre 3Propiedad ;ame4* la propiedad /nde establece el .ndice de cada
control en el arreglo* esta propiedad comien0a desde I&
1n arreglo de controles es un grupo de controles -ue comparten el mismo:
9ipo de ob(eto
;ombre del control
Procedimientos de e!ento
Cdigo m1s *1cil de escri$ir y mantener
'os arreglos de controles 5ace -ue el cdigo sea ms #cil de escribir ) mantener debido a
-ue solo escribe un solo procedimiento de e!ento para todos los controles pertenecientes
al arreglo* el parmetro /nde del procedimiento de e!ento determina desde -ue control
ocurri el e!ento&
Cdigo m1s e2ciente
'os arreglos de controles 5acen -ue el cdigo sea ms eciente ) me(oran el rendimiento
de la aplicacin debido a -ue usa menos recursos del sistema -ue los controles
indi!iduales&
MCmo se crea un arreglo de controlesN
'uego de crear ) establecer el nombre del primer control* tiene dos alternati!as:
Mtodo 6
1& 1& 2opiar el primer control al portapapeles&
A& A& 'uego pegar el control de portapapeles en el #ormulario& Visual Basic le
preguntar si desea crear un arreglo de controles&
B& B& ?epita el paso A 5asta completar el arreglo&
Mtodo G
1& 1& Dibu(e el siguiente control ) estable0ca su nombre igual al del primer
control& Visual Basic le preguntar si desea crear un arreglo de controles&
A& A& ?epita el paso 1 5asta completar el arreglo&
(jemplo
'a inter#a0 mostrada tiene un arreglo de controles para seleccionar el reporte* el
procedimiento de e!ento es el mismo para cual-uier elemento del arreglo&
,l cdigo para el e!ento clic es:
"rivate Sub opt;eporte%Clic&'*ndex 2s *nteger(
Select Case *ndex
Case .6 C
+ra;ango.Enabled = False
lblDesde.Enabled = False
lblHasta.Enabled = False
txtDesde.Enabled = False
txtHasta.Enabled = False
Case ?
+ra;ango.Enabled = True
lblDesde.Enabled = True
lblHasta.Enabled = True
txtDesde.Enabled = True
txtHasta.Enabled = True
txtDesde.SetFocus
End Select
End Sub
2ontrol Barra de Despla0amiento
=pt?eporte314
=pt?eporte3I4
=pt?eporte3A4
Barra de Despla0amiento @ori0ontal 3@+crollBar4
Barra de Despla0amiento Vertical 3V+crollBar4
+on usuados con #recuencia para permitir rpidos despla0amientos a tra!s de una lista
grande de items& Por e(emplo: arc5i!os* indicadores de posicin actual de una escala de
!alores* indicadores de !olumen en un sistema de audio&
Propiedades
'arge25ange De 1 a BAHGH& 2antidad de cambio cuando el usuario 5ace clic en el
despla0amiento largo&
"a8 "8imo !alor de despla0amiento cuando el botn se encuentra en la posicin
ms alta& Valor predeterminado: BAHGH&
"in ".nimo !alor del despla0amiento cuando el botn se encuentra en la posicin
ms ba(a& Valor predeterminado: I&
;ame ;ombre ddel control&
+mall25ange De 1 a BAHGH& 2antidad de cambio cuando el usuario 5ace clic en la Dec5a de
despla0amiento&
Value Valor actual en la escala de !alores&
E)ento
25ange =curre cuando el usuario se despla0a o se cambia el !alor de la propiedad
Value&
2ontrol 2uadro de 'ista 3'istBo84
1n control &ist2ox muestra una lista de elementos entre los cuales el usuario puede
seleccionar uno o ms elementos& +i el n/mero de elementos supera el n/mero -ue puede
mostrarse* se agregar automticamente una barra de despla0amiento al control &ist2ox.
'a propiedad &ist es un arreglo -ue contiene los elementos de la lista* ) comien0a con
.ndice I& 'a propiedad &istCo.nt establece el n/mero total de elementos de la lista& 'a
propiedad &istIndex contiene el .ndice del elemento seleccionado* el cual es un n/mero
entre I 3primer elemento4 ) el n/mero total de elementos en la lista Y1 3&istCo.nt 3 '4& +i
no se selecciona ning/n elemento* el !alor de la propiedad &istIndex ser Y1&
'a propiedad Ne%Index contiene el .ndice del /ltimo elemento a6adido a la lista& ,sto
puede ser /til si desea 5acer algo con el elemento a6adido* por e(emplo* -ue sea el
elemento actualmente seleccionado&
Propiedades
,nabled 9rueN:alse& Determina si el control responde a las acciones del
usuario&
'ist Arreglo con los elementos de la lista&
'ist2ount ;/mero de elementos de la lista&
'istInde8 ,lemento seleccionado&
"ulti+elect ,stablece si es posible seleccionar !arios elementos o uno solo&
;ame ;ombre del control&
lstEaseosas
t8tEaseosa
cmdAgregar
cmd,liminar
;e%Inde8 Indice del /ltimo elemento a6adido al 2uadro de 'ista&
+elected Arreglo de !alores lgicos paralelo ) del mismo tama6o al arreglo list* indica
-ue elementos 5an sido seleccionados 39rue4 de la lista& +e utili0a en lugar de
#ist/nde cuando establecemos la propiedad Multiselect en 1 A&
+orted 9rueN:alse& ,stablece los elementos se ordenan al#abticamente&
+t)le ,stablece el comportamiento del control&
9e8t De!uel!e el elemento seleccionado en el cuadro de lista7 el !alor de retorno
es siempre e-ui!alente al -ue de!uel!e la e8presin 'ist3'istInde84& ,s de
slo lectura en tiempo de dise6o ) es de slo lectura en tiempo de e(ecucin&
M%todos
AddItem Permite a6adir nue!os elementos a la lista&
?emo!eItem Permite eliminar elementos de la lista&
E)entos
2licK =curre cuando el usuario interact/a con el control&
E,emplos
Muestra en el Cuadro de *eto tt,aseosa el elemento seleccionado
"rivate Sub lst3aseosas%Clic&'(
txt3aseosa.Text = lst3aseosas.Text
End Sub
4-ade un nuevo elemento al Cuadro de #ista lst,aseosas
"rivate Sub cmd2gregar%Clic&'(
Dim str!uevoElemento 2s String
str!uevoElemento = *nputBox'"*ngrese una nueva gaseosaA"6 %
"!ueva gaseosa"(
*+ Trim'str!uevoElemento( VU "" T/en
lst3aseosas.2dd*tem str!uevoElemento
End *+
End Sub
(limina el elemento actual del Cuadro de #ista lst,aseosas
"rivate Sub cmdEliminar%Clic&'(
*+ lst3aseosas.,ist*ndex VU @C T/en
lst3aseosas.;emove*tem lst3aseosas.,ist*ndex
End *+
End Sub
2ontrol 2uadro 2ombinado 32omboBo84
1n control ComboBo combina las caracter.sticas de un control *etBo ) un control
#istBo) los usuarios pueden introducir in#ormacin en la parte del cuadro de te8to o
seleccionar un elemento en la parte de cuadro de lista del control&
Para agregar o eliminar elementos en un control ComboBo, se usa el mtodo 4dd/tem o
Aemove/tem. ,stable0ca las propiedades #ist, #istCount ) #ist/nde para permitir a un
usuario tener acceso a los elementos de un control ComboBo. 2omo alternati!a* puede
agregar elementos a la lista mediante la propiedad #ist en tiempo de dise6o&
Propiedades
,nabled 9rueN:alse& Determina si el control responde a las acciones del usuario&
'ist Arreglo con los elementos de la lista&
'ist2ount ;/mero de elementos de la lista
'istInde8 ,lemento seleccionado&
;ame ;ombre del control&
;e%Inde8 Indice del /ltimo elemento a6adido al cuadro de lista&
+orted 9rueN:alse& ,stablece si los elementos se ordenan al#abticamente&
+t)le ,stablece el comportamiento del control&
9e8t 9e8to -ue contiene el control&
M%todos
AddItem Permite a6adir nue!os elementos a la lista&
?emo!eItem Permite eliminar elementos de la lista&
E)entos
2licK =curre cuando el usuario interact/a con la lista del control&
25ange =curre cuando el !alor de la propiedad *et es modicado&
Propiedad 5tyle
,sta propiedad establece el comportamiento del control ComboBo, ) puede tomar los
siguientes !alores:
Constante Valor 5escripci$n
!b2omboDropDo%n I 3Predeterminado4 2uadro combinado desplegable& Inclu)e una
lista desplegable ) un cuadro de te8to&,l 1suario puede
seleccionar datos en la lista o escribir en cuadro de te8to&
!b2ombo+imple 1 2uadro combinado simple& Inclu)e un cuadro de te8to ) una
lista* -ue no se despliega& ,l usuario puede seleccionar datos
en la lista o escribir en el cuadro de te8to& ,l tama6o de un
cuadro combinado simple inclu)e las partes de edicin ) de
lista& De #orma predeterminada* el tama6o de un cuadro
combinado simple no muestra ning/n elemento de la lista&
Incremente la propiedad Height para mostrar ms elementos
de la lista&
!b2omboDrop>Do%n'ist A 'ista desplegable& ,ste estilo slo permite la seleccin desde la
lista desplegable&
E,emplo
,n la siguiente inter#a0 se ilustra el uso del control ComboBo ) la propiedad !tyle.
Muestra la gaseosa seleccionada por el usuario en la eti2ueta
lbl,aseosa
"rivate Sub cbo3aseosas%Clic&'(
lbl3aseosa.Caption = cbo3aseosas.Text
End Sub
cboEaseosas
+t)leZI
cbo,ncuestad
os
+t)leZ1
cbo2iudades
+t)leZA
lblEaseosa
lbl,ncuestado
lbl2iudad
4ctualiBa la eti2ueta lbl,aseosa cuando el usuario modi8ca el control
cbo,aseosas
"rivate Sub cbo3aseosas%C/ange'(
lbl3aseosa.Caption = cbo3aseosas.Text
End Sub
Muestra el encuestado seleccionado por el usuario en la eti2ueta lbl(ncuestado
"rivate Sub cboEncuestados%Clic&'(
lblEncuestado.Caption = cboEncuestados.Text
End Sub
Muestra en la eti2ueta lblCiudad el elemento seleccionado del control
cboCiudades
"rivate Sub cboCiudades%Clic&'(
lblCiudad.Caption = cboCiudades.Text
End Sub
Procedimientos
,8isten dos tipos de procedimientos con los -ue se traba(a en Visual Basic: los
procedimientos de e!ento ) los procedimientos generales&
Procedimientos de ,!ento
Visual Basic in!oca automticamente procedimientos de e!ento en
respuesta a acciones del teclado* del ratn o del sistema& Por e(emplo* los
botones de comando tienen un procedimiento de e!ento 2licK& ,l cdigo
-ue se escriba en el procedimiento de e!ento 2licK es e(ecutado cuando el
usuario 5aga clic en un botn de comando&
2ada control tiene un con(unto (o de procedimientos de e!ento& 'os
procedimientos de e!ento para cada control son mostrados en un cuadro de
lista despegable en la !entana de cdigo&
Procedimientos Eenerales
'os procedimientos generales son procedimientos !ub o %unction -ue son creados para
-ue lle!en a cabo tareas espec.cas* estos deben ser in!ocados de manera e8pl.cita&
Para crear un procedimiento general* se debe abrir la !entana de cdigo ) 5acer clic en la
orden 4gregar procedimiento del men/ Herramientas& 9ambin se puede crear un
nue!o procedimiento escribiendo el encabe0ado de procedimiento !ub* seguido por el
nombre del procedimiento* en una l.nea en blanco dentro de la !entana de cdigo&
+i se tiene cdigo duplicado en !arios procedimientos de e!ento* se puede colocar el
cdigo en un procedimiento general ) luego in!ocar al procedimiento general desde los
procedimiento de e!ento&
Procedimientos 5u$
'os procedimientos !ub no retornan !alores& Por e(emplo:
"ublic Sub Seleccionar'Cuadro 2s TextBox(
Cuadro.SelStart = .
Cuadro.Sel,engt/ = ,en'Cuadro.Text(
End Sub
'os procedimientos !ub son in!ocados especicando slo el nombre del procedimiento* o
empleando la instruccin Call con el nombre del procedimiento& Por e(emplo:
Call Seleccionar'TextC(
+i se emplea la instruccin Call* se debe encerrar la lista de argumentos entre parntesis&
+i se omite Call* tambin se deben omitir los parntesis alrededor de la lista de
argumentos&
Procedimientos Function
'os procedimientos %unction de!uel!en !alores& ,n el siguiente e(emplo* el procedimiento
%unction recibe un n/mero ) de!uel!e ese n/mero al cuadrado&
"ublic Function Cuadrado'! 2s *nteger( 2s *nteger
Cuadrado = ! K !
End Function
+i se desea guardar el !alor de!uelto* se debe usar parntesis cuando se in!o-ue a la
#uncin* como se muestra a continuacin:
;esultado = Cuadrado 'O(
+i se omiten los parntesis* se puede ignorar el !alor de!uelto ) no guardarlo en una
!ariable& ,sto puede ser /til si se -uiere e(ecutar una #uncin ) no se desea el !alor
de!uelto& Por e(emplo:
Cuadrado O
Alcance del 2digo
Adems de poder declarar cdigo en un mdulo de #ormulario* tambin se puede declarar
procedimientos en un mdulo de cdigo estndar&
'os mdulos de cdigo estndar slo contienen cdigo de Visual Basic* ) son un buen lugar
para almacenar cdigo -ue no es espec.co para un solo #ormulario& 'os procedimientos
pueden ser declarados como .rivate 3pri!ados4 o .ublic 3p/blicos4&
'os procedimientos declarados como .rivate pueden ser llamados o in!ocados slo por
otros procedimientos locali0ados en ese #ormulario* mdulo o clase&
'os procedimientos declarados como .ublic en un #ormulario se con!ierten en mtodos del
#ormulario& ,l procedimiento puede ser llamado desde cual-uier lugar de la aplicacin
especicando los nombres del #ormulario ) del procedimiento&
'os procedimientos declarados como .ublic en un mdulo estn disponibles para toda la
aplicacin* ) pueden ser llamados especicando el nombre del procedimiento&
,l siguiente cdigo declara un procedimiento .ublic&
"ublic Sub )i"roc'(
End Sub
+i se declara el procedimiento en un mdulo de #ormulario* puede ser llamado con el
siguiente cdigo&
FormC.)i"roc
+i se declara el procedimiento en un mdulo estndar* puede ser llamado con el siguiente
cdigo&
)i"roc
+i se declara un procedimiento con el mismo nombre en dos mdulos estndar* se debe
especicar el nombre del mdulo como se muestra en el siguiente cdigo&
)oduleC.)i"roc
1so del ,8aminador de =b(etos para !er Procedimientos )
'ibrer.as de =b(etos
1na !e0 -ue se 5a a6adido cdigo a una aplicacin se puede emplear el (aminador de
objetos para listar a todos los procedimientos -ue 5an sido creados* pasar rpidamente a
un procedimiento espec.co* o pegar una llamada a un procedimiento dentro de una
!entana de cdigo&
,l (aminador de objetos !isuali0a las clases -ue estn disponibles desde cual-uier
librer.a de ob(etos a la -ue se 5a establecido una re#erencia& Para !isuali0ar el (aminador
de objetos presione la tecla de #uncin %G&
Parte G: Depuracin* Validacin de Datos
) "anipulacin de ,rrores
2uando desarrolle aplicaciones en Visual Basic* es importante depurar el cdigo escrito )
manipular los probables errores -ue puedan ocurrir& 9ambin es importante pre!enir en lo
posible estos errores !alidando los ingresos de datos a la aplicacin&
@erramientas de Depuracin
Visual Basic proporciona 5erramientas interacti!as para locali0ar errores en tiempo de
e(ecucin ) errores en la lgica del programa& +e puede acceder a todas las 5erramientas
de depuracin empleando el men/ 5epuraci$n o la barra de 5erramientas 5epuraci$n&
'as 5erramientas de depuracin en Visual Basic inclu)en:
Puntos de interrupcin y expresiones de interrupcin
,stablece un punto de interrupcin para detener un programa en e(ecucin& +e puede
establecer un punto de interrupcin en tiempo de dise6o o en tiempo de e(ecucin
mientras se est en modo de interrupcin&
Expresiones de inspeccin
,mplee las e8presiones de inspeccin para e8aminar una !ariable o e8presin en particular&
,l !alor de cada e8presin de inspeccin es actuali0ado en los puntos de interrupcin
.pciones paso a paso
1se las opciones paso a paso para e(ecutar porciones de cdigo )a sea una instruccin o
procedimiento a la !e0&
Pila de llamadas
,mplee Pila de llamadas para !isuali0ar todas las llamadas a procedimientos acti!as )
rastrear la e(ecucin de una serie de procedimientos anidados&
#a )entana inmediato
,n modo de interrupcin* se puede probar una sentencia e(ecutable escribindola en la
!entana inmediato& Visual Basic e(ecuta la sentencia inmediatamente de modo -ue se
pueda e!aluar el cdigo&
#a )entana locales
,sta !entana automticamente !isuali0a todas las !ariables declaradas en el
procedimiento actual* (unto con sus !alores&
Validacin de Datos
+e puede pre!enir algunos errores en el ingreso de datos ) me(orar el uso de una
aplicacin !alidando in#ormacin mientras es ingresada a los campos de la aplicacin&
3estriccin de .pciones con Controles
1na manera de asegurar ingresos !lidos es restringiendo el n/mero de opciones -ue un
usuario puede escoger& Por e(emplo* se puede emplear un cuadro de lista para permitir a
los usuarios seleccionar un nombre de un producto en un #ormulario& Debido a -ue los
usuarios deben escoger un producto de una lista predenida* no podrn ingresar un
nombre de producto no !lido&
9ambin se pueden usar botones de opcin para un n/mero pe-ue6o de opciones* o
casillas de !ericacin para opciones de tipo booleanas&
;so de la propiedad Max#engt+
'a propiedad Ma#ength determina la longitud m8ima de una cadena en un cuadro de
te8to& ,l sistema emitir un sonido 3beep4 cuando el usuario trate de escribir una cadena
-ue e8ceda la longitud m8ima& +i se desea !isuali0ar un mensa(e de error* se necesita
interceptar la tecla oprimida en el e!ento Oe)Press&
;so de la propiedad #ocOed
'a propiedad #ocked determina si los usuarios pueden modicar los datos en un cuadro de
te8to& +i la propiedad #ocked es establecida a *rue* los usuarios slo pueden !er ) copiar
los datos de un cuadro de te8to&
;so del E)ento PeyPress para Validar Datos
+e pueden emplear los e!entos Oe)Press* Oe)Do%n ) Oe)1p para !alidar datos mientras el
usuario escribe& +e puede pre!enir -ue el usuario ingrese ciertos caracteres 3por e(emplo*
puede limitar el ingreso de datos a !alores numricos4& +e puede tambin modicar los
datos mientras son ingresados 3por e(emplo* puede con!ertir todos los caracteres a
ma)/sculas4&
,l e!ento Oe)Press tiene lugar cuando el usuario ingresa un carcter A+2II estndar& ,sto
no inclu)e la ma)or.a de la teclas especiales* tales como las teclas de #uncin* las teclas
direccionales* o la tecla D,',9,& Para responder a estas teclas se debe emplear los e!entos
Oe)Do%n ) Oe)1p& ,l siguiente cdigo cambia los caracteres a ma)/sculas mientras el
usuario escribe&
"rivate Sub TextC%$e7"ress'$e72scii as *nteger(
$e72scii = 2sc'-case'C/r'$e72scii(((
End Sub
,l siguiente cdigo pre!iene -ue los usuarios ingresen slo !alores numricos en un cuadro
de te8to&
"rivate Sub TextC%$e7"ress'$e72scii 2s *nteger(
*+ $e72scii VU R T/en ' "ermite el uso de la tecla B2C$S"2CE
*+ $e72scii V NR #r $e72scii U OS T/en
$e72scii = . ' Esteblece el caracter a nulo si est5 %
+uera del rango
End *+
End *+
End Sub
Para !isuali0ar una lista de los !alores A+2II* bus-ue 4!C// en la a)uda de Visual Basic&
Validacin de In#ormacin a ;i!el de :ormulario
Adems de emplear tcnicas a ni!el de campo para !alidar los datos mientras son
ingresados* se puede escribir cdigo -ue !alide los datos en todos los campos de un
#ormulario al mismo tiempo& ,n esta parte del curso se !ern las tcnicas de !alidacin a
ni!el de #ormulario soportadas por Visual Basic&
Ha$ilitando el Botn !ceptar
1na #orma de !alidar la in#ormacin del #ormulario ser.a la de asegurar -ue un usuario 5a
ingresado los datos en todos los campos en un #ormulario antes de -ue se le permita
continuar& ,sto puede lle!arse a cabo des5abilitando el botn Aceptar en un #ormulario
5asta -ue el usuario 5a)a llenado todos los campos* como se muestra a continuacin&
Para comprobar cada tecla oprimida en un #ormulario* se debe establecer la propiedad
Hey.revie" de un #ormulario a *rue& ,l #ormulario recibe primero el e!ento del teclado )
luego lo recibe el control&
,l siguiente cdigo 5abilita el botn Aceptar luego de ingresar datos en todos los campos&
"rivate Sub Form%,oad'(
)e.$e7"revieE = True
cmd2ceptar.Enabled = False
End Sub
"rivate Sub Form%$e7-p'$e7Code 2s *nteger6 S/i+t 2s *nteger(
' Se /abilita el bot:n 2ceptar s:lo si todos los cuadros de texto %
tienen datos
Dim Control2ct 2s Control
For Eac/ Control2ct *n Controls
*+ T7pe#+ Control2ct *s TextBox T/en
*+ Control2ct.Text = "" T/en ' El cuadro de texto est5 vacLo
cmd2ceptar.Enabled = False
Exit Sub
End *+
' Se podrLan veri+icar otro tipo de controles si %
+uera necesario
End *+
!ext
cmd2ceptar.Enabled = True 'Todos los cuadros de texto tienen datos
End Sub
Validacin de -odos los Campos de un Formulario
1na manera sencilla de !alidar todos los campos de un #ormulario al mismo tiempo es
poniendo el cdigo de !alidacin en el e!ento 2licK del botn 4ceptar& ,n esta caso* la
aplicacin le permite al usuario completar el ingreso de datos en todos los campos del
#ormulario ) luego !alidarlos& 'a aplicacin establece el en#o-ue en el primer campo -ue
contiene los datos incorrectos&
,l siguiente cdigo !alida todos los campos numricos del #ormulario mostrado
anteriormente&
"rivate Sub cmd2ceptar%Clic&'(
*+ !ot '*s!umeric'txtEdad.Text(( T/en
)sgBox "*ngrese la edad correctamente"
txtEdad.SetFocus
Else*+ !ot '*s!umeric'txtSueldo.Text(( T/en
)sgBox "*ngrese el sueldo correctamente"
txtSueldo.SetFocus
Else
)sgBox "Datos correctos"
-nload )e
End *+
End Sub
;so del E)ento /uery;nload
,l e!ento Quer)1nload tiene lugar (usto antes del e!ento 1nload cuando el #ormulario es
descargado& ,l e!ento Quer)1nload permite determinar como #ue iniciado el e!ento 1nload
) cancelar este e!ento& ,s /til cuando un usuario no 5a completado el ingreso de datos a
un #ormulario* o cuando se -uisiera preguntar al usuario si desea grabar cambios reali0ados
antes cerrar el #ormulario&
,l e!ento Quer)1nload tiene los siguientes argumentos:
,l argumento Cancel cancela el e!ento 1nload& +i Cancel se establece a *rue la
aplicacin permanece como estaba antes de -ue se intentara la descarga&
,l argumento 0nloadMode indica como #ue iniciado el e!ento 1nload&
Valores 2ue se pueden obtener
,l argumento 0nloadMode 6modoCdescarga7 de!uel!e los siguientes
!alores:
Constante Valor 5escripci$n
Vb%ormControlMenu I ,l usuario eligi el comando
Cerrar del men/ Control del #ormulario&
Vb%ormCode 1 +e in!oc la instruccin 0nload desde el
cdigo&
Vb4pp>indo"s A 'a sesin actual del entorno operati!o
"icroso#t $indo%s est nali0ando&
Vb4pp*askManager B ,l Administrador de tareas de
"icroso#t $indo%s est cerrando la
aplicacin&
Vb%ormM5/%orm C 1n #ormulario "DI secundario se est cerrando
por-ue el #ormulario "DI tambin se est
cerrando&
,l siguiente cdigo cancela el e!ento 1nload ) pregunta al usuario antes de cerrar el
#ormulario&
"rivate Sub Form%Juer7-nload'Cancel as *nteger6 -nload)ode as *nteger(
Dim i;espuesta *nteger
i;espuesta = )sgBox '"<;ealmente desea salir="6 vb>es!o(
*+ i;espuesta = vb!o T/en
Cancel=True
End *+
End Sub
Notas8
Cuando se cierra un o$,eto !DIForm' el e)ento /uery;nload
ocurre primero para el *ormulario MDI principal y despu%s en todos los
*ormularios secundarios MDI. 5i ning9n *ormulario cancela el e)ento
/uery;nload' ocurre el e)ento ;nload primero en todos los dem1s
*ormularios y despu%s en un *ormulario MDI principal. Cuando un
*ormulario secundario o un o$,eto Form se cierra' el e)ento
/uery;nload de ese *ormulario ocurre antes 0ue el e)ento ;nload del
*ormulario.
Cuando una aplicacin se cierra' puede utilizar los procedimientos
de e)ento /uery;nload o ;nload para esta$lecer la propiedad Cancel
a Tr.e' deteniendo el proceso de cierre. 5in em$argo' el e)ento
/uery;nload ocurre en todos los *ormularios antes de 0ue se
descargue ninguno de ellos y el e)ento ;nload ocurre con*orme se
descarga cada *ormulario.
"anipulacin de ,rrores en 9iempo de ,(ecucin
;o importa lo bien -ue se dise6e una aplicacin* los errores en tiempo de e(ecucin
siempre ocurrirn& 'os usuarios ol!idan poner los discos en las unidades* sistemas se
e(ecutan con poca memoria* ) arc5i!os no se encuentran donde se supone deber.an estar&
A6adiendo cdigo de manipulacin de errores e#ecti!o a una aplicacin* se crean
aplicaciones ms robustas&
Entendiendo el Proceso de Manipulacin de Errores
,l proceso de manipulacin de errores in!olucra los siguientes pasos&
1& 1& @abilitar la interceptacin de errores -ue especica 5acia donde se bi#urcar la
e(ecucin cuando ocurra un error&
A& A& ,scribir el cdigo de manipulacin de errores&
B& B& +alir del cdigo de manipulacin de errores&
'a instruccin 7n (rror ,o*o 5abilita la interceptacin de errores ) especica 5acia donde
saltar la e(ecucin cuando ocurra un error& +i ocurriera un error en tiempo de e(ecucin* la
e(ecucin saltar 5acia la eti-ueta especicada por la instruccin 7n (rror ,o*o& ,l
manipulador de errores e(ecuta el cdigo de manipulacin de errores seguido por una
instruccin Aesume -ue indica donde deber continuar el proceso&
,l siguiente cdigo muestra como emplear las instrucciones 7n (rror ,o*o ) Aesume&
"rivate Sub CommandC%Clic&'(
Dim !ombre2plic 2s String
#n Error 3oTo )anipulaErr
!ombre2plic = *nputBox'"*ngrese el nombre de la aplicaci:nA"(
S/ell !ombre2plic6 vb!ormalFocus
Exit Sub
)anipulaErrA
*+ Err.!umber = OM T/en
)sgBox "!o se encontro la aplicaci:n"
*+ )sgBox'"<Desea intentarlo nuevamente="6 vb>es!o( %
= vb>es T/en
!ombre2plic = *nputBox %
'"*ngrese el nombre de la aplicaci:nA"(
;esume '*ntentar nuevamente
Else
;esume !ext 'E9ecutar la siguiente instrucci:n
End *+
Else
)sgBox "Error desconocido"
End *+
End Sub
,n el cdigo o rutina de manipulacin de errores* se emplean las propiedades ) mtodos
del ob(eto (rr para !ericar -ue error ocurri* borrar un !alor de error o desencadenar un
error&
#as Propiedades del .$,eto Err
'a propiedad &umber es un entero -ue indica el /ltimo error -ue tu!o lugar& Para
determinar -ue error 5a ocurrido* se !erica el !alor de (rr.&umber& ,n algunos casos* se
puede corregir un error ) permitir continuar el proceso sin interrumpir el usuario& ,n otros*
se deber noticar al usuario de un error* ) tomar alguna accin basada en la respuesta del
usuario&
'a propiedad 5escription es una cadena -ue contiene una descripcin del error&
'a propiedad !ource contiene el nombre del ob(eto aplicacin -ue gener el error& ,s /til
cuando se emplea Automati0acin& Por e(emplo* si se traba(a con "icroso#t ,8cel ) genera
un error* "icroso#t ,8cel establecer (rr.&umber al cdigo de error apropiado )
establecer (rr.!ource a (cel.4pplication&
#os M%todos del .$,eto Err
,l mtodo Clear establece el !alor de (rr.&umber a cero& Bsicamente* el mtodo Clear
se emplea borrar e8pl.citamente el ob(eto (rr despus de controlar un error&
,l mtodo Aaise genera un error en tiempo de e(ecucin& Por e(emplo* se podr.a emplear
este mtodo para probar el cdigo de manipulacin de errores&
Err.;aise OM '2rc/ivo no encontrado
.pciones de las Instruccin 3esume
'a instruccin Aesume se emplea para especicar donde continuar el proceso de una
aplicacin luego de manipular un error& 'a siguiente tabla lista los tres tipos de
instrucciones Aesume disponibles en Visual Basic&
/nstrucci$n 5escripci$n
Aesume ?egresa a la instruccin -ue gener el error& ,mplee Aesume para
repetir una operacin luego de corregir el error&
/nstrucci$n 5escripci$n
Aesume &et ?egresa a la instruccin inmediatamente siguiente a la -ue gener el
error&
Aesume l"nea 'a e(ecucin contin/a en la l.nea especicada en el argumento
obligatorio l.nea&
Nota8
5i utiliza una instruccin 4es.me en otro sitio 0ue no sea una rutina de
manipulacin de errores' ocurre un error.
Des5abilitando la "anipulacin de ,rrores
Puede ser di#.cil depurar cdigo -ue tiene 5abilitada la manipulacin de errores& Visual
Basic puede e(ecutar el cdigo de manipulacin de errores cuando se -uiera ingresar al
modo de Interrupcin ) depurar la aplicacin&
Visual Basic proporciona opciones para des5abilitar la manipulacin de errores en el
momento de la depuracin&
Para cambiar como sern manipulados los errores:
1& 1& ,n el men/ Herramientas* 5aga clic en 7pciones&
A& A& ,n la c5a ,eneral* deba(o de /nterceptaci$n de errores* 5aga clic en la opcin
deseada ) luego en 4ceptar&
'a siguiente tabla describe las opciones de manipulacin de errores disponibles deba(o de
/nterceptaci$n de errores en la c5a ,eneral&
7pci$n 5escripci$n
Modo de interrupci$n en todos +i se selecciona esta opcin* Visual Basic ignora
cual-uiera de las instrucciones 7n (rror ,o*o e
ingresa en modo de Interrupcin si tiene lugar alg/n
error en tiempo de e(ecucin&
/nterrupci$n en m$dulos de clase +i se selecciona esta opcin* Visual Basic e(ecutar
las instrucciones 7n (rror ,o*o para manipular
errores en tiempo de e(ecucin&
/nterrupci$n en errores no controlados Visual Basic ingresa a modo de
Interrupcin en cual-uier error para el cual no se
5a)a establecido una rutina de manipulacin&
2ompilacin de una Aplicacin
1na !e0 nali0ada la creacin de una aplicacin* se puede crear el arc5i!o e(ecutable para
los usuarios& ,sta parte del curso describe como compilar un pro)ecto&
Creacin de un !rc+i)o E,ecuta$le
2rear un arc5i!o e(ecutable en Visual Basic es un proceso sencillo&
1& 1& ,n el men/ 4rchivo* 5aga clic en ,enerar I&ombre.royectoJ.ee
A& A& Ingrese el nombre para el arc5i!o e(ecutable&
B& B& Para a6adir in#ormacin espec.ca de !ersin:
,n el cuadro de dilogo ,enerar proyecto* 5aga clic en el botn 7pciones& ,n la c5a
,enerar escriba los n/meros de !ersin ) el te8to de in#ormacin de la !ersin * )
luego 5aga clic en 4ceptar&
Adems del arc5i!o e(ecutable* se debe de proporcionar di!ersas D''ds ) otros arc5i!os
a los usuarios& +e deber.a crear un programa de instalacin -ue instale la aplicacin en
la computadora del usuario&
(l 4sistente para instalar aplicaciones de Visual Basic 5ace sencilla la tarea de
crear discos o una carpeta de distribucin para una aplicacin& 'os usuarios pueden
luego e(ecutar el programa de instalacin en sus computadoras para instalar ) registrar
los arc5i!os apropiados&
Parte H: 2ontroles ,stndar A!an0ados
) Acceso a Datos
2ontrol 2uadro de 'ista de 1nidades 3Dri!e'istBo84
1n control Dri!e'istBo8 permite al usuario seleccionar una unidad de disco !lida en
tiempo de e(ecucin& 1tilice este control para mostrar una lista de todas las unidades
!lidas del sistema de un usuario& Puede crear cuadros de dilogo -ue permitan al
usuario abrir un arc5i!o de una lista de un disco en cual-uier unidad disponible&
Propiedades
Dri!e De!uel!e o establece la unidad seleccionada en tiempo de e(ecucin& ;o
est disponible en tiempo de dise6o&
'ist 2ontiene la lista de cone8iones de unidad e#ecti!as&
'ist2ount De!uel!e el n/mero de cone8iones con unidades de disco&
'istInde8 De!uel!e o establece el .ndice del elemento seleccionado actualmente en el
control& ;o est disponible en tiempo de dise6o&
E)entos
25ange =curre cuando el usuario selecciona una nue!a unidad o cuando se cambia
la conguracin de la propiedad Dri!e mediante cdigo&
2ontrol 2uadro de 'ista de Directorios 3Dir'istBo84
1n control Dir'istBo8 muestra directorios ) rutas de acceso en tiempo de e(ecucin&
1tilice este control para mostrar una lista (err-uica de directorios& Puede crear
cuadros de dilogo -ue* por e(emplo* permitan a un usuario abrir un arc5i!o desde una
lista de arc5i!os de todos los directorios disponibles&
Propiedades
'ist 2ontiene una lista de todos los directorios&
'ist2ount De!uel!e el n/mero de subdirectorios del directorio actual&
'istInde8 Indica el .ndice de la ruta de acceso actual&
Pat5 ,l !alor de la propiedad Pat5 es una cadena -ue indica una ruta de acceso*
como 2:e=b o 2:e$indo%se+)stem&
E)entos
25ange =curre cuando el usuario 5ace doble clic en un nue!o directorio o cuando se
cambia la conguracin de la propiedad Pat5 mediante cdigo&
2ontrol 2uadro de 'ista de Arc5i!os 3:ile'istBo84
,l control :ile'istBo8 encuentra ) muestra los arc5i!os del directorio especicado por la
propiedad Pat5 en tiempo de e(ecucin& 1tilice este control para mostrar una lista de
los arc5i!os seleccionados por tipo& Puede crear cuadros de dilogo en la aplicacin
-ue* por e(emplo* permitan al usuario seleccionar un arc5i!o o un grupo de arc5i!os&
Propiedades
:ile;ame De!uel!e o establece el nombre de un arc5i!o seleccionado&
'ist 2ontiene una lista con los arc5i!os del directorio e8pandido actualmente -ue
coinciden con la propiedad Pattern& ;o se inclu)e la ruta de acceso&
'ist2ount De!uel!e el n/mero de arc5i!os del directorio actual -ue coinciden con el
!alor de la propiedad Pattern&
'istInde8 De!uel!e o establece el .ndice del elemento seleccionado actualmente&
Pat5 ,l !alor de la propiedad Pat5 es una cadena -ue indica una ruta de acceso*
como 2:e=b o 2:e$indo%se+)stem&
Pattern De!uel!e o establece un !alor -ue indica los nombres de arc5i!o mostrados
en un control :ile'istBo8 en tiempo de e(ecucin&
E)entos
2licK =curre cuando el usuario presiona ) suelta un botn del ratn en un control
:ile'istBo8&
2ontrol Imagen 3Image4
,l control Image se utili0a para mostrar un grco& 1n control Image puede mostrar un
grco desde un mapa de bits* un icono o un metarc5i!o* as. como un metarc5i!o
me(orado* un arc5i!o fP,E o arc5i!os EI:&
Propiedades
Picture De!uel!e o establece un grco -ue se mostrar en el control& 9ambin se le
puede asignar un grco de!uelto por la #uncin 'oadPicture&
+tretc5 9rueN:alse& De!uel!e o establece un !alor -ue indica si un grco cambia su
tama6o para a(ustarse al de un control Image&
Comentarios
El control Image utiliza menos recursos del sistema y actualiza con m1s rapidez 0ue
un control Pict.re2ox' pero slo admite un su$con,unto de las propiedades' los
e)entos y los m%todos de Pict.re2ox. ;se la propiedad 5tretc+ para determinar si el
gr12co se escala para a,ustarse al control o )ice)ersa. !un0ue puede colocar un
control Image dentro de un contenedor' un control Image no puede actuar como
contenedor.
:uncin 'oadPicture34
2arga un grco en un ob(eto Picture* un control PictureBo8 o un control Image&
%ormato?
'oadPicture3@om$reDe!rc+i)oBr12co4
9ambin se puede usar la #uncin #oad.icture3) para asignar un icono a un #ormulario
o al puntero del ratn mostrado en pantalla&
(jemplos de la 'unci$n #oad.icture3)?
'Establece el icono del +ormulario
Set FormC.*con = ,oad"icture'")**C#!#.*C#"(
'Establece el puntero del rat:n
Screen.)ouse*con = ,oad"icture'")**C#!#.*C#"(
Screen.)ouse"ointer = PP
Creaci$n de un visor de im@genes
(l c$digo para los controles es el siguiente?
"rivate Sub drv-nidad%C/ange'(
dirDirectorio."at/ = drv-nidad.Drive
End Sub
"rivate Sub dirDirectorio%C/ange'(
+il,ista."at/ = dirDirectorio."at/
End Sub
"rivate Sub +il,ista%Clic&'(
*mageC."icture = ,oad"icture'dirDirectorio."at/ W %
"X" W +il,ista.+ilename(
FrameC.Caption = +il,ista.+ilename
FormC.*con = ,oad"icture'dirDirectorio."at/ W %
"X" W +il,ista.+ilename(
End Sub
dr!1nidad
dirDirectorio
l'ista
:rame1
Image1
2ontrol 9empori0ador 39imer4
1n control *imer puede e(ecutar cdigo a inter!alos peridicos produciendo un e!ento
9imer& ,l control *imer* in!isible para el usuario* resulta /til para el procesamiento de
#ondo& ;o e8iste ning/n l.mite prctico en cuanto al n/mero de controles *imer acti!os
-ue se puede tener en Visual Basic F&I e(ecutndose en $indo%s XF o en $indo%s ;9&
Propiedades
,nabled 9rueN:alse& Acti!a o desacti!a el control& +i se desacti!a el control *imer,
estableciendo ,nabled a :alse* se cancelar la cuenta atrs establecida por la
propiedad Inter!al del control&
Inter!al De!uel!e o establece el n/mero de milisegundos entre las llamadas al e!ento
9imer de un control *imer& 'os !alores admitidos para milisegundos son I*
-ue desacti!a el control *imer* o de 1 a GFFBF& ,l m8imo* GFFBF
milisegundos* e-ui!ale a poco ms de un minuto&
E)entos
9imer =curre cuando 5a transcurrido un inter!alo preestablecido para el control
*imer&
(jemplo de uso del control *imer
MinimiBa el 'ormulario y activa el control temporiBador *imer6
"rivate Sub cmdEstablecer%Clic&'(
FormC.DindoEState = C
TimerC.Enabled = True
End Sub
t8t@ora
t8t"ensa(e
cmd,stablec
er
cmd+alir
9imer1
Inter!alZ1II
I
,nabledZ:als
e
*ermina la ejecuci$n de la aplicaci$n
"rivate Sub cmdSalir%Clic&'(
End
End Sub
Compara la hora actual con la hora ingresada en el cuadro ttHora cada
segundo y muestra el mensaje establecido en caso de 2ue sean iguales,
desactiva el control temporiBador y restaura la ventana a su tama-o normal.
"rivate Sub TimerC%Timer'(
Dim /ora 2s String
/ora = Format'Time6 "//Amm"(
*+ /ora = txtHora.Text T/en
Beep
)sgBox txt)ensa9e.Text6 vb#$#nl7 8 vb*n+ormation6 ")ensa9e"
TimerC.Enabled = False
FormC.DindoEState = .
End *+
End Sub
1so del control Data
,n Visual Basic puede utili0ar el control 5ata para crear aplicaciones de
bases de datos para una gran !ariedad de #ormatos de base de datos& ,l
control 5ata interact/a con el motor de base de datos "icroso#t fet )
permite crear aplicaciones preparadas para datos con la m.nima
cantidad de cdigo posible&
Vista Eeneral del Acceso a Datos
Antes de traba(ar con la #uncionalidad de base de datos desde Visual Basic* se debe
entender las capacidades de acceso a datos* as. como* la terminolog.a empleada&
=pciones de Acceso a Datos en Visual Basic
,sta parte del curso enumera las di!ersas opciones -ue Visual Basic proporciona para
acceder a datos&
;so del Motor de Base de Datos Microso*t Qet
'os ob(etos de acceso a datos Y Data Access =b(ects 35474 ) el control 5ata usan el
motor de base de datos "icroso#t fet para acceder a bases de datos& ,l motor de base
de datos fet puede acceder a los siguientes B tipos de bases de datos&
Bases de datos Ket
,stas bases de datos son creadas ) manipuladas directamente por el motor fet&
"icroso#t Access ) Visual Basic emplean el mismo motor de base de datos fet&
Bases de datos de Mtodo de 4cceso !ecuencial /ndeado 3/!4M)
'os #ormatos de estas bases de datos inclu)en Btrie!e* dBase* "icroso#t Visual
:o8Pro* ) Parado8&
Bases de datos compatibles con 75BC 37pen 5ataBase Connectivity L
Conectividad 4bierta de Base de 5atos)
,stas bases de datos inclu)en las bases de datos clienteNser!idor -ue con#orman el
estndar =DB2* tal como "icroso#t +Q' +er!er& 'a ma)or.a de bases de datos -ue
soportan =DB2 pueden ser accedidas empleando Visual Basic&
.tros m%todos de !cceso a Datos
'os otros mtodos de acceso a datos soportados por Visual Basic inclu)en:
(l control 7rigen de 5atos Aemoto 3Aemote 5ata !ource)
,ste es un control -ue emplea =DB2 para acceder a bases de datos =DB2 tales
como "icroso#t +Q' +er!er ) =racle& ,l control 7rigen de 5atos Aemoto slo est
disponible en la edicin ,mpresarial de Visual Basic&
#ibrer+as 75BC
,stas librer.as permiten -ue se llame a la inter#ace de programacin de
aplicaciones 3API4 de =DB2 directamente ) estn disponibles como un producto
separado&
#ibrer+as !M# de Visual Basic
,stas librer.as proporcionan un enlace directo a "icroso#t +Q' +er!er* ) estn
disponibles como un producto separado&
,ntendiendo los 2onceptos Bsicos acerca de las Bases de
Datos
'a ma)or.a de sistemas de bases de datos emplean el modelo de base de datos
relacional& ,ste modelo presenta los datos como una coleccin de tablas& 1na tabla es
un grupo lgico de in#ormacin relacionada& Por e(emplo* la base de datos ;eptuno
contiene una tabla -ue almacena a los empleados* ) otra almacena los pedidos de una
compa6.a cticia&
'a base de datos ;eptuno&mdb es una base de datos de e(emplo incluida con "icroso#t
Access&
,lementos de una 9abla
'a base de datos ;eptuno contiene un n/mero de tablas -ue agrupan la in#ormacin&
,stas tablas inclu)en Pedidos* 2lientes* ) ,mpleados&
,n una base de datos fet* las las de la tabla son denominadas registros* ) las
columnas campos&
#a Cla)e Principal
2ada tabla debe de tener una cla!e principal* -ue es un campo 3o una combinacin de
campos4 -ue es /nico para cada registro en la tabla& Por e(emplo* el campo Id,mpleado
es la cla!e principal para la tabla ,mpleados&
1na tabla puede tambin tener cla!es #orneas* -ue son campos -ue 5acen re#erencia
a una cla!e principal de otra tabla& Por e(emplo* en la base de datos ;eptuno* la tabla
Pedidos tiene un campo llamado Id2liente& ,ste campo es una cla!e #ornea por-ue
5ace re#erencia a un cliente de la tabla 2lientes& ,n !e0 de duplicar toda la in#ormacin
del cliente por cada pedido* slo se ingresa la cla!e principal del cliente a -uien
pertenece el pedido* como la cla!e principal es /nica por cada cliente* 5a) un solo
cliente por cada pedido* ) un cliente puede tener muc5os pedidos& ,n trminos de una
base de datos* la relacin entre la tabla 2lientes ) la tabla Pedidos es una relacin del
tipo uno>a>!arios&
3egistros
1n registro contiene in#ormacin acerca de un solo ingreso en una tabla&
Eeneralmente* no se desea -ue dos registros en una tabla tengan los mismos datos&
Por e(emplo* un registro en la tabla ,mpleados contiene in#ormacin acerca de un /nico
empleado&
Campos
2ada campo en una tabla contiene una parte de la in#ormacin& Por e(emplo* la tabla
,mpleados inclu)e campos para el Id del empleado* Apellidos* ;ombre* etc&
Indices
'os .ndices de una tabla de una base de datos son listas ordenadas -ue son ms
rpidas para las b/s-uedas -ue las tablas en s.& Para 5abilitar un acceso ms rpido a
una base de datos* la ma)or.a de bases de datos emplean uno o ms .ndices& Por
e(emplo* la tabla ,mpleados tiene un .ndice para la columna Id,mpleado&
9raba(ando con el 2ontrol Data
,l control 5ata de Visual Basic permite escribir aplicaciones de bases de
datos mu) ecaces con mu) poco cdigo&
,n esta parte se aprender a generar aplicaciones de bases de datos
con el control 5ata ) el ob(eto Aecordset asociado& 9ambin se
aprender como el Asistente para :ormularios de Datos puede construir
una aplicacin -ue inclu)e el control 5ata&
9ener Acceso a Datos con el 2ontrol Data
,l control 5ata implementa el acceso a datos mediante el motor de
base de datos "icroso#t fet& ,sta tecnolog.a proporciona acceso a
muc5os #ormatos de base de datos ) permite crear aplicaciones -ue
mane(an datos sin necesidad de escribir cdigo&
Para crear una aplicacin de base de datos -ue emplee el control 5ata*
se siguen los siguientes pasos:
1& 1& A6adir el control 5ata al #ormulario ) establecer las propiedades
para especicar la base de datos ) la tabla desde la cual se
obtendrn los datos&
A& A& A6adir controles enla0ados a datos al #ormulario* ) establecer las
propiedades para enla0ar los controles al control 5ata para -ue los
datos puedan ser mostrados&
1so de 2ontroles ,nla0ados a Datos
2uando un control -ue 5a colocado en un #ormulario se enla0a a datos*
se muestran automticamente los datos de la base de datos en el
control enla0ado& +i un usuario cambia los datos de un control enla0ado*
dic5os cambios se actuali0arn automticamente en la base de datos en
cuanto el usuario se desplace a otro registro& "uc5os controles
intr.nsecos o estndar de Visual Basic permiten ser enla0ados a datos*
como es el caso de los controles CheckBo* /mage* #abel*
.ictureBo* *etBo* #istBo* ComboBo ) los contenedores 7#(&
'a siguiente ilustracin es un e(emplo de un #ormulario -ue contiene un
control 5ata ) dos controles enla0ados&
,stablecer las Propiedades del 2ontrol Data
'os siguientes pasos describen como conectar un control 5ata a una
base de datos&
1& 1& ,specicar las base de datos a la cual se -uiere acceder
estableciendo la propiedad 5atabase&ame al nombre de la base
de datos&
A& A& Para especicar -ue registros recuperar* establecer la
propiedad Aecord!ource al nombre de la tabla dentro de la base
de datos* o a una cadena +Q'&
Nota8 Para acceder a una $ase de datos dBase' Paradox' o Btrie)e' se
de$e esta$lecer la propiedad DatabaseName a la carpeta 0ue contiene
los arc+i)os de la $ase de datos' y la propiedad Connect al tipo
apropiado de $ase de datos.
,nla0ar 2ontroles
Despus de establecer los !alores de las propiedades para el control
5ata* es necesario enla0ar al control 5ata controles indi!iduales )
despus especicar -u campo de la tabla mostrar cada control&
1& 1& ,n tiempo de dise6o* establecer la propiedad 5ata!ource del
control enla0ado a datos al control 5ata&
A& A& ,n tiempo de dise6o o en tiempo de e(ecucin* especicar -ue
campo se desea mostrar en el control enla0ado estableciendo la
propiedad 5ata%ield&
'a propiedad 5ata%ield puede ser establecida en tiempo de dise6o
o en tiempo de e(ecucin&
1sar las Propiedades ) "todos del 2ontrol Data
Para especicar los datos -ue se desean recuperar* se debe establecer
las propiedades 5atabase&ame ) Aecord!ource de un control 5ata&
Adems* se pueden establecer las siguientes propiedades ) mtodos&
#a Propiedad Connect
,sta propiedad especica el tipo de base de datos a abrir& Puede incluir
argumentos tales como un nombre de usuario 3user ID4 ) una
contrase6a&
#a Propiedad Exclusi)e
'a propiedad (clusive determina si se tiene o no un uso e8clusi!o de
la base de datos& +i esta propiedad se establece a *rue* ) luego se abre
sin problemas la base de datos* ninguna otra aplicacin podr abrirla
5asta -ue sea cerrada&
#a Propiedad 3ead.nly
,sta propiedad determina si se puede o no actuali0ar o grabar cambios
en la base de datos& +i no se tiene planeado 5acer cambios en la base
de datos* es ms eciente establecer la propiedad Aead7nly a *rue&
#a Propiedad 3ecordset
'a propiedad Aecordset es un ob(eto -ue contiene el con(unto de
registros de!ueltos por el control 5ata& ,sta propiedad contiene a su !e0
propiedades ) mtodos -ue pueden ser usados para traba(ar con los
registros de!ueltos&
#as Propiedades B.F!ction y E.F!ction
,stas propiedades determinan -ue accin tomar el control 5ata
cuando las propiedades B7% o (7% del recordset tomen como !alor
*rue&
Por e(emplo* si la propiedad (7%4ction del control 5ata es establecida
a !bActionAdd;e%* ) se emplea el control 5ata para despla0arse* una
!e0 -ue se pase el /ltimo registro* el control 5ata automticamente
e(ecutar el mtodo 4dd&e" de modo -ue se pueda a6adir un nue!o
registro&
El M%todo 3e*res+
,l mtodo Ae'resh renue!a el ob(eto Aecordset& +i se cambia la
propiedad Aecord!ource en tiempo de e(ecucin* se debe in!ocar al
mtodo Ae'resh para reno!ar el recordset&
,l siguiente cdigo muestra como emplear el mtodo Ae'resh&
DataC.;ecordSource = "SE,ECT K F;#) Empleados " W %
"DHE;E Y*dEmpleadoZ = " W txt*dEmp.Text
DataC.;e+res/
,l =b(eto ?ecordset
,n una aplicacin de base de datos* los usuarios traba(an con el control
5ata para despla0arse entre registros dentro de la base de datos& 'os
usuarios pueden 5acer clic en los botones del control 5ata para a!an0ar
o retroceder registro a registro o para ir directamente al primer o al
/ltimo registro&
M/u% es un 3ecordsetN
9odo el con(unto de registros al -ue 5ace re#erencia un control 5ata se
denomina con(unto de registros o Aecordset& ,l Aecordset se
almacena en la memoria* transrindose al disco si es necesario&
Para manipular el Aecordset* se emplea la propiedad Aecordset del
control 5ata& ,l Aecordset contiene el registro actual& 'a in#ormacin
del registro actual es mostrada por los controles enla0ados& +e puede
cambiar la posicin del registro actual 5aciendo clic en el control 5ata o
escribiendo cdigo -ue emplee mtodos del ob(eto Aecordset&
Determinar los l"mites de un 3ecordset
+i utili0a cdigo para cambiar la posicin del registro actual* debe
comprobar las propiedades (7% ) B7% del ob(eto Aecordset para
determinar el inicio ) el nal del mismo& 2uando se desplace al registro
(7% o al B7%* se e(ecutar la accin indicada por el !alor de la
propiedad B7%4ction o (7%4ction&
Por e(emplo* se puede establecer la propiedad (7%4ction para a6adir
un nue!o registro automticamente& +i se establece la propiedad
(7%4ction a (7%* ninguna accin ser tomada cuando se desplace al
registro (7%& 2uando se desplace pasando un registro los registros B7%
o (7%* se producir un error en tiempo de e(ecucin&
,n la siguiente ilustracin se muestra cmo las propiedades B7% ) (7%
determinan los l.mites del ob(eto Aecordset&
Para emplear el ob(eto Aecordset de un control 5ata determinado* se
debe especicar la propiedad Aecordset del control Data* como se
muestra en el siguiente cdigo&
DataC.;ecordset.)ove!ext ')ueve el registro actual al
siguiente
*+ DataC.;ecordset.E#F T/en
DataC.;ecordset.)ove,ast
1so de las Propiedades ) "todos de un ?ecordset
1tilice los mtodos ) las propiedades del ob(eto Aecordset para
recuperar in#ormacin del con(unto de registros* despla0arse por los
registros ) agregar* actuali0ar o eliminar registros&
#as Propiedades B.F y E.F
'as propiedades B7% ) (7% del ob(eto Aecordset indican si la posicin
del registro actual es antes del primer registro o despus del /ltimo
registro dentro del con(unto de registros& +i no 5a) registros en el
recordset* entonces el !alor de las propiedades B7% ) (7% es *rue&
El M%todo !dd@e: del 3ecordset
Para agregar un nue!o registro a un recordset* se emplea el mtodo
4dd&e"& 2uando se e(ecuta el mtodo 4dd&e"* Visual Basic limpia los
controles enla0ados ) establece la propiedad (ditMode del control 5ata
a db,ditAdd&
,l nue!o registro no ser a6adido a la base de datos 5asta -ue sea
e(ecutado e8pl.citamente un mtodo 0pdateAecord o 0pdate* o 5asta
-ue el usuario se mue!a a otro registro&
,l siguiente cdigo muestra como agregar un nue!o registro a un
recordset&
"rivate Sub cmd2gregar%Clic&'(
DataC.;ecordset.2dd!eE
El M%todo ;pdate3ecord del Control Data
,l mtodo 0pdateAecord se emplea para grabar el registro actual a
una base de datos& ,l siguiente cdigo muestra como grabar el registro
actual ) actuali0ar la base de datos&
"rivate Sub cmd3rabar%Clic&'(
DataC.-pdate;ecord
El M%todo Cancel;pdate del Control Data
,l mtodo Cancel0pdate se emplea para cancelar un mtodo 4dd&e"
o (dit ) reno!ar o re#rescar los controles enla0ados con datos del
recordset&
Por e(emplo* si un usuario 5a modicado los campos de un #ormulario*
pero toda!.a no los 5a actuali0ado* el mtodo Cancel0pdate re#rescar
los campos con los datos originales del recordset&
+i un usuario selecciona un botn 4gregar de un #ormulario* ) luego
decide no agregar el registro* el mtodo Cancel0pdate cancelar la
operacin ) !isuali0ar el registro actual&
,l siguiente cdigo muestra como cancelar la agregacin o edicin de un
registro&
"rivate Sub cmdCancelar%Clic&'(
DataC.Cancel-pdate
El M%todo Delete del 3ecordset
Para eliminar un registro de una base de datos* se emplea el mtodo
5elete& ,l registro eliminado permanecer como el registro actual 5asta
-ue el usuario se mue!a a un registro di#erente* como se muestra en el
siguiente cdigo&
"rivate Sub cmdEliminar%Clic&'(
DataC.;ecordset.Delete
DataC.;ecordset.)ove!ext
*+ DataC.;ecordset.E#F T/en
DataC.;ecordset.)ove,ast
End *+
End Sub
Nota8 #a $ase de datos @eptuno tiene de2nidas reglas de integridad
re*erencial 0ue impiden eliminar registros relacionados.
1so del Asistente para :ormularios de Datos
,l Asistente para :ormularios de Datos es una utilidad de Visual Basic
-ue genera #ormularios de datos simples -ue emplean el control 5ata&
+e puede emplear el Asistente para :ormularios de Datos para construir
rpidamente #ormularios para una aplicacin de base de datos&
Para cargar el Asistente para :ormularios de Datos* se emplea la orden
4dministrador de Complementos del men/ Complementos&
1so de los ,!entos del 2ontrol Data
,l control 5ata proporciona tres e!entos -ue puede utili0ar para me(orar
la aplicacin de base de datos: Validate* ,rror ) ?eposition& Dic5os
e!entos permiten omitir parte del comportamiento predeterminado del
control 5ata&
;sar el E)ento Validate
1tilice el e!ento Validate para comprobar los datos antes de guardar un
registro en la base de datos& ,ste e!ento se produce (usto antes de -ue
Visual Basic escriba en la base de datos los cambios procedentes de los
controles enla0ados ) de -ue !uel!a a colocar el puntero del registro
actual en otro registro de la base de datos& Puede utili0ar el e!ento
Validate para pedir al usuario -ue conrme los cambios reali0ados&
#intaxis
,l e!ento Validate tiene la siguiente sinta8is:
.rivate !ub 5ata61Validate 3index 4s /nteger* action 4s /nteger*
sa)e 4s /nteger4
"l 5rg.mento 5ction
,l argumento action indica la operacin -ue pro!oc el e!ento Validate&
,l e!ento Validate se produce como resultado de reali0ar las operaciones
siguientes:
Move%irst* Move.revious* Move&et* Move#ast
4dd&e"
0pdate
5elete
%ind
,stablecer la propiedad Bookmark
2errar la base de datos
Descargar el #ormulario
Para cancelar cual-uiera de estas acciones* asigne al argumento action
el !alor !bDataAction2ancel&
"l 5rg.mento #a6e
,l argumento sa)e indica si !a a guardarse o no el registro& +i sa)e es
*rue* los datos enla0ados 5an cambiado& Para cancelar la accin de
guardar puede asignar a sa)e el !alor %alse&
,l siguiente cdigo pide al usuario -ue conrme los cambios 5ec5os a la
base de datos& +i el usuario responde ;o* los cambios sern cancelados&
"rivate Sub DataC%Ialidate '2ction 2s *nteger6 Save 2s
*nteger(
Dim i;espuesta as *nteger
*+ Save = True T/en
i;espuesta = )sgBox '"<Desea guardar los
cambios=" 6 vb>es!o(
*+ i;espuesta = vb!o T/en
Save = False
DataC.-pdateControls '2ctualiFa los campos
End *+
End *+
End Sub
;sar el E)ento 3eposition
1tilice el e!ento ?eposition para modicar la apariencia de un #ormulario
o reali0ar una accin necesaria cuando se desplace a un nue!o registro&
,ste e!ento tiene lugar cuando Visual Basic despla0a el puntero del
registro actual a otro registro de la base de datos& 9ambin se produce la
primera !e0 -ue se abre la base de datos&
!odi0car la apariencia de .n +orm.lario
Para cambiar la manera en -ue un #ormulario muestra in#ormacin
basndose en el registro seleccionado en ese momento 5a) -ue utili0ar
el e!ento ?eposition& Por e(emplo* puede modicar el t.tulo del control
5ata de #orma -ue se muestre el registro n/mero n&
Para !er el n/mero del registro actual* utilice la propiedad
4bsolute.osition del ob(eto Aecordset& ,l n/mero de registro es
relati!o a cero* por lo -ue el primer registro es el I&
,l siguiente cdigo muestra como !isuali0ar el n/mero del registro
actual&
"rivate Sub DataC%;eposition'(
DataC.Caption = ";egistro ![" W
DataC.;ecordset.2bsolute"osition 8 C
End Sub
Tratar los cambios al despla1arse a .n n.e6o registro
2uando un usuario se despla0a a un nue!o registro mediante el control
5ata* puede -ue los datos del #ormulario tengan -ue presentarse de
una #orma distinta en el caso del nue!o registro&
Por e(emplo* es posible -ue en un #ormulario -ue muestre registros de
empleados 5a)a distintas opciones dependiendo de s. los empleados son
(os* temporales o si traba(an por 5oras& 2ada registro mostrar la
in#ormacin sobre un empleado distinto* cu)as opciones pueden no ser
las mismas para todos los registros& Para -ue se seleccione la opcin
correcta para cada registro* escriba cdigo en el e!ento ?eposition&
,l cdigo siguiente utili0a el e!ento ?eposition para modicar la
apariencia de un #ormulario&
"rivate Sub DataC%;eposition'(
DataC.Caption=DataC.;ecordset.2bsolute"osition
*+ DataC.;ecordset'"*dEmpleado"( U O T/en
optSenior.Ialue = True
Else
opt\unior.Ialue = True
End *+
DataC.Caption = ";egistro ![" W
DataC.;ecordset.2bsolute"osition 8 C
End Sub
,sta ilustracin muestra el #ormulario basado en el cdigo anterior&
;sar el E)ento Error
,l e!ento ,rror tiene lugar cuando un usuario interact/a con el control
5ata ) se produce un error de acceso a datos& 1tilice el e!ento ,rror
para agregar tratamiento de errores personali0ado al control 5ata&
Por e(emplo* si un usuario modica un campo ) despus 5ace clic en el
control 5ata para despla0arse al siguiente registro* el control 5ata
actuali0ar el registro actual& +i se produce un error de acceso a datos
durante la actuali0acin* se producir el e!ento ,rror&
'os !alores de los campos enla0ados no cambian tras producirse un
error& ,l usuario puede corregir los !alores ) 5acer clic en el control 5ata
para tratar de actuali0ar nue!amente el registro&
!ostrar .n mensa7e de error personali1ado
+i no coloca cdigo para tratar errores en el e!ento ,rror ) se produce
un error cuando un usuario interact/a con el control 5ata* Visual Basic
muestra el mensa(e de error ) el programa contin/a e(ecutndose&
+i no desea -ue se muestre el mensa(e de error estndar* puede asignar
al argumento ?esponse el !alor I ) mostrar un mensa(e de error
personali0ado como se muestra en el siguiente cdigo&
"rivate Sub DataC%Error 'DataErr 2s *nteger6 ;esponse 2s
*nteger(
*+ DataErr = M.?? T/en 'Error de clave principal
duplicada
)sgBox "*ngrese un *d de Empleado Bnico"
txt*dEmp.SetFocus
;esponse = .
Else
;esponse = C ')uestra el mensa9e de error est5ndar
End *+
End Sub
1so de 2ontroles ,nla0ados a Datos Acti!eJ
Adems de los controles enla0ados intr.nsecos* Visual Basic o#rece !arios
controles 4ctive9 enla0ados a datos& ,n esta parte del curso se
describen algunos controles Acti!eJ enla0ados a datos a!an0ados&
;sar el Control DBBrid
,l control de cuadr.cula enla0ada a datos 3control 5B,rid4 permite -ue
los usuarios de su aplicacin de base de datos traba(en con !arios
registros a la !e0&
!ostrar m8ltiples registros
5B,rid es un control Acti!eJ -ue muestra una serie de las ) columnas
-ue representan registros ) campos de un ob(eto Aecordset& 2uando
asigne a la propiedad 5ata!ource del control 5B,rid un control 5ata*
el control 5B,rid se llenar automticamente de datos ) se
establecern automticamente sus encabe0ados de columna a partir del
con(unto de registros del control 5ata&
Al contrario -ue la ma)or.a de los controles enla0ados a datos* el control
5B,rid le permite !er ) modicar !arios registros simultneamente&
,n la siguiente ilustracin se muestra un #ormulario -ue utili0a un control
5B,rid para presentar registros procedentes de la base de datos
;eptuno&
.ara a-adir el control 5B,rid a un proyecto
1& 1& @acer clic en la orden Componentes del men/ .royecto&
A& A& ,n la c5a Controles* seleccionar Microso't 5ata Bound ,rid
Control* ) luego 5acer clic en 4ceptar&
,l control 5B,rid tiene !arias propiedades -ue especican cmo se
comporta el control& Por e(emplo* si asigna a la propiedad 4llo"0pdate
el !alor *rue* un usuario puede modicar los datos del control& 9ambin
puede establecer propiedades para columnas indi!iduales del control
5B,rid&
Puede cambiar el t.tulo de la columna* cambiar el campo de datos al -ue
se enla0a la columna* agregar !alores predeterminados* etc&
.ara establecer propiedades de columnas
1& 1& =prima el botn secundario del ratn sobre el control 5B,rid&
A& A& @aga clic en la orden .ropiedades&
B& B& @aga clic en Columnas&
Puede cambiar el t.tulo de la columna* cambiar el campo de datos al -ue
se enla0a la columna* agregar !alores predeterminados* etc&
Para establecer los encabe0ados de las columnas del control 5B,rid*
luego de 5aberlo enla0ado a un control 5ata* oprima el botn
secundario del ratn sobre el control en tiempo de dise6o* ) luego 5aga
clic en la orden Aecuperar campos&
9btener : establecer el texto de la celda act.al
1tilice la coleccin Columns del control 5B,rid para recuperar el te8to
de la celda seleccionada actualmente en tiempo de e(ecucin& Por
e(emplo:
)sgBox DB3ridC.Columns'DB3ridC.Col(.Text
Para cambiar la in#ormacin del control DBErid* cambie el ob(eto
?ecordset asociado& Por e(emplo* si el control 5B,rid est enla0ado al
recordset Data1* se e(ecutar.a el siguiente cdigo:
DataC.;ecordset.Edit
DataC.;ecordset.Fields'"!ombre"roducto"( = "Disco duro"
DataC.;ecordset.-pdate
Usar el e6ento 2e+oreUpdate
,l e!ento Be#ore1pdate tiene lugar antes de -ue se mue!an datos desde
un control 5B,rid al b/#er de copia del control 5ata& Puede !alidar los
datos ) cancelar la actuali0acin si es necesario&
;sar el Control M5FlexBrid
,l control M!%le,rid proporciona caracter.sticas a!an0adas para la
presentacin de datos en una cuadr.cula& ,s similar al control 5B,rid
aun-ue* cuando se enla0a a un control 5ata* el control M!%le,rid
muestra datos de slo lectura& Puede utili0ar el control M!%le,rid para
combinar las o columnas de in#ormacin ) as. agrupar la in#ormacin
relacionada&
,n la siguiente ilustracin se muestran registros agrupados por Id& de
pedido en la tabla Detalles de pedidos&
.ara combinar celdas
1& 1& ,stable0ca la propiedad MergeCells a un !alor di#erente a cero&
A& A& ,stable0ca las propiedades arreglo MergeAo"3) ) MergeCol3) a
*rue para las las ) columnas -ue desee combinar&
Por e(emplo* para combinar las celdas en la tabla Detalles de pedidos*
a6ada el siguiente cdigo al #ormulario donde se encuentra el control
M!%le,rid&
"rivate Sub Form%,oad'(
)SFlex3ridC.)ergeCells = +lex)ergeFree
)SFlex3ridC.)ergeCol'.( = True
End Sub
;sar el Control DBCom$o
Puede utili0ar el control de cuadro de lista enla0ado a datos 35B#ist4 o
el cuadro combinado enla0ado a datos 35BCombo4 para presentar
automticamente una lista de !alores de un ?ecordset& ,sto resulta /til
para proporcionar !alores !lidos al usuario&
9btener in+ormacin de .na tabla de b8s-.eda
9ambin puede utili0ar estos controles en aplicaciones de gtabla de
b/s-uedag&
Por e(emplo* puede presentar una lista de nombres de categor.a !lidos
3en !e0 de Id&4 ) utili0ar el Id& correspondiente cuando el usuario agregue
o modi-ue datos&
'a ilustracin siguiente muestra un #ormulario -ue utili0a el control
5BCombo para presentar nombres de categor.as de la tabla Productos&
"stablecer propiedades del control D2Combo
Para determinar el !alor -ue se presenta en el control 5BCombo* asigne
a la propiedad Ao"!ource un nombre de control 5ata ) a la propiedad
#ist%ield un nombre de campo&
,l cuadro combinado enla0ado a datos contiene todos los !alores de ese
campo& Para determinar -u campo de la base de datos se actuali0a
cuando un usuario cambia un !alor* estable0ca las propiedades
5ata!ource ) 5ata%ield& Para establecer la relacin entre la tabla -ue
contiene los !alores de b/s-ueda ) la tabla -ue se est modicando
realmente* estable0ca la propiedad BoundColumn&