13 -Eventos más importantes de los controles estándares.
13.1-Change
Aplicable a:
Control ComboBox, Controles HScrollBar y
VScrollBar, Control Label, Control PictureBox, Control TextBox
Indica que el contenido de un control ha
cambiado. Cómo y cuándo ha ocurrido este evento varía según el control:
-
ComboBox:
cambia el texto de la parte de cuadro de texto del control. Ocurre sólo si la
propiedad Style está establecida a 0 (Dropdown Combo) o 1 (Simple Combo)
y el usuario cambia el texto o usted cambia la configuración de la propiedad
Text mediante código.
-
DirListBox:
cambia el directorio seleccionado. Ocurre cuando el usuario hace doble clic en
un nuevo directorio o cuando usted cambia la configuración de la propiedad
Path mediante código.
-
DriveListBox:
cambia la unidad seleccionada. Ocurre cuando el usuario selecciona una nueva
unidad o cuando usted cambia la configuración de la propiedad Drive
mediante código.
-
HScrollBar
y VScrollBar (barras de desplazamiento horizontal y vertical): mueven la
parte de cuadro de desplazamiento de la barra de desplazamiento. Ocurre cuando
el usuario desplaza o cuando usted cambia la configuración de la propiedad
Value mediante código.
-
Label:
cambia el contenido del control Label. Ocurre cuando un vínculo DDE
actualiza los datos o cuando usted cambia la configuración de la propiedad
Caption mediante código.
-
PictureBox:
cambia el contenido del control PictureBox. Ocurre cuando un vínculo DDE
actualiza los datos o cuando usted cambia la configuración de la propiedad
Picture mediante código.
-
TextBox:
cambia el contenido del cuadro de texto. Ocurre cuando un vínculo DDE actualiza
los datos, cuando un usuario cambia el texto o cuando usted cambia la
configuración de la propiedad Text mediante código.
Sintaxis
Private Sub objeto_Change([índice As Integer])
La sintaxis del evento Change consta de las
siguientes partes:
Parte Descripción
objeto
Una expresión de objeto que da como resultado un objeto de la lista Aplicable a.
índice
Un entero que identifica únicamente a un control si está en una matriz de
controles.
Comentarios
El procedimiento del evento Change puede
sincronizar o coordinar la presentación de datos entre controles. Por ejemplo,
puede utilizar un procedimiento de evento Change de una barra de desplazamiento
para actualizar la configuración de la propiedad Value de la barra de
desplazamiento de un control TextBox. O bien, puede utilizar un
procedimiento de evento Change para mostrar datos y fórmulas en un área de
trabajo y los resultados en otra área.
Los procedimientos de evento Change son
también útiles para actualizar propiedades de controles del sistema de archivos
(DirListBox, DriveListBox y FileListBox). Por ejemplo,
puede actualizar la configuración de la propiedad Path para que un
control DirListBox refleje un cambio en la configuración de la propiedad Drive de un control DriveListBox.
Nota
Un procedimiento de evento Change puede algunas veces causar un evento en
cascada. Esto ocurre cuando el procedimiento de evento Change del control altera
el contenido del control, por ejemplo, estableciendo una propiedad en el código
que determina el valor del control, como el valor de la propiedad Text
para un control TextBox. Para impedir un evento en cascada:
-
Si es posible, evite escribir un
procedimiento de evento Change para un control que altere el contenido de ese
control. Si escribe un procedimiento así, asegúrese de establecer un indicador
que impida cambios posteriores mientras el cambio actual está en curso.
-
Evite crear dos o más controles
cuyos procedimientos de evento Change se vean afectados entre sí, por ejemplo,
dos controles TextBox que se actualicen entre sí durante sus eventos
Change.
-
Evite utilizar una función o una
instrucción MsgBox en este evento para los controles HScrollBar y VScrollBar.
Ejemplo del evento Change
Este ejemplo muestra la configuración
numérica de la propiedad Value de una barra de desplazamiento horizontal
en un control TextBox. Para probar este ejemplo, cree un formulario con
un control TextBox y un control HScrollBar y después pegue el
código en la sección Declaraciones de un formulario que contenga una barra de
desplazamiento horizontal (control HScrollBar) y un control TextBox.
Presione F5 y haga clic en la barra de desplazamiento horizontal.
Private Sub Form_Load ()
HScroll1.Min = 0
' Establece Min.
HScroll1.Max = 1000
' Establece Max.
HScroll1.LargeChange = 100
' Establece LargeChange.
HScroll1.SmallChange = 1
' Establece SmallChange.
End Sub
Private Sub HScroll1_Change ()
Text1.Text = HScroll1.Value
End Sub
13.2-Click
Aplicable a:
Control CheckBox, Control ComboBox, Control CommandButton, Objeto Form, Control
Frame, Control Image, Control Label, Control ListBox, Control Menu, Control
OptionButton, Control PictureBox, Control TextBox.
Ocurre cuando el usuario presiona y suelta
un botón del mouse (ratón) en un objeto. También puede ocurrir cuando se
cambia el valor de un control.
Para un objeto Form, este evento
ocurre cuando el usuario hace clic en un área en blanco o en un control
desactivado. Para un control, este evento ocurre cuando el usuario:
-
Hace clic en un control con el botón
primario o secundario del mouse. Con un control CheckBox,
CommandButton, ListBox o OptionButton, el evento Click sólo
ocurre cuando el usuario hace clic con el botón primario del mouse.
-
Selecciona un elemento de un control ComboBox o ListBox, ya sea presionando las teclas de dirección o
haciendo clic con el botón del mouse.
-
Presiona la BARRA ESPACIADORA cuando
un control CommandButton, OptionButton o CheckBox tiene el
enfoque.
-
Presiona ENTRAR cuando un formulario
tiene un control CommandButton con su propiedad Default
establecida a True.
-
Presiona ESC cuando un formulario
tiene un botón Cancelar, un control CommandButton con su propiedad Cancel establecida a True.
-
Presiona una tecla de acceso para un
control. Por ejemplo, si el título de un control CommandButton es "&Ir",
al presionar ALT+I se desencadena este evento.
También puede desencadenar el evento Click
en el código si:
-
Establece la propiedad Value
de un control CommandButton a True.
-
Establece la propiedad Value
de un control OptionButton a True.
-
Cambia el valor de la propiedad Value de un control CheckBox.
Sintaxis
Private Sub Form_Click( )
Private Sub objeto_Click([índice As Integer])
La sintaxis del evento Click consta de las
siguientes partes:
Parte Descripción
objeto
Una expresión de objeto que da como resultado un objeto de la lista Aplicable a.
índice
Un entero que identifica únicamente a un control si está en una matriz de
controles.
Comentarios
Por lo general se adjunta un procedimiento
de evento Click a un control CommandButton, un objeto Menu o un
control PictureBox para realizar comandos y acciones similares a
comandos. Para los demás controles aplicables, utilice este evento para
desencadenar acciones como respuesta a un cambio en el control.
Puede utilizar la propiedad Value de
un control para comprobar el estado del control desde el código. Hacer clic en
un control genera los eventos MouseDown y MouseUp además del evento Click. El
orden en que ocurren estos tres eventos varía de un control a otro. Por ejemplo,
para los controles ListBox y CommandButton, los eventos ocurren en
este orden: MouseDown, Click, MouseUp. Pero para los controles FileListBox, Label o PictureBox, los eventos ocurren en este otro orden:
MouseDown, MouseUp y Click. Cuando está adjuntando procedimientos para estos
eventos relacionados, asegúrese de que sus acciones no entran en conflicto. Si
el orden de los eventos es importante en la aplicación, pruebe el control para
determinar el orden de los mismos.
Nota
Para distinguir entre los botones primario, secundario y central del mouse,
utilice los eventos MouseDown y MouseUp.
Si hay código en el evento Click, nunca se
activará el evento DlbClick ya que de los dos eventos, Click es el primero que
se activa. Como resultado, el evento Click intercepta el clic del mouse, por lo
que DblClick nunca se producirá.
Ejemplo del Evento Click
En este ejemplo, cada vez que se hace clic
en un control PictureBox se mueve diagonalmente por un formulario. Para
probar este ejemplo, pegue el código en la sección Declaraciones de un
formulario que contenga un control PictureBox en la esquina inferior
izquierda del mismo, después presione F5
y haga clic en el control PictureBox.
Private Sub Picture1_Click ()
Picture1.Move
Picture1.Left + 750, Picture1.Top - 550
End Sub
13.3- GotFocus
Aplicable a:
Control CheckBox, Control ComboBox, Control CommandButton, , Objeto Form Controles
HScrollBar y VScrollBar, Control ListBox, Control OptionButton, Control PictureBox,
Control TextBox.
Ocurre cuando un objeto recibe el enfoque,
ya sea mediante una acción del usuario, como tabular o hacer clic en el objeto,
o cambiando el enfoque en el código mediante el método SetFocus. Un
formulario recibe el enfoque sólo cuando todos los controles visibles están
desactivados.
Sintaxis
Private Sub Form_GotFocus( )
Private Sub objeto_GotFocus([índice As Integer])
La sintaxis del evento GotFocus consta de
las siguientes partes:
Parte Descripción
objeto Una expresión de objeto que da como
resultado un objeto de la lista Aplicable a.
índice Un entero que identifica de manera
única a un control si está en una matriz de controles.
Comentarios
Normalmente, el procedimiento de evento
GotFocus se utiliza para especificar las acciones que ocurren cuando un control
o un formulario recibe primero el enfoque. Por ejemplo, si adjunta un
procedimiento de evento GotFocus a cada control de un formulario puede guiar al
usuario mostrándole instrucciones breves o mensajes en la barra de estado.
También puede proporcionar avisos visuales activando, desactivando o mostrando
otros controles que dependan del control que tiene el enfoque.
Nota
Un objeto puede recibir el enfoque sólo si sus propiedades Enabled y
Visible están establecidas a True. Para personalizar el interfaz de
teclado en Visual Basic para mover el enfoque, establezca el orden de tabulación
o especifique teclas de acceso para controles de un formulario.
Ejemplo del evento GotFocus
Este ejemplo muestra un mensaje en la barra
de estado cuando un botón de un grupo OptionButton obtiene el enfoque.
Para probar este ejemplo, pegue el código en la sección Declaraciones de un
formulario que contenga dos controles OptionButton y un control Label.
Establezca la propiedad Name de ambos controles OptionButton a
OptionGroup y, después, presione F5
y haga clic en los controles OptionButton.
Private Sub Form_Load ()
Label1.AutoSize
= True
End Sub
Private Sub OptionGroup_GotFocus (Index As Integer)
Select
Case Index
Case 0
Label1.Caption = "La opción 1 tiene el enfoque."
Case 1
Label1.Caption = "La opción 2 tiene el enfoque."
End Select
End Sub
Private Sub OptionGroup_LostFocus (Index As Integer)
Label1.Caption
= ""
End Sub
13.4- KeyPress
Aplicable a:
Control CheckBox, Control ComboBox, Control CommandButton, Objeto Form
Controles HScrollBar y VScrollBar, Control ListBox, Control OptionButton, Control
PictureBox, Control TextBox.
Ocurre cuando el usuario presiona y suelta
una tecla.
Sintaxis
Private Sub Form_KeyPress(keyascii As Integer)
Private Sub objeto_KeyPress([índice As Integer,]keyascii As Integer)
La sintaxis del evento KeyPress consta de
las siguientes partes:
Parte Descripción
objeto Una expresión de objeto que da como
resultado un objeto de la lista Aplicable a.
índice Un entero que identifica de manera
única a un control si está en una matriz de controles.
keyascii Un entero que devuelve un código de tecla
numérico ANSI estándar. keyascii se pasa por referencia; al
cambiarlo se envía un carácter diferente al objeto. Cambiar keyascii a 0
cancela la pulsación de tecla,
de forma que el objeto no recibe ningún carácter.
Comentarios
El objeto que tiene el enfoque recibe el
evento. Un formulario puede recibir el evento sólo si no tiene controles
visibles y activados. Un evento KeyPress puede implicar a cualquier carácter
imprimible del teclado, a la tecla CTRL
combinada con un carácter del alfabeto estándar o uno de los caracteres
especiales, y la tecla ENTRAR
o RETROCESO.
Un procedimiento de evento KeyPress es útil para interceptar pulsaciones de
teclas realizadas en un control TextBox o ComboBox. Esto le
permite comprobar inmediatamente la validez de las pulsaciones o el formato de
los caracteres a medida que se escriben. Cambiar el valor del argumento
keyascii cambia el carácter mostrado.
KeyPress interpreta las mayúsculas y
minúsculas de cada carácter como códigos de tecla distintos y, por tanto, como
caracteres diferentes.
Nota
El número ANSI para la combinación de teclado CTRL+@
es 0. Puesto que Visual Basic reconoce un valor keyascii de 0 como una
cadena de longitud cero (""), evite utilizar CTRL+@
en sus aplicaciones.
Ejemplo del evento KeyPress
Este ejemplo convierte a mayúsculas el
texto escrito en un control TextBox. Para probar este ejemplo, pegue el
código en la sección Declaraciones de un formulario que contenga un control
TextBox y, después, presione F5
y escriba algo en el control TextBox.
Private Sub Text1_KeyPress (KeyAscii As Integer)
Char =
Chr(KeyAscii)
KeyAscii
= Asc(UCase(Char))
End Sub
13.5- Load
Aplicable a:
Objeto Form.
Ocurre cuando se carga un formulario. Para
un formulario de inicio, ocurre cuando una aplicación se inicia como resultado
de una instrucción Load o como resultado de una referencia a una
propiedad o control de un formulario descargado.
Sintaxis
Private Sub Form_Load( )
Private Sub MDIForm_Load( )
Comentarios
Normalmente utiliza un procedimiento de
evento Load para incluir código de inicialización para un formulario; por
ejemplo, código que especifica los valores predeterminados de los controles,
indica el contenido que se va a cargar en controles ComboBox o ListBox
e inicializa variables a nivel del formulario.
El evento Load ocurre tras el evento
Initialize.
Nota
Cuando cree procedimientos para eventos relacionados, como Activate, GotFocus,
Paint y Resize, asegúrese de que sus acciones no entran en conflicto y no
producen eventos recursivos.
Ejemplo del evento Load
Este ejemplo carga elementos en un control ComboBox cuando se carga un formulario. Para probar este ejemplo, pegue
el código en la sección Declaraciones de un formulario que contenga un control ComboBox y después presione F5.
Private Sub Form_Load ()
Combo1.AddItem
"Mozart"
' Agrega elementos a la lista.
Combo1.AddItem
"Beethoven"
Combo1.AddItem
"Rock 'n Roll"
Combo1.AddItem
"Reggae"
Combo1.ListIndex = 2 ' Establece la selección
predeterminada.
End Sub
13.6- LostFocus
Aplicable a
Control CheckBox, Control ComboBox, Control
CommandButton, Objeto Form Controles HScrollBar y VScrollBar, Control ListBox,
Control OptionButton, Control PictureBox, Control TextBox.
Ocurre cuando un objeto pierde el enfoque,
ya sea por una acción del usuario, como tabular o hacer clic en otro objeto, o
bien mediante un cambio del enfoque en el código con el método SetFocus.
Sintaxis
Private Sub Form_LostFocus( )
Private Sub objeto_LostFocus([índice As Integer])
La sintaxis del evento LostFocus consta de
las siguientes partes:
Parte Descripción
objeto Una expresión de objeto que da como
resultado un objeto de la lista Aplicable a.
índice Un entero que identifica de manera
única a un control si está en una matriz de controles.
Comentarios
Un procedimiento de evento LostFocus
resulta especialmente útil para comprobar y validar actualizaciones. Utilizar
LostFocus puede hacer que la validación tenga lugar conforme el usuario mueve el
enfoque del control. Otro uso para este tipo de procedimiento de evento es
activar, desactivar, ocultar y mostrar otros objetos, como en un procedimiento
de evento GotFocus. También puede invertir o cambiar condiciones que estableció
en el procedimiento de evento GotFocus del objeto.
Ejemplo del evento LostFocus
Este ejemplo cambia el color de un control TextBox cuando recibe o pierde el enfoque (se selecciona con el mouse
o la tecla TAB)
y muestra el texto apropiado en el control Label. Para probar este
ejemplo, pegue el código en la sección Declaraciones de un formulario que
contenga dos controles TextBox y un control Label y, después,
presione F5
y mueva el enfoque entre Text1 y Text2.
Private Sub Text1_GotFocus ()
' Muestra el enfoque en rojo.
Text1.BackColor
= RGB(255, 0, 0)
Label1.Caption
= "Text1 tiene el enfoque."
End Sub
Private Sub Text1_LostFocus ()
' Muestra
la pérdida del enfoque en azul.
Text1.BackColor = RGB(0, 0, 255)
Label1.Caption = "Text1 no tiene el
enfoque."
End Sub
13.7- MouseMove
Aplicable a:
Control CheckBox, Control CommandButton, Control Data, Objeto Form, Control
Frame, Control Image, Control Label, Control ListBox, Control OptionButton,
Control PictureBox, Control TextBox.
Ocurre cuando el usuario mueve el mouse.
Sintaxis
Private Sub Form_MouseMove(botón As Integer, mayús As Integer, x As Single,
y As Single)
Private Sub MDIForm_MouseMove(botón As Integer, mayús As Integer, x As Single,
y As Single)
Private Sub objeto_MouseMove([índice As Integer,] botón As Integer, mayús
As Integer, x As Single, y As Single)
La sintaxis del evento MouseMove consta de
las siguientes partes:
Parte Descripción
objeto Una expresión de objeto que da como
resultado un objeto de la lista Aplicable a.
índice Un entero que identifica de manera
única a un control si está en una matriz de controles.
botón Un entero que corresponde al estado
de los botones del mouse en el cual un bit se establece si el botón está
presionado. El argumento botón es un campo de bit con los bits
correspondientes al botón primario (bit 0), al botón secundario (bit 1) y al
botón central (bit 2). Estos bits corresponden a los valores 1, 2 y 4,
respectivamente. Indica el estado completo de los botones del mouse;
alguno, todos o ninguno de estos tres bits puede estar establecido, lo que
indica que algunos, todos o ninguno de los botones está presionado.
mayús Un entero que corresponde al estado
de las teclas
MAYÚS, CTRL
y ALT.
Un bit está establecido si la tecla está presionada. El argumento mayús
es un campo de bits con los bits menos significativos correspondientes a la
tecla MAYÚS (bit 0), CTRL
(bit 1) y ALT
(bit 2 ). Estos bits corresponden a los valores 1, 2 y 4, respectivamente. El
argumento mayús indica el estado de estas teclas. Alguno, todos o ninguno
de los bits puede estar establecido, lo que indica que alguna, todas o ninguna
de las teclas está presionada. Por ejemplo, si se presionaron las teclas CTRL
y ALT,
el valor de shift sería 6.
x, y Un número que especifica la
ubicación actual del puntero del mouse. Los valores x e y
siempre se expresan en términos del sistema de coordenadas establecido por las
propiedades ScaleHeight, ScaleWidth, ScaleLeft y
ScaleTop del objeto.
Comentarios
El evento MouseMove se genera continuamente
a medida que el puntero del mouse se mueve por los objetos. A menos que
otro objeto haya capturado el mouse, un objeto reconoce un evento
MouseMove siempre que la posición del mouse esté dentro de sus bordes.
Ejemplo del evento MouseMove
Este ejemplo muestra una aplicación de
dibujo simple. El procedimiento de evento MouseDown funciona con un
procedimiento MouseMove relacionado para activar el dibujo cuando está
presionado cualquier botón del mouse. El procedimiento de evento MouseUp
desactiva el dibujo. Para probar este ejemplo, pegue el código en la sección
Declaraciones de un formulario, después presione F5,
haga clic en el formulario y mueva el mouse mientras está presionado el
botón del mismo.
Dim PaintNow As Boolean
' Declara una variable.
Private Sub Form_MouseDown (Button As Integer, Shift As Integer, X As Single,
Y As Single)
PaintNow
= True ' Activa el dibujo.
End Sub
Private Sub Form_MouseUp (Button As Integer, X As Single, Y As Single)
PaintNow
= False '
Desactiva el dibujo.
End Sub
Private Sub Form_MouseMove (Button As Integer, Shift As Integer, X As Single,
Y As Single)
If PaintNow
Then
PSet (X, Y)
' Dibuja un punto.
End If
End Sub
Private Sub Form_Load ()
DrawWidth
= 10
' Utiliza un pincel más ancho.
ForeColor = RGB(0, 0, 255) ' Establece el color de dibujo.
End Sub
13.8- Timer
Aplicable a:
Control Timer
Ocurre cuando ha transcurrido un intervalo
preestablecido para un control Timer. La frecuencia del intervalo se
almacena en la propiedad Interval del control, que especifica el tiempo
en milisegundos.
Sintaxis
Private Sub objeto_Timer([índice As Integer])
La sintaxis del evento Timer consta de las
siguientes partes:
Parte Descripción
objeto Una expresión de objeto que da como
resultado un objeto de la lista Aplicable a.
índice Un entero que identifica de manera
única a un control si está en una matriz de controles.
Comentarios
Utilice este procedimiento de evento para
indicar a Visual Basic qué hacer cada vez que se agote el intervalo de tiempo de
un control Timer. Cuando esté trabajando con el evento Timer:
-
La propiedad Interval
especifica el intervalo entre los eventos Timer, en milisegundos.
-
Siempre que la propiedad Enabled
del control Timer esté establecida a True y la propiedad
Interval sea mayor que 0, el evento Timer espera durante el periodo
especificado en la propiedad Interval.
Ejemplo del evento Timer
Este ejemplo muestra un reloj digital. Para
probar este ejemplo, pegue el código en la sección Declaraciones de un
formulario que contenga un control Label y un control Timer y,
después, presione
F5.
Private Sub Form_Load ()
Timer1.Interval = 1000 ' Establece el intervalo de Timer.
End Sub
Private Sub Timer1_Timer ()
Label1.Caption = Time ' Actualiza la presentación de la
hora.
End Sub
Este ejemplo mueve un control PictureBox
por un formulario. Para probar este ejemplo, pegue el código en la sección
Declaraciones de un formulario que contenga un control Timer y un control PictureBox y, después, presione F5.
Si desea obtener un efecto visual mejor puede asignar un mapa de bits al control PictureBox mediante la propiedad Picture.
Dim DeltaX, DeltaY As Integer ' Declara variables.
Private Sub Timer1_Timer ()
Picture1.Move
Picture1.Left + DeltaX, Picture1.Top + DeltaY
If Picture1.Left
< ScaleLeft Then DeltaX = 100
If Picture1.Left
+ Picture1.Width > ScaleWidth + ScaleLeft Then
DeltaX = -100
End If
If Picture1.Top
< ScaleTop Then DeltaY = 100
If Picture1.Top
+ Picture1.Height > ScaleHeight + ScaleTop Then
DeltaY = -100
End If
End Sub
Private Sub Form_Load ()
Timer1.Interval
= 1000 ' Establece el intervalo.
DeltaX = 100 ' Inicializa variables.
DeltaY = 100
End Sub
13.9- Unload
Aplicable a:
Objeto Form.
Ocurre cuando un formulario está a punto de
quitarse de la pantalla. Cuando ese formulario se vuelve a cargar, el contenido
de todos sus controles se reinicializa. Este evento se desencadena porque un
usuario cierra el formulario mediante el comando Cerrar del menú
Control o una instrucción Unload.
Sintaxis
Private Sub objeto_Unload(cancelar As Integer)
La sintaxis del evento Unload consta de las
siguientes partes:
Parte Descripción
objeto
Una expresión de objeto que da
como resultado un objeto de la lista Aplicable a.
cancelar
Un entero que determina si el
formulario se quita de la pantalla. Si cancelar es 0, el formulario se
quita. Establecer cancelar a cualquier valor distinto de cero impide que
el formulario se quite.
Comentarios
Establecer cancelar a un valor
distinto de cero impide que el formulario se quite, pero no detiene los demás
eventos, como la salida del entorno operativo Microsoft Windows. Utilice el
evento QueryUnload para detener la salida de Windows.
Utilice un procedimiento de evento Unload
para comprobar si el formulario se debe descargar o para especificar acciones
que desea que tengan lugar cuando se descargue el formulario. También puede
incluir cualquier código de validación a nivel del formulario que pueda
necesitar para cerrar el formulario o guardar los datos en un archivo.
El evento QueryUnload ocurre antes que el
evento Unload. El evento Unload ocurre antes que el evento Terminate.
El evento Unload puede estar causado por la
utilización de la instrucción Unload o porque el usuario elija el comando Cerrar del menú Control del formulario, salga de la aplicación con
el botón Finalizar tarea de la Lista de tareas, o salga del entorno
operativo Microsoft Windows mientras la aplicación se está ejecutando.
Ejemplo del evento Unload
Este ejemplo muestra un procedimiento
simple para cerrar un formulario mientras se avisa al usuario con varios cuadros
de mensajes. En una aplicación real, puede agregar llamadas a procedimientos
Sub de propósito general que emulen el proceso de los comandos Salir, Guardar y Guardar como del menú Archivo de Visual Basic.
Para probar este ejemplo, pegue el código en la sección Declaraciones de un
formulario y, después, presione F5.
Una vez que se muestre el formulario, presione ALT+F4
para cerrar el formulario.
Private Sub Form_Unload (Cancel As Integer)
Dim Msg,
Response ' Declara variables.
Msg = "¿Desea guardar los datos antes de
cerrar?"
Response = MsgBox(Msg, vbQuestion +
vbYesNoCancel, "Diálogo Cerrar")
Select Case Response
Case vbCancel ' No se permite cerrar.
Cancel = -1
Msg = "Se ha cancelado el comando."
Case vbYes
' Introduzca código para guardar los
datos aquí.
Msg = "Datos guardados."'
Case vbNo
Msg = "Datos no guardados."
End Select
MsgBox Msg, vbOKOnly, "Confirmación" ' Mostrar mensaje.
End Sub
13.10- QueryUnload
Aplicable a:
Objeto Form y Colección Forms, Objeto
MDIForm
Ocurre antes de que se cierre un formulario
o una aplicación.
Sintaxis
Private Sub Form_QueryUnload(cancelar
As Integer,
modo_descarga As Integer)
Private Sub MDIForm_QueryUnload(cancelar
As Integer,
modo_descarga As Integer)
La sintaxis del evento QueryUnload consta
de las siguientes partes:
Parte Descripción
cancelar
Un entero. Establecer
este argumento a cualquier valor distinto de 0 detiene el evento QueryUnload en
todos los formularios cargados y detiene el cierre del formulario y de la
aplicación.
modo_descarga Un valor o una constante que indica
la causa del evento QueryUnload, tal y como se describe en Valores que se pueden
obtener.
Valores que se pueden obtener
El argumento modo_descarga devuelve
los siguientes valores:
Constante
Valor Descripción
vbFormControlMenu 0 El usuario eligió el comando
Cerrar del menú Control del formulario.
vbFormCode
1 Se invocó la instrucción Unload
desde el código.
VbAppWindows 2 La sesión actual del entorno
operativo Microsoft Windows está inalizando.
vbAppTaskManager 3 El Administrador de tareas de
Microsoft Windows está cerrando la
aplicación.
vbFormMDIForm 4 Un formulario MDI secundario se está
cerrando porque el formulario MDI
también se está
cerrando.
Comentarios
Normalmente este evento se utiliza para
asegurarse de que no hay tareas sin finalizar en los formularios incluidos en
una aplicación antes de que esa aplicación se cierre. Por ejemplo, si un usuario
no ha guardado todavía algunos datos nuevos de cualquier formulario, su
aplicación puede pedir al usuario que los guarde.
Cuando una aplicación se cierra, puede
utilizar los procedimientos de evento QueryUnload o Unload para establecer la
propiedad Cancel a True, deteniendo el proceso de cierre. Sin
embargo, el evento QueryUnload ocurre en todos los formularios antes de que se
descargue ninguno de ellos y el evento Unload ocurre conforme se descarga cada
formulario.
Ejemplo del evento QueryUnload
En este ejemplo, al cerrar un formulario se
consulta al operador si realmente quiere salir o no. También se chequea si está
saliendo del formulario o de toda la aplicación.
' Pegar en la sección Declaraciones de
Form1.
Private Sub Form_QueryUnload (Cancel As Integer, UnloadMode As Integer)
Dim Msg
' Declara la variable.
If UnloadMode > 0 Then
' Si sale de la aplicación.
Msg = "¿Realmente desea salir de la
aplicación?"
Else
' Si sólo se cierra el formulario.
Msg = "¿Realmente desea cerrar el
formulario?"
End If
' Si el usuario hace clic en el botón No,
se detiene QueryUnload.
If MsgBox(Msg,
vbQuestion + vbYesNo, Me.Caption) = vbNo Then Cancel = True
End Sub
13.11- Validate
Aplicable a:
Control Data
Se produce antes de que otro registro se
convierta en el registro actual, antes del método Update (excepto cuando
se guardan los datos con el método UpdateRecord) y antes de una operación
Delete, Unload o Close.
Sintaxis
Private Sub objeto_Validate ([índice As Integer,]
acción As Integer, guardar As Integer)
La sintaxis del evento Validate consta de
las siguientes partes:
Parte Descripción
objeto Una expresión de objeto cuyo
resultado es un objeto de la lista Aplicable a
índice Identifica el control si se
encuentra en una matriz de controles
acción Un entero que indica la operación
que provoca el evento, como se describe en Valores
guardar Una expresión booleana que
especifica si los datos enlazados han cambiado, como se describe en Valores
Valores
Los valores de acción son:
Constante
Valor Descripción
vbDataActionCancel
0 Cancela la operación al salir de Sub
vbDataActionMoveFirst
1 Método MoveFirst
vbDataActionMovePrevious
2 Método MovePrevious
vbDataActionMoveNext
3 Método
MoveNext
vbDataActionMoveLast
4 Método
MoveLast
vbDataActionAddNew
5 Método AddNew
vbDataActionUpdate
6 Operación Update (no
UpdateRecord)
vbDataActionDelete
7 Método Delete
vbDataActionFind
8 Método Find
vbDataActionBookmark
9 Se ha establecido la propiedad
Bookmark
vbDataActionClose
10 El método Close
vbDataActionUnload
11 Se está descargando el formulario
Los valores de guardar son:
Valor Descripción
True Los datos enlazados han cambiado
False Los datos enlazados no han cambiado
Comentarios
El argumento guardar indica
inicialmente si los datos enlazados han cambiado. Este argumento puede ser
False si los datos del búfer de copia han cambiado. Si guardar es
True cuando este evento termina, se invocan los métodos Edit y
UpdateRecord. El método UpdateRecord sólo guarda los datos de
controles enlazados o del búfer de copia en los que la propiedad DataChanged
sea True.
Este evento se produce incluso aunque no se
hayan modificado los datos de los controles enlazados y aunque no existan
controles enlazados. Puede utilizar este evento para cambiar valores y
actualizar datos. También puede decidir guardar los datos o detener cualquier
acción que esté provocando el evento y sustituirla por otra acción diferente.
Puede cambiar el argumento acción
para cambiar una acción por otra. Puede cambiar los diversos métodos Move y el
método AddNew, que se pueden intercambiar libremente (cualquier Move en AddNew, cualquier Move en cualquier otro Move o AddNew en
cualquier Move). Cuando utilice AddNew, puede utilizar MoveNext y
después ejecutar otro AddNew para examinar la propiedad EditMode y
determinar si hay una operación Edit o AddNew en curso. El intento
de sustituir AddNew o una acción Move en cualquier otra acción se pasa
por alto o genera un error interceptable. Si se establece acción a 0, se
puede detener cualquier acción.
Dentro del código de este evento puede
comprobar los datos de cada control enlazado en el que DataChanged sea
True. Después puede establecer DataChanged a False para evitar
guardar dichos datos en la base de datos.
Durante este evento no puede utilizar
ningún método (como MoveNext) en el objeto Recordset subyacente.
Ejemplo de la propiedad DataChanged y del evento Validate
Este ejemplo ilustra una validación de
datos sencilla. En la tabla Authors de la base de datos Biblio.mdb hay dos
campos: Au_ID y Author. Como el valor de Au_ID se utiliza para identificar de
forma única al autor, este valor no se debe cambiar. El ejemplo no permite que
se modifique el campo Au_ID, que está enlazado a Text1.
Private Sub Data1_Validate (Action As Integer, Save As Integer)
If Text1.DataChanged
Then ' Comprueba si los
datos han cambiado.
MsgBox "No puede cambiar el número
de Id."
Text1.DataChanged = False ' No guarda los datos modificados.
End If
...
End Sub
14- Métodos más importantes de los controles estándares.
14.1- AddItem
Aplicable a:
ControlComboBox, ControlListBox
Agrega un elemento a un control ListBox
o ComboBox.
Sintaxis
objeto.AddItem elemento, índice
La sintaxis del método AddItem
consta de las siguientes partes:
Parte
Descripción
objeto
Requerido. Una expresión de
objeto cuyo resultado es un objeto de la lista Aplicable a.
Elemento Requerido. expresión de cadena que
especifica el elemento que se va a agregar al objeto.
índice
Opcional. Entero que especifica
la posición dentro del objeto donde se insertan el elemento o la fila nuevos.
Para el primer elemento de un control ListBox o ComboBox,
índice es 0.
Comentarios
Si se especifica un valor válido para
índice, elemento se sitúa en dicha posición dentro del objeto.
Si se omite índice, elemento se agrega en la posición que le
corresponda dentro del orden apropiado (si la propiedad Sorted es True)
o al final de la lista (si Sorted es False).
Los controles ListBox o ComboBox
que están enlazados a un control Data no aceptan el método AddItem.
Ejemplo del método AddItem
Este ejemplo utiliza el método AddItem
para agregar 100 elementos a un cuadro de lista. Para probar este ejemplo, pegue
el código en la sección Declaraciones de un formulario con un control ListBox
llamado List1, y después presione F5
y haga clic en el formulario.
Private Sub Form_Click ()
Dim Entry,
I, Msg ' Declara
variables.
Msg = "Haga
clic en Aceptar para agregar 100 elementos a su cuadro de lista."
MsgBox Msg ' Muestra el mensaje.
For I = 1 To 100 ' Cuenta de 1 a 100.
Entry = "Entrada " & I ' Crea la entrada.
List1.AddItem Entry ' Agrega la entrada.
Next I
Msg = "Haga clic en Aceptar para quitar una
de cada dos entradas."
MsgBox Msg ' Muestra el mensaje.
For I =
1 To 50
' Determina cómo quitar
List1.RemoveItem I ' cada
elemento
Next I
Msg = "Haga
clic en Aceptar para quitar todos los elementos del cuadro de lista."
MsgBox Msg ' Muestra el mensaje.
List1.Clear ' Limpia el cuadro de lista.
End Sub
14.2- AddNew (Objeto Recordset)
Aplicable a:
Objeto Recordset.
Crea un nuevo registro para un objeto
Recordset de tipo Table o Dynaset.
Sintaxis
recordset.AddNew
El marcador de posición del recordset es una variable de objeto que representa un objeto Recordset que se
puede actualizar al que puede agregar un registro nuevo.
Comentarios
Utilice el método AddNew para crear
y agregar un nuevo registro en el objeto Recordset llamado por el
recordset. Este método establece los campos a los valores predeterminados y
si no se especifican valores predeterminados, establece los campos a Null
(los valores predeterminados especificados pare el Recordset tipo Table).
Después de modificar el nuevo registro,
utilice el método Update para guardar los cambios y agregar el registro
al Recordset. No se producirán cambios en la base de datos hasta que no
se utilice el método Update.
Precaución
Si ejecuta un AddNew y a continuación realiza una operación que desplace
otro registro sin usar Update, los cambios se perderán sin previo aviso.
Además, si cierra el Recordset o finaliza el procedimiento que declara el Recordset o su objeto Database, el nuevo registro y los cambios
realizados se descartarán sin previo aviso.
Si no se ha desplazado hasta el último
registro de su Recordset, los registros agregados a las tablas
subyacentes pueden incluirse, si se colocan más allá del registro activo. Sin
embargo, si agrega un registro a un Recordset, el registro será visible
en el Recordset y se incluirá en la tabla subyacente donde estará visible
para todos los nuevos objetos Recordset.
La posición del nuevo registro depende del
tipo de Recordset:
-
En un objeto Recordset tipo
Dynaset, los registros se insertan al final del conjunto del Recordset,
independientemente de las reglas de clasificación u orden que estuvieran en
vigor cuando se abrió el Recordset.
-
En un objeto Recordset tipo
Table en el que su propiedad Index se haya establecido, los registros se
insertan en el lugar adecuado dentro del orden definido. Si no se ha establecido
la propiedad Index, los nuevos registros se insertarán al final del
Recordset.
Ejemplo de método AddNew
En este ejemplo se agrega un regisro nuevo a la tabla Agenda de la base de
datos Clientes, tomando los datos desde un formulario que contiene 3 cajas de
texto (txtCodigo, txtNombre y txtDireccion) y un botón para agregar los datos
(cmdAgregar)
Private Sub
cmdAgregar_Click ()
Dim wsp as WorkSpace ‘Dimensiono
las variables
Dim Base as Database
Dim Agenda as Recordset
Set wsp = DbEngine.Workspaces(0)
‘Seteo el espacio de trabajo
Set Base = wsp.OpenDatabase (“Clientes.mdb”) ‘Abro
la base de Datos
Set Agenda = BasedeDatos.OpenRecordset(“SELECT * FROM Agenda”)
‘Abro el Recordset
Agenda.AddNew
‘Agrego un registro en blanco
Agenda!Codigo = txtCodigo.Text
‘Asigno los valores de las cajas de texto a los campos
Agenda!Direccion = txtDireccion.Text
Agenda.Nombre = txtNombre.Text
Agenda.Update
Agenda.Close ‘Cierro el Recordset
Base.Close
‘Cierro la base de Datos
Wsp.Close
‘Cierro el espacio de trabajo
End Sub
14.3- CancelUpdate (Objeto Recordset)
Aplicanble a:
Objeto Recordset.
Cancela todas las actualizaciones
pendientes del objeto Recordset.
Sintaxis
recordset.CancelUpdate
tipo
La sintaxis del método CancelUpdate
consta de las siguientes partes.
Parte Descripción
recordset Una variable de objeto que
representa el objeto Recordset en el que se cancelan las actualizaciones
pendientes.
Tipo Opcional. Una constante que indica
el tipo de actualización, como se especifica en Valores (sólo espacios de
trabajo ODBCDirect).
Comentarios
El método CancelUpdate cancela todas
las actualizaciones pendientes a causa de una operación Edit o AddNew.
Por ejemplo, si un usuario llama al método Edit o AddNew sin haber
llamado anteriormente al método Update, CancelUpdate cancelará
todos los cambios efectuados después de llamar a Edit o AddNew.
Ejemplo del método CancelUpdate
Al mismo ejemplo del Evento AddNew,
le agregamos la opción de confirmar o volver para atrás la actualización al
operador, según la respuesta a una caja de mensajes.
Private Sub
cmdAgregar_Click ()
Dim wsp as WorkSpace ‘Dimensiono
las variables
Dim Base as Database
Dim Agenda as Recordset
Set wsp = DbEngine.Workspaces(0)
‘Seteo el espacio de trabajo
Set Base = wsp.OpenDatabase (“Clientes.mdb”) ‘Abro
la base de Datos
Set Agenda = BasedeDatos.OpenRecordset(“SELECT * FROM Agenda”)
‘Abro el Recordset
Agenda.AddNew
‘Agrego un registro en blanco
Agenda!Codigo = txtCodigo.Text
‘Asigno los valores de las cajas de texto a los campos
Agenda!Direccion = txtDireccion.Text
Agenda.Nombre = txtNombre.Text
If MsgBox ("Agrega el nuevo registro”, vbYesNo) = vbYes then
Agenda.Update
Else
Agenda.CancelUpdate
End If
Agenda.Close ‘Cierro el Recordset
Base.Close ‘Cierro
la base de Datos
Wsp.Close
‘Cierro el espacio de trabajo
End Sub
14.4- Clear (Clipboard, Combo Box, List Box)
Aplicable a:
Objeto Control ComboBox, Control ListBox-
Borra el contenido de los controles
ListBox o ComboBox.
Sintaxis
objeto.Clear
El marcador de posición objeto
representa una expresión de objeto cuyo resultado es un objeto de la lista
Aplicable a.
Comentarios
Los controles ListBox o ComboBox
que estén enlazados a un control Data no aceptan el método Clear.
Ejemplo del método Clear
Este ejemplo utiliza el método Clear
para borrar todos los elementos de un cuadro de lista. Para probar este ejemplo,
pegue el código en la sección Declaraciones de un formulario con un control
ListBox llamado List1, y después presione F5
y haga clic en el formulario.
Private Sub Form_Click ()
Dim Entry,
I, Msg ' Declara
variables.
Msg = "Haga
clic en Aceptar para agregar 100 elementos a su cuadro de lista."
MsgBox Msg
' Muestra el mensaje.
For I = 1 To 100
' Cuenta de 1 a 100.
Entry = "Entrada " & I ' Crea la entrada.
List1.AddItem Entry ' Agrega la entrada.
Next I
Msg = "Haga clic en Aceptar para quitar
cualquier otra entrada."
MsgBox Msg ' Muestra el mensaje.
For I = 1 To 50
' Determina cómo
quitar
List1.RemoveItem I
' uno de cada dos
Next I
' elementos.
Msg = "Haga clic en Aceptar para quitar
todos los elementos del cuadro de lista."
MsgBox Msg ' Muestra el mensaje.
List1.Clear ' Limpia el cuadro de lista.
End Sub
14.5- Close (Objetos Database, Recordset o Workspace)
Aplicable a:
Objeto Database, Objeto Recordset, Objeto
Workspace.
Cierra un objeto DAO (Data Access Object).
Sintaxis
objeto.Close
El marcador de posición objeto es
una variable de objeto que representa un objeto Database, Recordset
o Workspace abierto.
Comentarios
Si el objeto Database, Recordset
o Workspace llamado por objeto está cerrado cuando utiliza
Close se produce un error en tiempo de ejecución.
Precaución
Si sale de un procedimiento que declara objetos Database o Recordset
y la base de datos esté cerrada, los cambios no guardados se perderán, todas las
transacciones pendientes se anularán y se anularán todas las modificaciones
pendientes de los datos.
Si intenta cerrar un objeto Connection
o Database mientras hay algún objeto Recordset abierto, estos
objetos Recordset se cerrarán y las actualizaciones o modificaciones
pendientes quedarán anuladas. Si intenta cerrar un objeto Workspace
mientras hay algún objeto Database abierto, los objetos Database
se cerrarán, el cual cerrará sus objetos Recordset.
La utilización del método Close en
un objeto Recordset original o duplicado no afecta al otro objeto
Recordset.
Una alternativa al método Close es
establecer el valor de una variable de objeto a Nothing (Set dbsTemp =
Nothing).
Ejemplo de método Close
Son válidos los ejemplos de los métodos
AddNew y CancelUpdate. (donde se cierran objetos Workspace, Database
y Recordset),
14.6- Cls
Aplicable a:
Objeto Form, Control PictureBox.
Borra los gráficos y el texto generados en
tiempo de ejecución de los controles Form o PictureBox.
Sintaxis
objeto.Cls
El marcador de posición objeto
representa una expresión de objeto cuyo resultado es un objeto de la lista
Aplicable a. Si se omite objeto, se supone que el objeto es el
control Form que tenga el enfoque.
Comentarios
Cls
borra el texto y los gráficos generados en tiempo de ejecución por instrucciones
gráficas y de impresión. Los mapas de bits de fondo definidos mediante la
propiedad Picture y los controles colocados en un Form en tiempo
de diseño no se ven afectados por Cls.
Después de llamar a Cls, las
propiedades CurrentX y CurrentY del objeto se restablecen a
0.
Ejemplo del método Cls
Este ejemplo utiliza el método Cls
para eliminar la información impresa de un formulario. Para probar este ejemplo,
pegue el código en la sección Declaraciones de un formulario, y después presione F5
y haga clic en el formulario.
Private Sub Form_Click ()
Dim Msg
'
Declara variable.
ForeColor = QBColor(15)
' Establece el color de primer plano a blanco.
BackColor = QBColor(1) ' Establece el color de fondo a azul.
Msg = "Esta información se
imprime en el fondo del formulario."
Print Msg '
Imprime el mensaje en el formulario.
Msg = "Haga clic en Aceptar
para borrar la información y el patrón de fondo "
Msg = Msg & "mostrado en el
formulario."
MsgBox Msg ' Muestra
el mensaje.
Cls ' Borra el
fondo del formulario.
End Sub
14.7- CompactDatabase (Objeto DBEngine)
Aplicable a:
Objeto DBEngine
Copia, compacta y ofrece la posibilidad de
cambiar la versión, la secuencia de ordenación y la codificación. (sólo espacio
de trabajo Microsoft Jet).
Sintaxis
DBEngine.CompactDatabase antiguabasededatos, nuevabasededatos, escenario, opciones, contraseña
La sintaxis del método CompactDatabase
tiene los siguientes argumentos:
-Antiguabasededatos: Una String que
identifica una base de datos existente y cerrada. Puede ser una ruta completa y
un nombre de archivo, como "C:\db1.mdb". Si el nombre de archivo tiene una
extensión, deberá especificarla. Si su red lo admite, también puede especificar
una ruta de red, como "\\server1\share1\dir1\db1.mdb".
-nuevabasededatos: Un tipo de datos String
que es la ruta completa de la base de datos compactada que va a crear. También
puede especificar una ruta de acceso de red al igual que con
antiguabasededatos. No puede usar el argumento nuevabasededatos para
especificar el mismo archivo de base de datos que antiguabasededatos.
-Escenario: Opcional. Un tipo de datos Variant que es una expresión de cadena que se utiliza para
especificar la secuencia de ordenación para crear nuevabasededatos, como
se especifica en Opciones. Si omite este argumento, el escenario de la
nuevabasededatos será el mismo que el de la antiguabasededatos.
También puede crear
una contraseña para nuevabasededatos concatenando la cadena de la
contraseña (que comienza con ";pwd=") con una constante del argumento
escenario, como este:
dbLangSpanish & ";pwd=NuevaContraseña"
Si desea utilizar el
mismo escenario como antiguabasededatos (el valor predeterminado),
pero especificar una contraseña nueva, simplemente escriba una contraseña en
escenario:
";pwd=NuevaContraseña"
opciones
Opcional. Un valor entero que indica una o más opciones, según se especifica en
Opciones. Puede combinar opciones sumando las correspondientes constantes.
-Contraseña:
Opcional. Un tipo de datos Variant que es una expresión de cadena que
contiene una contraseña, si la base de datos está protegida con contraseña. La
cadena ";pwd=" debe preceder a la propia contraseña. Si incluye una valor de
contraseña en escenario, este valor se ignora.
Puede utilizar una de las siguientes
constantes en el argumento opciones para especificar si desea o no
codificar la base de datos mientras se compacta.
Constante Descripción
dbEncrypt
Codifica la base de datos durante la compactación.
DbDecrypt
Descodifica la base de datos durante la compactación.
Si omite una constante de codificación o si
incluye a la vez dbDecrypt y dbEncrypt, nuevabasededatos
tendrá la misma codificación que antiguabasededatos.
Puede usar una de las siguientes constantes
en el argumento opciones para especificar la versión del formato de los
datos para la base de datos compactada. Esta constante afecta sólo a la versión
del formato de datos de nuevabasededatos y no afecta a la versión de
ninguno de los objetos definidos por Microsoft Access, como formularios e
informes.
Constante Descripción
dbVersion10
Crea una base de datos que utiliza el motor de base de datos Microsoft Jet
versión 1.0
durante la compactación.
DbVersion11
Crea una base de datos que utiliza el motor de base de datos Microsoft Jet
versión 1.1
durante la compactación.
DbVersion20
Crea una base de datos que utiliza el motor de base de datos Microsoft Jet
versión 2.0
durante la compactación.
DbVersion30
Crea una base de datos que utiliza el motor de base de datos Microsoft Jet
versión 3.0 (compatible con la versión 3.5) durante la compactación.
Sólo puede especificar una constante de
versión. Si omite una constante de versión, nuevabasededatos tendrá la
misma versión que antiguabasededatos. Sólo puede compactar
nuevabasededatos a una versión igual o posterior a la de
antiguabasededatos.
Comentarios
Al cambiar datos de una base de datos, el
archivo de base de datos puede fragmentarse y utilizar más espacio en disco del
necesario. Regularmente, puede usar el método CompactDatabase en la base
de datos para desfragmentar el archivo de base de datos. La base de datos
compactada suele ser más pequeña y ejecutarse con más rapidez. También puede
cambiar la secuencia de ordenación, la codificación o la versión del formato de
datos, mientras copia y compacta la base de datos.
Tiene que cerrar antiguabasededatos
antes de compactarla. En un entorno multiusuario, los demás usuarios no pueden
tener abierta antiguabasededatos mientras usted la compacta. Si
antiguabasededatos no está cerrada o no se encuentra disponible para su uso
exclusivo, se producirá un error.
Puesto que CompactDatabase crea una
copia de la base de datos, deberá disponer de espacio suficiente en disco para
la base de datos original y la duplicada. La operación de compactación fracasará
si no hay suficiente espacio disponible en disco. La base de datos duplicada
nuevabasededatos no tiene por qué estar en el mismo disco que
antiguabasededatos. Después de compactar una base de datos, puede eliminar
el archivo antiguabasededatos y cambiar el nombre del archivo compactado nuevabasededatos por el nombre del archivo original.
El método CompactDatabase copia
todos los datos y valores de permisos de seguridad de la base de datos
especificada en antiguabasededatos a la base de datos especificada en
nuevabasededatos.
Si utiliza el método CompactDatabase
para convertir una base de datos versión 1.x a una versión 2.5 o 3.x,
solamente las aplicaciones que utilizan las versiones de Microsoft Jet 2.5 o 3.x
pueden abrir la base de datos convertida.
Precaución
Debido a que el método CompactDatabase no convertirá objetos Microsoft
Access, no es recomendable utilizar CompactDatabase para convertir una
base de datos que contenga dichos objetos. Para convertir una base de datos que
contenga objetos Microsoft Access, en el menú Herramientas, elija
Utilidades de la base de datos y después haga clic en Convertir base de
datos.
Ejemplo de método CompactDatabase
Este ejemplo utiliza el método
CompactDatabase compactar la base de Datos Clientes.mdb.
Sub CompactDatabaseX()
DBEngine.CompactDatabase "Clientes.mdb",
“Compact.mdb"
End Sub
14.8- Delete (Objeto Recordset)
Aplicable a:
Objeto Recordset.
-
Objetos Recordset: elimina el
registro activo de un objeto Recordset de tipo Dynaset o Table. Para
espacios de trabajo ODBCDirect, el tipo de controlador determina si los objetos Recordset se pueden actualizar y, por tanto, admiten el método Delete.
Sintaxis
recordset.Delete
La sintaxis del método Delete
utiliza los siguientes argumentos.
Argumentos Descripción
recordset
Una variable de objeto que identifica un objeto Recordset de tipo Dynaset
o Table abierto, que contiene el registro que desea eliminar.
Comentarios
Puede utilizar el método Delete para
eliminar un registro activo de un objeto Recordset.
Recordsets
Un objeto Recordset debe contener un
registro activo antes de que utilice el método Delete; en caso contrario
se produce un error en tiempo de ejecución.
En objetos Recordset, Delete
elimina el registro activo y lo hace inaccesible. Aunque no pueda modificarlo o
utilizarlo, el registro eliminado permanecerá activo. Sin embargo, una vez que
se desplace a otro registro no podrá volver a convertir en activo el registro
eliminado. Las referencias subsiguientes a un registro eliminado en un
Recordset no son válidas y producen un error.
Si la tabla base es la tabla principal en
una relación de eliminación de cascada, al eliminar el registro activo también
se eliminarán uno o más registros de una tabla externa.
Nota
Para agregar, modificar o eliminar un registro, debe tener un índice único en el
registro en el origen de datos de base. Si no es así, se producirá un error
"Permiso denegado" en la llamada al método AddNew, Delete o
Edit en un espacio de trabajo Microsoft Jet.
Ejemplo de método Delete
Se necesitan borrar todos los registros de la tabla Agenda
(dentro de la base de datos Clientes) cuyos códigos de Clientes sean menores a
10.
Private Sub
cmdAgregar_Click ()
Dim wsp as WorkSpace ‘Dimensiono
las variables
Dim Base as Database
Dim Agenda as Recordset
Set wsp = DbEngine.Workspaces(0)
‘Seteo el espacio de trabajo
Set Base = wsp.OpenDatabase (“Clientes.mdb”) ‘Abro
la base de Datos
Set Agenda = BasedeDatos.OpenRecordset(“SELECT * FROM Agenda WHERE Agenda.Codigo
< 10”) ‘Abro el Recordset
If Not Agenda.EOF
‘si encontré algún registro
Agenda.MoveFirst
‘me muevo al primer registro
Do While Not Agenda.EOF
‘mientras no sea fin de archivo
Agenda.Delete
‘elimino el registro
Agenda.MoveNext
‘me desplazo al siguiente registro
Loop
End If
Agenda.Close ‘Cierro el Recordset
Base.Close
‘Cierro la base de Datos
Wsp.Close
‘Cierro el espacio de trabajo
End Sub
14.9- Edit (Objeto Recordset)
Aplicable a :
Objeto Recordset.
Copia el registro activo de un objeto
Recordset al búfer de copia para su posterior edición.
Sintaxis
recordset.Edit
El recordset representa el nombre de
un objeto Recordset abierto y que se puede actualizar que contiene el
registro que desea modificar.
Comentarios
Una vez que utiliza el método Edit,
los cambios realizados en los campos del registro activo son copiados al búfer
de copia. Después de realizar los cambios deseados en el registro, utilice el
método Update para guardar los cambios.
El registro activo permanece activo después
de utilizar el método Edit.
Precaución
Si modifica un registro y a continuación pasa a otro registro sin utilizar antes Update, los cambios se perderán sin previo aviso. Además, si cierra
recordset o finaliza el procedimiento que declara el Recordset o el
objeto Database o Connection, el registro modificado se descarta
sin previo aviso.
La utilización de Edit produce un
error bajo las siguientes condiciones:
-
No hay ningún registro activo.
-
El objeto Database o
Recordset se abrió de sólo lectura.
-
No hay campos que se pueden
actualizar en el registro.
-
El objeto Database o
Recordset se abrió para uso en modo exclusivo por otro usuario (espacio de
trabajo Microsoft Jet).
Nota
Para agregar, modificar o eliminar un registro, debe tener un índice único en el
registro en el origen de datos de base. Si no es así, se producirá un error
"Permiso denegado" en la llamada al método AddNew, Delete o
Edit en un espacio de trabajo Microsoft Jet, o se producirá un error
"Argumento no válido" el la llamada al método Update en un espacio de
trabajo ODBCDirect.
Ejemplo de método Edit
Se necesita asignar la zona 1 a todos los registros de la
tabla Agenda (dentro de la base de datos Clientes) cuyos códigos de Clientes
sean menores a 20.
Private Sub
cmdAgregar_Click ()
Dim wsp as WorkSpace ‘Dimensiono
las variables
Dim Base as Database
Dim Agenda as Recordset
Set wsp = DbEngine.Workspaces(0)
‘Seteo el espacio de trabajo
Set Base = wsp.OpenDatabase (“Clientes.mdb”) ‘Abro
la base de Datos
Set Agenda = BasedeDatos.OpenRecordset(“SELECT * FROM Agenda WHERE Agenda.Codigo
< 20”) ‘Abro el Recordset
If Not Agenda.EOF
‘si encontré algún registro
Agenda.MoveFirst
‘me muevo al primer registro
Do While Not Agenda.EOF
‘mientras no sea fin de archivo
Agenda.Edit
‘Edito el
registro
Agenda!Zona = 1
Agenda.Update
Agenda.MoveNext
‘me desplazo al siguiente registro
Loop
End If
Agenda.Close ‘Cierro el Recordset
Base.Close
‘Cierro la base de Datos
Wsp.Close
‘Cierro el espacio de trabajo
End Sub
14.10- Hide
Aplicable a:
Objeto Form.
Oculta un objeto Form pero no lo
descarga.
Sintaxis
objeto.Hide
El marcador de posición objeto
representa una expresión de objeto cuyo resultado es un objeto de la lista
Aplicable a. Si se omite objeto, se supone que objeto es el
formulario que tenga el enfoque.
Comentarios
Cuando se oculta un formulario, se quita de
la pantalla y su propiedad Visible queda establecida a False. Los
controles de un formulario oculto no son accesibles para el usuario, pero están
disponibles para la aplicación de Visual Basic en ejecución y para otros
procesos que se estén comunicando con la aplicación mediante DDE, así como para
los eventos del control Timer.
Cuando se oculta un formulario, el usuario
no puede interactuar con la aplicación hasta que el código del procedimiento de
evento que ha provocado la ocultación del formulario haya terminado de
ejecutarse.
Si el formulario no está cargado cuando se
llama al método Hide, el método Hide carga el formulario pero no
lo presenta.
Ejemplo del método Hide
Este ejemplo utiliza el método Hide
para ocultar un formulario. Para probar este ejemplo, pegue el código en la
sección Declaraciones de un formulario, y después presione F5
y haga clic en el formulario.
Private Sub Form_Click ()
Dim Msg
' Declara variable.
Hide
' Oculta el formulario.
Msg = "Haga clic en Aceptar para que vuelva
a aparecer el formulario."
MsgBox Msg ' Muestra el mensaje.
Show ' Muestra de nuevo el formulario.
End Sub
14.11-MoveFirst - MoveLast - MoveNext – MovePrevious (Objeto Recordset)
Aplicable a:
Objeto Recordset.
Mueven al registro primero, último,
siguiente o anterior de un objeto Recordset y lo convierten en el
registro activo.
Sintaxis
recordset.{MoveFirst | MoveLast [dbRunAsync] | MoveNext | MovePrevious}
El marcador de posición recordset es
una variable de objeto que representa un objeto Recordset abierto.
Comentarios
Precaución
Si modifica el registro activo, utilice el método Update para guardar los
cambios antes de ir a otro registro. Si va a otro registro sin actualizar, los
cambios se perderán sin previo aviso.
Al abrir un Recordset, el primer
registro está activo y la propiedad BOF es False. Si el
Recordset no contiene registros la propiedad BOF es True y no
habrá ningún registro activo.
Si el primer o el último registro está
activo cuando utiliza MoveFirst o MoveLast, el registro activo no
cambia.
Si utiliza MovePrevious cuando el
primer registro está activo, la propiedad BOF es True y no habrá
ningún registro activo. Si vuelve a utilizar MovePrevious se producirá un
error y BOF será True.
Si utiliza MoveNext cuando el último
registro está activo, la propiedad EOF es True y no habrá ningún
registro activo. Si vuelve a utilizar MoveNext se producirá un error y
EOF será True.
Si recordset hace referencia a un
objeto Recordset de tipo Table (sólo espacios de trabajo
Microsoft Jet), el movimiento seguirá el índice activo. Puede establecer
el índice activo utilizando la propiedad Index. Si no establece el índice
activo, el orden de los registros devueltos no estará definido.
Importante
Puede utilizar el método MoveLast para llenar completamente un objeto
Recordset de tipo Dynaset o Snapshot para obtener el número de registros
activos en el Recordset. Sin embargo, si utiliza MoveLast puede
hacer más lentas sus aplicaciones. Sólo debe utilizar MoveLast para
obtener un total de registros si es absolutamente necesario obtener un total
exacto en un Recordset abierto recientemente.
No puede utilizar los métodos MoveFirst, MoveLast y MovePrevious en un Recordset de tipo
Forward-only.
Para mover la posición del registro activo
en un objeto Recordset un número específico de registros hacia adelante o
hacia atrás, utilice el método Move.
Ejemplo de métodos MoveFirst, MoveLast,
MoveNext, MovePrevious
Para un ejemplo de uso
de los métodos MoveFirst y MoveNext, mire el ejemplo del método
Edit.
Se necesita asignar la zona 1 a todos los registros de la
tabla Agenda (dentro de la base de datos Clientes) cuyos códigos de Clientes
sean menores a 20. Es necesario recorrer la tabla de atrás hacia adelante.
Private Sub
cmdAgregar_Click ()
Dim wsp as WorkSpace ‘Dimensiono
las variables
Dim Base as Database
Dim Agenda as Recordset
Set wsp = DbEngine.Workspaces(0)
‘Seteo el espacio de trabajo
Set Base = wsp.OpenDatabase (“Clientes.mdb”) ‘Abro
la base de Datos
Set Agenda = BasedeDatos.OpenRecordset(“SELECT * FROM Agenda WHERE Agenda.Codigo
< 20”) ‘Abro el Recordset
If Not Agenda.EOF
‘si encontré algún registro
Agenda.MoveLast
‘me muevo al último registro
Do While Not Agenda.BOF
‘mientras no sea principio de archivo
Agenda.Edit
‘Edito el registro
Agenda!Zona = 1
Agenda.Update
Agenda.MovePrevious
‘me desplazo al registro anterior
Loop
End If
Agenda.Close ‘Cierro el Recordset
Base.Close
‘Cierro la base de Datos
Wsp.Close
‘Cierro el espacio de trabajo
End Sub
14.12- OpenDatabase (Objeto Workspace)
Aplicable a:
Objeto DBEngine, Objeto Workspace.
Abre una base de datos especificada en un
objeto Workspace y devuelve una referencia al objeto Database que
la representa.
Sintaxis
Set basededatos = espaciodetrabajo.OpenDatabase (nombrebasededatos, opciones, sólolectura, conexión)
La sintaxis del método OpenDatabase
consta de las siguientes partes.
Argumento
Descripción
basededatos
Una variable de objeto que
representa el objeto Database que va a abrir.
espaciodetrabajo
Opcional. Una variable de
objeto que representa el objeto Workspace existente que
contendrá la base de datos. Si no incluye
un valor para espaciodetrabajo,
OpenDatabase utiliza el espacio de
trabajo predeterminado.
Nombrebasededatos Un tipo de
datos String que es el nombre de un archivo de base de datos Microsoft
Jet
existente o el nombre del origen de datos (DSN) de un origen
de datos ODBC
existente.
opciones
Opcional. Un tipo de datos Variant que establece varias opciones para la base de
datos, como se especifica en Valores.
sólolectura
Opcional. Un valor de tipo
de datos Variant (subtipo Boolean) que es True si desea
abrir la base de datos con acceso de sólo
lectura o False (predeterminado) si desea
abrir la base de datos con acceso de
lectura/escritura.
conexión
Opcional. Un tipo de datos Variant (subtipo String) que especifica información
variada sobre la conexión, incluyendo las contraseñas.
Valores
Para los espacios de trabajo Microsoft Jet,
puede utilizar los siguientes valores para el argumento opciones:
Valor Descripción
True Abre la base de datos en modo
exclusivo.
False (Predeterminado) Abre la base de
datos en modo compartido.
Comentarios
Cuando abre una base de datos,
automáticamente se agrega a la colección Databases.
Estas son algunas consideraciones que debe
aplicar cuando utilice nombrebasededatos:
-
Si hace referencia a una base de
datos que ya está abierta para acceso en modo exclusivo por otro usuario, se
produce un error.
-
Si no hace referencia a una base de
datos existente, se produce un error.
El argumento conexión se expresa en
dos partes: el tipo de base de datos, seguido por punto y coma (;) y los
argumentos opcionales. Primero debe proporcionar el tipo de base de datos, como
"ODBC;" o "FoxPro 2.5;". A continuación, os argumentos opcionales sin un orden
concreto, separados por punto y coma. Uno de los parámetros puede ser la
contraseña (si hay alguna asignada). Por ejemplo:
"FoxPro 2.5; pwd=micontraseña"
Para cerrar una base de datos y, de este
modo, quitar el objeto Database de la colección Databases, utilice
el método Close en el objeto .
Ejemplo método OpenDatabase
Es válido el mismo ejemplo utilizado para los métodos MoveFirst, MoveLast,
MoveNext, MovePrevious.
14.13- OpenRecordset (Objeto Database)
Aplicable a:
Objeto Database.
Crea un nuevo objeto Recordset y lo
añade a la colección Recordsets.
Sintaxis
Set variable = objeto.OpenRecordset (origen, tipo, opciones, bloquearmodificaciones)
La sintaxis del método OpenRecordset
consta de las siguientes partes.
Argumento
Descripción
variable
Una variable de objeto que representa el objeto
Recordset que desea abrir.
Objeto
Una variable de objeto que representa un objeto
existente desde el que desea crear
el objeto Recordset nuevo.
Origen
Un tipo de datos String que especifica el
origen de los registros para el nuevo
Recordset. El origen puede
ser un nombre de tabla, un nombre de consulta o una
instrucción SQL que devuelve
registros.
Tipo Opcional. Una constante que indica el tipo de objeto Recordset
a abrir, como se
especifica en Valores.
Opciones
Opcional. Una combinación de constantes que especifican las
características del
objeto Recordset nuevo, como
se especifica en Valores.
Bloquearmodificaciones
Opcional. Una constante que determina el bloqueo para el objeto Recordset,
como se especifica en Valores.
Valores
Puede utilizar una de las siguientes
constantes para el argumento tipo.
Constante
Descripción
dbOpenTable
Abre un objeto Recordset de tipo Table (sólo espacios de
trabajo Microsoft Jet).
dbOpenDynaset
Abre un objeto Recordset de tipo Dynaset (actualizable).
DbOpenSnapshot Abre
un objeto Recordset de tipo Snapshot (sólo lectura)
DbOpenForwardOnly Abre un objeto
Recordset de tipo Forward-only.
Nota
Si abre un objeto Recordset en un espacio de trabajo Microsoft Jet y no
especifica un tipo, el método OpenRecordset crea una objeto Recordset
de tipo Table, si es posible. Si especifica una tabla vinculada o una consulta,
el método OpenRecordset crea un objeto Recordset.de tipo Dynaset.
Puede utilizar una combinación de las
siguientes constantes para el argumento opciones:
-DbAppendOnly:
Permite al usuario anexar registros nuevos al objeto Recordset, pero
impide la modificación o eliminación de registros existentes (sólo objetos
Recordset de tipo Dynaset de Microsoft Jet).
-DbSeeChanges:
Genera un error en tiempo de ejecución si otro usuario está cambiando los datos
que usted está modificando.(Sólo en objetos Recordset de tipo Snapshot de
Microsoft Jet). Esto es útil en aplicaciones donde varios usuarios tiene acceso
de lectura/escritura simultáneo a los mismos datos.
-DbDenyWrite: Previene que otros usuarios
puedan modificar o agregar registros (sólo objetos Recordset de Microsoft
Jet).
-DbDenyRead: Previene que otros usuarios puedan
leer datos de una tabla (sólo objetos Recordset de tipo Table de
Microsoft Jet).
-DbForwardOnly:
Crea un objeto Recordset de tipo Forward-only (sólo objetos Recordset
de tipo Snapshot de Microsoft Jet). Se proporciona sólo para compatibilidad con
versiones anteriores y debe utilizar la constante dbOpenForwardOnly en el
argumento tipo en vez de utilizar esta opción.
-DbReadOnly :
Previene que otros usuarios puedan hacer cambios el objeto Recordset
(sólo Microsoft Jet). La constante dbReadOnly en el argumento
bloquearmodificaciones reemplaza esta opción, la cual se proporciona para
compatibilidad con versiones anteriores.
-dbInconsistent :
Permite actualizaciones inconsistentes (sólo objetos Recordset de tipo
Dynaset de Microsoft Jet).
-DbConsistent :
Permite sólo actualizaciones consistentes (sólo objetos Recordset de tipo
Dynaset de Microsoft Jet).
Nota
Las constantes dbConsistent y dbInconsistent se excluyen
mutuamente y el uso de ambos produce un error. Proporcionar un argumento
bloquearmodificaciones cuando el argumento opciones utiliza la
constante dbReadOnly también produce un error.
Puede utilizar las siguientes constantes
para el argumento bloquearmodificaciones:.
-dbReadOnly: Previene que los usuarios hagan cambios
al Recordset. Puede utilizar dbReadOnly en el argumento
opciones o en el argumento bloquearmodificaciones, pero nunca en
ambos. Si lo utiliza en ambos argumentos, se produce un error en tiempo de
ejecución.
-DbPessimistic:
Utiliza el bloqueo pesimista para determinar cómo se pueden hacer cambios al
objeto Recordset en un entorno multiusuario. La página que contiene el
registro que está modificando está bloqueada mientras utiliza el método Edit
(predeterminado en espacios de trabajo Microsoft Jet).
-DbOptimistic:
Utiliza el bloqueo optimista para determinar cómo se pueden hacer cambios al
objeto Recordset en un entorno multiusuario. La página que contiene el
registro que está modificando está bloqueada mientras se ejecuta el método
Update.
Comentarios
En un espacio de trabajo Microsoft Jet, si objeto hace referencia a un objeto QueryDef o Recordset de
tipo Dynaset o Snapshot o si origen hace referencia a una instrucción SQL
o un TableDef que representa una tabla adjunta, no podrá utilizar
dbOpenTable para el argumento tipo y si lo hace, se producirá un
error interceptable.
Si objeto hace referencia a un
Recordset de tipo Dynaset o Snapshot, el Recordset nuevo es del mismo
tipo objeto. Si objeto hace referencia a un objeto Recordset
de tipo Table, el tipo del objeto nuevo es un objeto Recordset de tipo
Dynaset. No puede abrir objetos Recordset nuevos desde objetos
Recordset de tipo Forward-only.
Utilice la constante dbSeeChanges en
espacio de trabajo Microsoft Jet si desea captar los cambios realizados mientras
dos o más usuarios están modificando o eliminando el mismo registro. Por
ejemplo, si dos usuarios empiezan a modificar el mismo registro, el primer
usuario que ejecute el método Update consigue realizar la operación.
Cuando el segundo usuario ejecute el método Update ocurre un error de
tiempo de ejecución. Del mismo modo, si el segundo usuario intenta utilizar el
método Delete para eliminar un registro y el primer usuario ha cambiado
ya el mismo, se produce un error de tiempo de ejecución.
En general, si al usuario se le presenta
este error mientras está actualizando, su código debe actualizar el contenido de
los campos y leer los valores recientemente modificados. Si se produce el error
durante el proceso de eliminación, el código puede mostrar al usuario los nuevos
datos del registro junto con un mensaje que indica que se han modificado
recientemente los datos. En este momento, el código puede solicitar una
confirmación de que el usuario desea aún eliminar el registro.
Al cerrar un Recordset utilizando el
método Close, se eliminará automáticamente de la colección Recordsets.
Ejemplo del método OpenRecordset
Es válido el mismo ejemplo utilizado para los métodos MoveFirst, MoveLast,
MoveNext, MovePrevious.
14.14- RemoveItem
Aplicable a:
Control ComboBox, Control ListBox.
Quita un elemento de un control ListBox
o ComboBox. No acepta argumentos con nombre.
Sintaxis
objeto.RemoveItem índice
La sintaxis del método RemoveItem
consta de las siguientes partes:
Parte Descripción
objeto Requerido. Una expresión de objeto
cuyo resultado es un objeto de la lista Aplicable a.
índice Requerido. Un entero que especifica
la posición dentro del objeto del elemento o la fila que se va a quitar.
Para los primeros elementos de los controles ListBox o ComboBox, índice es 0.
Comentarios
Los controles ListBox o ComboBox
que están enlazados a un control Data no aceptan el método RemoveItem.
Ejemplo del método RemoveItem
Este ejemplo utiliza el método
RemoveItem para quitar entradas de un cuadro de lista. Para probar este
ejemplo, pegue el código en la sección Declaraciones de un formulario que
contenga un control ListBox llamado List1, y después presione F5 y haga
clic en el formulario.
Private Sub Form_Click ()
Dim Entry, I, Msg
' Declara variables.
Msg = "Haga clic en Aceptar para agregar 100 elementos al cuadro de lista."
MsgBox Msg ' Muestra
el mensaje.
For I = 1 To 100 '
Cuenta de 1 a 100.
Entry =
"Entrada " & I ' Crea la entrada.
List1.AddItem Entry ' Agrega la entrada.
Next I
Msg = "Haga clic en Aceptar
para quitar una de cada dos entradas."
MsgBox Msg ' Muestra
el mensaje.
For I = 1 To 50 '
Determina cómo quitar
List1.RemoveItem I ' uno de cada dos
Next I ' elementos.
Msg = "Haga clic en Aceptar
para quitar todos los elementos del cuadro de lista."
MsgBox Msg ' Muestra
el mensaje.
List1.Clear '
Borra el cuadro de lista.
End Sub
14.15- RepairDatabase (Objeto DBEngine)
Aplicable a:
Objeto DBEngine.
Intenta reparar una base de datos dañada
que accede a base de datos Microsoft Jet.
Sintaxis
DBEngine.RepairDatabase nombrebasededatos
El argumento nombrebasededatos
representa un tipo de datos String que es la ruta de acceso y el nombre
de un archivo de base de datos del motor Microsoft Jet existente. Si se omite la
ruta, sólo se buscará en el directorio activo.
Comentarios
Debe cerrar la base de datos especificada
por nombrebasededatos antes de repararla. En un entorno multiusuario, los
demás usuarios no podrán tener abierto nombrebasededatos mientras usted
la repara. Si no está cerrado nombrebasededatos o no está disponible para
uso exclusivo, se producirá un error.
Este método intenta reparar una base de
datos marcada como posiblemente dañada por una operación de escritura
incompleta. Esto puede ocurrir si una aplicación que utiliza el motor de base de
datos Microsoft Jet termina inesperadamente debido a un corte en el suministro
eléctrico o un problema de hardware. La base de datos no se marcará como
posiblemente dañada si utiliza el método Close o si sale de la aplicación
de una manera normal.
El método RepairDatabase también
intenta validar todas las tablas del sistema y todos los índices. Se descartan
los datos que no se puedan reparar. Si no se puede reparar la base de datos, se
produce un error interceptable.
Cuando intente abrir o compactar una base
de datos dañada, normalmente se producirá un error interceptable. En algunas
situaciones, sin embargo, puede que no se detecte una base de datos dañada y no
se produzca ningún error. Es conveniente ofrecer a los usuarios un método de
ejecutar el método RepairDatabase en su aplicación, si la base de datos
se comporta de manera impredecible.
Algunos tipos de bases de datos se pueden
dañar si un usuario termina una aplicación sin cerrar los objetos Database
o Recordset y el motor de base de datos Microsoft Jet, Microsoft Windows
no tienen la oportunidad de vaciar las memorias de caché de datos. Para evitar
que se dañen las bases de datos, establezca procedimientos para cerrar las
aplicaciones y apagar los sistemas que aseguren que todas las páginas de la
memoria caché están guardadas en la base de datos. En algunos casos, puede que
sean necesarias fuentes de alimentación ininterrumpida para evitar pérdidas de
datos por las fluctuaciones del suministro eléctrico.
Nota
Después de reparar una base de datos, también es conveniente compactar la misma
utilizando el método CompactDatabase para defragmentar el archivo y
recuperar espacio en disco.
Ejemplo del método RepairDatabase
Este ejemplo intenta reparar la base de
datos llamada Neptuno.mdb.
Sub RepairDatabaseX()
Dim errBucle
As Error
If MsgBox("¿Desea
reparar la base de datos Neptuno?", vbYesNo) = vbYes Then
DBEngine.RepairDatabase "Neptuno.mdb"
MsgBox "¡Fin del procedimiento reparar!"
End If
End Sub
14.16- SetFocus
Aplicable a
Control CheckBox, Control ComboBox, Control CommandButton, Objeto Form Controles
HScrollBar y VScrollBar, Control ListBoxControl OptionButton, Control PictureBox,
Control TextBox.
Mueve el enfoque al control o
formulario especificado.
Sintaxis
objeto.SetFocus
El marcador de posición objeto
representa una expresión de objeto que da como resultado un objeto de la
lista Aplicable a.
Comentarios
El objeto debe ser un objeto Form o
un control que pueda recibir el enfoque. Después de invocar el método
SetFocus, cualquier entrada del usuario se dirige al formulario o al control
especificado.
El enfoque sólo se puede mover a un
formulario o un control visible. Como un formulario y los controles de un
formulario no son visibles hasta que el evento Load del formulario ha terminado,
no puede usar en su propio evento Load el método SetFocus para mover el
enfoque al formulario que se está cargando a menos que use primero el método
Show para mostrar el formulario antes de que el procedimiento de evento
Form_Load haya terminado.
Tampoco puede mover el enfoque a un
formulario o un control si su propiedad Enabled es False. Si la
propiedad Enabled se ha establecido a False en tiempo de diseño,
primero debe establecerla a True antes de poder recibir el enfoque
mediante el método SetFocus.
Ejemplo del método SetFocus
Al hacer click en un botón de comando, setea el foco a la
caja de texto txtCodigo
Private Sub cmd1_Click()
TxtCodigo.Setfocus
End Sub
14.17- Show
Aplicable a:
Objeto Form.
Sintaxis
objeto.Show
estilo, formulario_propietario
La sintaxis del método Show consta
de las siguientes partes:
Parte
Descripción
objeto
Opcional.
Una expresión de objeto cuyo resultado es un objeto de la lista
Aplicable a. Si se omite objeto, se
supone que objeto es el formulario asociado con el módulo de formulario activo.
estilo
Opcional. Un entero que determina si el formulario es modal o no modal. Si
estilo es 0, el formulario es no modal; si estilo es 1, el formulario es modal.
formulario_propietario Opcional. Una expresión de cadena
que especifica el componente que "posee" el formulario que se muestra. Para los
formularios estándar de Visual Basic, utilice la palabra clave Me.
Comentarios
Si el formulario especificado no está
cargado cuando se invoca el método Show, Visual Basic lo carga
automáticamente.
Cuando Show presenta un formulario
no modal, continúa con la ejecución del código que haya a continuación. Cuando Show presenta un formulario modal, el código que hay a continuación no se
ejecuta hasta que el formulario se oculta o se descarga.
Cuando Show presenta un formulario
modal, no hay entradas (de teclado o del mouse) excepto sobre los objetos
del formulario modal. El programa debe ocultar o descargar los formularios
modales (normalmente como respuesta a alguna acción del usuario) antes de que
pueda producirse la entrada en otro formulario.
Aunque los demás formularios de la
aplicación están deshabilitados cuando se presenta un formulario modal, los de
las demás aplicaciones no lo están.
El formulario inicial de una aplicación se
muestra automáticamente después de invocar su evento Load.
Ejemplo del método Show
Este ejemplo utiliza el método Show
para mostrar un formulario oculto. Para probar este ejemplo, pegue el código en
la sección Declaraciones de un formulario y después presione F5 y haga clic en
el formulario.
Private Sub Form_Click ()
Dim Msg
' Declara variable.
Hide
' Oculta el formulario.
Msg = "Haga clic en Aceptar
para que vuelva a aparecer el formulario."
MsgBox Msg ' Muestra
el mensaje.
Show ' Muestra de
nuevo el formulario.
End Sub
14.18- Update (Objeto recordset)
Aplicable a
Objeto Recordset.
Guarda el contenido del búfer de copia en
un objeto Recordset de tipo Dynaset o Table especificado.
Sintaxis
recordset.Update
(tipo, obligar )
La sintaxis del método Update tiene
las siguientes partes.
Parte Descripción
Recordset Una variable de objeto que
representa un objeto Recordset abierto que se puede actualizar.
Tipo
Opcional. Una constante que
indica el tipo de actualización, como se especifica en Valores
(sólo espacios de trabajo ODBCDirect).
Obligar
Opcional. Un valor de tipo
Boolean que indica si se pueden o no obligar los cambios en la base
de datos, sin tener en cuenta si los datos base se han cambiado por otro usuario
desde la
llamada al método AddNew, Delete o Edit. Si es True,
los cambios se fuerzan y los cambios
hechos por otros usuarios se sobrescriben. Si es
False (predeterminado), los cambios hechos
por otros usuarios mientras la actualización está pendiente
provocarán que falle la
actualización para aquellos cambios conflictivos.
Comentarios
Utilice Update para guardar el
registro activo y los cambios que haya efectuado en él.
Precaución
Los cambios realizados en el registro activo se perderán si:
-
Utiliza el método Edit o
AddNew y a continuación, pasa a otro registro sin actualizarlo previamente
mediante Update.
-
Utiliza Edit o AddNew
y, a continuación, vuelve a usar Edit o AddNew sin utilizar
previamente Update.
-
Cierra el conjunto de registros a
los que hace referencia recordset sin utilizar primero Update.
-
Cancela la operación Edit
utilizando el método CancelUpdate.
Para modificar un registro, utilice el
método Edit para copiar el contenido del registro activo al búfer de
copia. Si no utiliza Edit en primer lugar, se producirá un error cuando
utilice Update o intente cambiar el valor de un campo.
En un espacio de trabajo Microsoft Jet,
cuando el objeto Recordset de la propiedad LockEdits establecida
como True (bloqueo pesimista) en un entorno multiusuario, el registro
permanecerá bloqueado desde el momento en que se utiliza Edit hasta que
se ejecuta el método Update o se cancele la edición. Si la configuración
de la propiedad LockEdits es False (bloqueo optimista), el
registro se bloquea y se compara con el registro previamente modificado justo
antes de se actualizado en la base de datos. Si ha cambiado el registro desde
que utilizó el método Edit, la operación Update falla.. Para que
la operación Update continúe con los cambios, utilice de nuevo el método Update. Para volver al registro, tal como lo cambió el otro usuario,
actualice el registro activo usando los métodos Move 0.
Nota
Para agregar, modificar o eliminar un registro, debe haber un índice único en el
registro del origen de datos base. Se obtiene no lo hay, se producirá un error
"Permiso denegado" en la llamada al método AddNew, Delete o
Edit en un espacio de trabajo Microsoft Jet, se producirá un error
"Argumento no válido" en la llamada al método Update en un espacio de
trabajo ODBCDirect.
Ejemplo del método Update
Es válido el ejemplo del método AddNew. |