Professional Documents
Culture Documents
CAPTULO 51
ndice de contenido
Y LA ESTRELLA INVITADA... DOCMD!.......................................................................................2
CONVERSACIN ODA AL PASAR............................................................................................2
LLAMAR A LOS FORMULARIOS E INFORMES EN CDIGO...............................................2
CREANDO UNA MINI-BD PARA IR JUGANDO CON EL CDIGO....................................2
DOCMD... PARA ABRIR ALGO................................................................................................3
DOCMD... PARA CERRAR ALGO............................................................................................4
DOCMD PARA SALIR... Y BYE-BYE......................................................................................6
PROFUNDIZANDO: DOCMD CON FORMULARIOS...............................................................7
UN PASEO POR... LOS REGISTROS.......................................................................................7
CMO DESEA EL FORMULARIO? POCO HECHO, AL PUNTO O MUY HECHO?......9
UTILICEMOS UN FILTRO SENCILLO.................................................................................10
Y COMPLIQUEMOS UN POCO EL FILTRO........................................................................11
UNA PUNTUALIZACIN SOBRE LOS FILTROS..........................................................12
Y SIGAMOS EXPLORANDO MANIPULACIONES............................................................12
UN LTIMO EJEMPLO ALGO MS COMPLEJO...............................................................14
PARA FINALIZAR...................................................................................................................15
Vistame en http://siliconproject.com.ar/neckkito/
Aadir una tabla, a la que llamaremos TDatos, con los siguientes campos:
Vistame en http://siliconproject.com.ar/neckkito/
XXX va a ser:
Form
Query
Report
Table
DataAccessPage
Diagram
Function
Module
StoredProcedure
View
Vamos a practicar un poco con nuestra BD. Nos situamos en el formulario FMenu, en vista
diseo, e introducimos cuatro botones de comando, y los llamamos as:
cmdAbreFDatos
cmdAbreTDatos
cmdAbreCDatos
cmdAbreRDatos
Cogemos el primer botn (cmdAbreFDatos) y en el evento Al hacer click generamos el
siguiente cdigo:
Vistame en http://siliconproject.com.ar/neckkito/
End Sub
Ojo! Este simple cdigo nos abre el informe envindolo directamente a la impresora. Ms
adelante veremos cmo podemos manipular la apertura de informes.
cmdCierraFDatos
cmdCierraTDatos
cmdCierraCDatos
Si ahora realizamos el siguiente proceso veremos lo bien que nos funciona: abrimos, a travs
4
Vistame en http://siliconproject.com.ar/neckkito/
Esto podra ser algo incmodo, verdad? Me refiero a tener que ir a seleccionar el formulario
FMenu una vez abierto FDatos para poder cerrarlo con nuestro botn.
Vamos a ver cmo podemos situar el enfoque en el formulario que queramos. La idea es abrir
FDatos pero mantenerlo en segundo plano. Para ello utilizaremos el mtodo SETFOCUS.
Si cogemos el cdigo que tenamos asignado a cmdAbreFDatos podemos realizar una pequea
modificacin, de manera que el cdigo nos quede as:
Vistame en http://siliconproject.com.ar/neckkito/
DoCmd.OpenForm "FDatos"
Me.SetFocus
MsgBox "Ahora el foco pasar a FDatos", vbInformation, "SALTITO"
Forms!FDatos.SetFocus
End Sub
Como podemos ver, hemos utilizado la estructura que ya conocamos, pero hemos aadido el
Me.Name para indicar que cierre el formulario de nombre X, donde X es el nombre del
formulario donde est el cdigo. Por qu lo hacemos as, y no hemos utilizado la estructura
DoCmd.Close acForm FDatos (que tambin nos hubiera funcionado)? Pues las ventajas son
las siguiente:
Vistame en http://siliconproject.com.ar/neckkito/
Fcil, verdad?
Vistame en http://siliconproject.com.ar/neckkito/
Para indicar
a qu registro queremos ir utilizamos la constante de vb de
Access acNewRec
Como podemos ver nuestra segunda lnea de cdigo opera a travs de una constante de vb de
Access, que es acCmdRecordsGoToNew
Igual que en el caso anterior, podemos utilizar las siguientes constantes:
acCmdRecordsGoToFirst para ir al primer registro
acCmdRecordsGoToLast para ir al ltimo registro
acCmdRecordsGoToNext para ir al registro siguiente
acCmdRecordsGoToPrevious para ir al registro anterior
Vamos a practicar un poco lo que hemos aprendido. Yo slo har el ejemplo aqu para dos
botones (aunque en la BD de ejemplo estn todos programados). Os dejo el resto de
programacin para que vosotros practiquis en vuestra BD de pruebas.
Situamos FDatos en vista diseo y aadimos cuatro botones (les podemos poner las imgenes
de las flechitas para identificarlos). Yo los llamar:
cmdPrimero
cmdAnterior
cmdSiguiente
cmdltimo
Recordad que podemos crear uno y hacer copy-paste
Para programar cmdPrimero vamos a asignarle este simple cdigo:
8
Vistame en http://siliconproject.com.ar/neckkito/
Private Sub cmdPrimero_Click()
DoCmd.RunCommand acCmdRecordsGoToFirst
End Sub
CONSTANTE DE VB DE ACCESS
Vista diseo
acDesign
acFormDS
acFormPivotChart
acFormPivotTable
Vista presentacin
acLayout
Vista formulario
acNormal
Vista preliminar
acPreview
Pues con todo lo anterior ya podemos decirle al cdigo qu tipo de vista deseamos cuando
abramos el formulario.
En FMenu vamos a crear un botn de comando (que yo he llamado cmdAbreFDatosHojaDatos)
que nos abrir FDatos en vista Hoja de datos. El cdigo que debemos asignarle es el siguiente:
Vistame en http://siliconproject.com.ar/neckkito/
Y ahora crearemos otro botn, al que llamaremos cmdAbreFDatosGrafDin, y le generaremos el
siguiente cdigo:
Qu tal lo llevamos?
Hemos indicado que la condicin (el campo [Edad]) sea igual a. Todo lo anterior lo
hemos puesto entre comillas.
10
Vistame en http://siliconproject.com.ar/neckkito/
Private Sub cmdAbreFDatosFiltroUsuario_Click()
Dim vEdad As Variant
vEdad = InputBox("Introduzca la edad mxima a filtrar",
"FILTRO EDAD", 0)
'Detectamos si se pulsa cancelar
If StrPtr(vEdad) = 0 Then Exit Sub
'Aplicamos el filtro, abriendo FDatos en modo Hoja de
Datos
DoCmd.OpenForm "FDatos", acFormDS, , "[Edad]<=" &
vEdad
End Sub
Nos acordamos el InputBox? Con este cdigo el valor que introduce el usuario queda
guardado en la variable vEdad, y aplicamos la condicin en la lnea que abre el formulario a
travs de "[Edad]<=" & vEdad
Aunque sea evidente, podramos haber puesto el operador lgico que hubiramosquerido
(mayor que, mayor o igual que, menor que, igual a...)
miFiltro es en realidad una cadena de texto, slo que los valores inferior y superior
vienen dados por las edades que introduzca el usuario.
Ojo con los espacios, pues tambin cuentan. Como veis, hay un espacio antes de AND.
Supongamos que las edades sean 1 y 3. Si no hubiramos puesto ese espacio la cadena de
texto sera: [Edad]>=1AND [Edad]<=3. Y el cdigo hubiera entendido que el valor inferior es
1AND, adems de encontrarse con una expresin que no entiende porque no se dara
cuenta de que hay dos condiciones (falta el AND que las une). Cuidadn con los espacios!
11
Vistame en http://siliconproject.com.ar/neckkito/
En la condicin basta que pongamos el nombre del filtro que hemos creado, que en este
caso es miFiltro.
FILTRO
Numrico
Directo
Booleano
Directo
String
Fecha
Supongamos que queremos filtrar por el campo [Nombre]. Ese campo es de tipo Texto
(String). Cmo debera ser nuestro cdigo?
Si hiciramos el filtro simple, y suponiendo que queremos filtrar por Neckkito (si existiera ese
nombre en TDatos), nuestro cdigo debera quedar as:
DoCmd.OpenForm "FDatos", acFormDS, , [Nombre] = 'Neckkito'
Es decir, el filtro seria 'Neckkito'
Si operamos a travs de variable debemos indicar que existen esas comillas simples. Para ello
escribiramos lo siguiente (la primera lnea est muy espaciada para que podis distinguir bien
las diferentes comillas; la segunda es como quedara normal):
DoCmd.OpenForm "FDatos", acFormDS, , [Nombre] =
'
'
Vistame en http://siliconproject.com.ar/neckkito/
registros. Ello implica que no queremos ni que se puedan aadir registros, ni editar registros ni
eliminar registros. Todas estas acciones tienen una propiedad asignada y, por tanto, son
manipulables a travs de cdigo.
Vamos a crear un botn de comando en FMenu que nos
permitir abrir FDatos con estas caractersticas. El cdigo a
utilizar seria:
Como
Es decir, el ltimo argumento nos permite seleccionar el tipo de apertura para los datos de ese
formulario.
Como puntualizacin a lo anterior si queremos abrir el formulario en modo slo lectura
hubiramos podido utilizar tambin este otro cdigo:
13
Vistame en http://siliconproject.com.ar/neckkito/
Private Sub cmdAbreFDatosConsultaSimple_Click()
'Para abrir como snapshot debemos saber que esa
constante es igual a 2
DoCmd.OpenForm "FDatos", acFormDS
Forms!FDatos.RecordsetType = 2
End Sub
Y si queremos que al abrir el formulario el ciclo de registros sea Todos los registros o
Registro activo? Pues a manipular propiedades:
Vistame en http://siliconproject.com.ar/neckkito/
Si nos fijamos:
En la lnea del DoCmd.OpenForm le hemos dicho, primero, que nos lo abra en vista
diseo (acDesign) y, segundo, que nos lo abra oculto (acHidden)
PARA FINALIZAR...
Con todo lo visto en este captulo tenemos, creo, unas bases importantes para saber cmo
abrir/cerrar objetos de Access y manipular, en concreto los formularios. Insisto en que si
queremos profundizar (deberamos, de hecho) en los diferentes aspectos que hemos tocado
en esta explicacin sera conveniente utilizar la ayuda de Access, que para eso est.
Por ejemplo, si en nuestro VBE escribimos DoCmd.OpenForm y situamos el cursor sobre esas
palabritas mgicas, y a continuacin pulsamos F1, obtendremos algunas explicaciones que os
pueden ayudar a entender algunas cosas mejor, e incluso descubriris cosas nuevas (porque,
lgicamente, yo no puedo explicarlo todo todo ;)
Espero, de todas maneras, haberos podido dar una ayudita para entender estos primeros
momentos con nuestro amiguete DoCmd.
Suerte!
15
Vistame en http://siliconproject.com.ar/neckkito/