You are on page 1of 14

MEN BOTONERA VERTICAL-DOCUMENTOS

CON FICHAS (ACCESS 2007 Y SIGUIENTES)


1
Cul es la idea base de este ejemplo? Pues funcionando
con un Access normal, y con el sistema de documentos
con fichas (lo que implica que hablamos de ersiones
superiores a Access !""#$, amos a tener nuestros
formularios con un men% ertical de botones que nos
permitirn &estionar la aplicaci'n, o al menos nos
permitirn tener presentes las acciones ms comunes en
cada formulario a tra(s de dichos botones)
*e hecho, como podr(is comprobar, la +* de ejemplo est reali,ada con la e-tensi'n accdb)
Cuando hablo de un Access normal me estoy refiriendo a utili,ar Access as. como iene de
manera predeterminada) /i reali,amos modificaciones en la manera de mostrar las fichas o las
pantallas de Access pues))) lamentablemente este ejemplo no nos a a serir, o amos a tener
que hacer modificaciones arias para ajustarlo)
0o debemos perder de ista que en los formularios amos a insertar otros botones
independientemente de los que ten&amos en nuestra botonera men%)
1a os adierto que este es un ejemplo trabajoso, dado que tanto la preparaci'n del sistema
como la aplicaci'n de c'di&os destilan cierta complejidad) /i amos a anali,arlo y2o a recrearlo
pensad que es un ejemplo de &ran time-consuming)
Creo que la idea de lo que queremos conse&uir a tra(s del sistema est clara) 3amos a er
c'mo podemos conse&uirlo)
CREANDO NUESTRA TABLA TDATOS1 y TDATOS2
3amos a crear una tabla, que &uardaremos como 4*atos5) 6sta tabla simplemente la creamos
para poder er el efecto de la botonera) 6n realidad lo %nico que necesitamos es una tabla
donde se ayan a &uardar datos y sobre la que crear un formulario)
7a estructura de esta tabla ser al&o tan simple como esto (para no complicar el ejemplo,
claro$8
A continuaci'n cerramos 4*atos5, copiamos la tabla y la pe&amos como 4*atos!) /ituamos
4*atos! en ista edici'n y le modificamos la estructura as. (i&ualmente mantenemos una
estructura simple$8
5 7a +* de ejemplo os la pod(is bajar aqu.
5
3is.tame en http822nec99ito)siliconproject)com)ar
6l campo :;d0ombre< se ha conse&uido de la si&uiente
manera8 en tipo de datos hemos seleccionado Asistente
para b%squedas y lo hemos confi&urado as.8
*eseo buscar los alores en una tabla
/eleccionamos 4*atos5
/eleccionamos el campo :0ombre<
=rdenamos por :0ombre<, ascendente
=cultamos la columna clae y redimensionamos
*ejamos el nombre de etiqueta que aparece y finali,amos
CREANDO NUESTRO FORMUARIO FBIENVENIDA
Para que el sistema funcione es necesario que al car&ar la +* se arranque primero con un
formulario de bienenida) 0o me pidis por qu( (porque no lo s($, pero si no lo hacemos as. y
arrancamos directamente con >;nicio (formulario que eremos ms adelante$ en al&unos
ordenadores la barra de men% me aparece desconfi&urada, y he sido incapa, de arre&larlo) 7a
%nica soluci'n que se me ha ocurrido es arrancar con un form de bienenida, lo cual tampoco
queda tan feo)
As. pues amos a crearnos un formulario en blanco, que &uardaremos como >+ienenida
!
), y,
como m.nimo, le modificaremos las si&uientes propiedades8
Pesta?a >ormato8
Centrado automtico8 /@
/electores de re&istro8 0=
+otones de nae&aci'n8 0=
+arras de despla,amiento8 0;0AB0A
Cuadro de control8 0=
+ot'n cerrar8 0=
Pesta?a =tras8
6mer&ente8 /@
Codal8 /@
A continuaci'n nos moemos a la Pesta?a 6entos) 6n el eento ;nteralo de cron'metro
escribimos el alor de #""" (# se&undos$, y en el eento Al cron'metro &eneramos el
si&uiente c'di&o
#
8
D
Priate /ub >ormE4imer($
FCerramos el formulario actual
! /i no sab(is confi&urar ese formulario de inicio echad un ista,o a este art.culo)
# Para &enerar c'di&o debemos sacar las propiedades del control Pesta?a 6entos, y nos situamos en la parte blanca a la
derecha del eento que queremos pro&ramar) 3eremos un peque?o bot'n de puntos suspensios) /i hacemos clic9 sobre (l nos
aparecer una entana que nos pedir qu( operaci'n deseamos reali,ar) 7e indicamos que queremos &enerar c'di&o)
!
3is.tame en http822nec99ito)siliconproject)com)ar
*oCmd)Close ac>orm, Ce)0ame
FAbrimos G>+otonesG
*oCmd)=pen>orm G>+otonesG
6nd /ub
D
Con esto, por ahora, ya tenemos nuestro formulario de
bienenida listo) 6identemente le deber(is dar al&o ms de
ale&r.a al dise?o, insertando un te-to o un lo&o, por
ejemplo)
CREANDO NUESTRO FORMULARIO
FINICIO
3amos a crearnos un formulario en blanco, que &uardaremos con el nombre de >;nicio)
Podemos situar en (l botones para reali,ar diferentes acciones) 6so a a &usto del consumidor)
7o que s. es importante, para dar homo&eneidad a la ista del usuario, y para que el efecto
de botonera ertical sea el deseado, es establecer un color de fondo id(ntico para todos los
formularios) Para eso nos situamos en cualquier parte de la secci'n a la que queramos aplicar
color (secci'n detalle, encabe,ado del formulario, etc)$, clic con el bot'n derecho color, y
seleccionamos un color que nos &uste)
/acaremos las propiedades del formulario y confi&uraremos las propiedades necesarias para
que no se ea esa molesta barra ertical a,ulona a la i,quierda, ni se ea tampoco el
nae&ador de re&istros, ni que nos apare,ca actia la (H$ en la esquina superior derecha para
cerrar el formulario) As., en las propiedades, nos amos a la pesta?a >ormato y
/electores de re&istro8 0=
+otones de nae&aci'n8 0=
Cuadro de control8 0=
Como la botonera la tendremos alineada a la i,quierda del formulario podr.amos dise?ar el
formulario (ahora o despu(s de introducir la botonera$ a nuestro &usto) Para que ten&is una
idea de c'mo me ha quedado a m. aqu. ten(is una ima&en8
Como eis, para el ejemplo he ele&ido un color lila de fondo)
CREANDO NUESTRO FORMULARIO FCONSULTAS
3amos a crearnos otro formulario en blanco, que &uardaremos como >Consultas) 7a idea de
este formulario es simplemente tener un formulario donde poder a?adir botones para ejecutar
las consultas o abrir los informes que nos interesen de nuestra +*)
#
3is.tame en http822nec99ito)siliconproject)com)ar
7e quitamos los selectores de re&istro, los botones de nae&aci'n y el cuadro de control, y le
damos el color de fondo que hayamos seleccionado, al i&ual que lo hicimos con >;nicio)
CREANDO NUESTROS FORMULARIOS
FDATOS1 Y FDATOS2
Creamos un nueo formulario basado en 4*atos5 y lo
&uardamos como >*atos5) Iacemos lo mismo con >*atos!,
basado en la tabla 4*atos!) 7os dise?amos a nuestro &usto,
pero teniendo en cuenta que8
6l color de fondo debe ser el que hemos seleccionado para la botonera (en mi caso, el
lila$)
*ebemos dejar un cierto espacio a la i,quierda para que quepa nuestro formulario
>+otones)
CREANDO NUESTRO FORMULARIO FBOTONES
3amos a reali,ar una primera intentona con nuestro formulario que a a serir de botonera)
Creamos un formulario en blanco y lo &uardamos como >+otones)
Ahora amos a reali,ar un trabajo de dise?o puro y duro) /ituamos >+otones en ista dise?o
y redimensionamos la secci'n detalle para que nos quede una especie de rectn&ulo a la
i,quierda, de ancho y alto de manera que nos permita introducir unos botones
potables) 6s decir, una cosa ms o menos as.8
A continuaci'n amos a confi&urar al&unas de las propiedades del formulario)
/acamos sus propiedades pues y nos amos a Pesta?a >ormato
/electores de re&istro8 0=
+otones de nae&aci'n8 0=
+arras de despla,amiento8 /J7= 36K4;CA7
A continuaci'n nos amos a la pesta?a =tras 6mer&ente8 /@
;nsertamos una l.nea a la derecha del rea de la secci'n detalle (la l.nea est en el &rupo de
opci'n controles$) /acamos las propiedades de dicha l.nea y Pesta?a >ormato 6fecto
especial8 AKA+A*=)
>inalmente (por ahora$, situamos el color de la secci'n detalle en el color lila (o el que
nosotros hayamos seleccionado$ que utili,amos en >;nicio)
A continuaci'n reali,amos las si&uientes acciones8
L
3is.tame en http822nec99ito)siliconproject)com)ar
Cerramos >+otones
Abrimos >;nicio en ista dise?o
Abrimos >+otones en ista formulario)
Ajustamos >+otones a la i,quierda de >;nicio, en su parte
superior)
Bna e, ajustado le damos al bot'n Auardar (ima&en del disquette$)
Cerramos >+otones y >;nicio
3amos a oler a abrir >+otones en ista dise?o) /acamos las propiedades del formulario y nos
amos a Pesta?a >ormato 6stilo de los bordes8 0;0AB0=
Auardamos el formulario)
6sto de ajustarlo arriba a la i,quierda no es estrictamente necesario, ya que eremos ms
adelante c'mo hacerlo de manera automtica) /in embar&o, yo lo he hecho as. para tener una
referencia, tanto en ista dise?o como en ista formulario, lo ms apro-imada posible para
saber c'mo nos quedar)
7o que acabamos de conse&uir con lo anterior es lo si&uiente8 abrimos >;nicio en ista
formulario y abrimos tambi(n >+otones en ista formulario8
=9) Iecho esto cerramos todos los formularios y olemos a abrir >+otones en ista dise?o)
Para este ejemplo amos a diidir nuestra botonera para reali,ar dos tipos de acciones8 abrir
y cerrar formularios y trabajar con re&istros)
A?adimos un primer bot'n de comando, que llamaremos cmdAbre>;nicio
L
)
L Para asi&nar un nombre a un control lo que debemos hacer es sacar las propiedades de ese control e irnos a la Pesta?a =tras
0ombre) Ah. escribimos el nombre que queramos)
M
3is.tame en http822nec99ito)siliconproject)com)ar
A?adimos otro bot'n de comando, que &uardaremos como cmdAbre>Consultas)
A?adimos otro bot'n de comando, que
&uardaremos como cmdCerrar
A?adimos otro bot'n de comando, que
&uardaremos como cmdAbre>*atos5
A?adimos otro bot'n de comando, que
&uardaremos como cmdAbre>*atos!
Con esto ya tenemos la primera parte del sistema) /i queremos separar la se&unda
parte incluso f.sicamente podr.amos a?adir una l.nea entre esta tanda de botones y
la si&uiente)
A?adimos otro bot'n de comando, que &uardaremos como cmd0ueo) /ituamos su
propiedad Iabilitado como 0= (Pesta?a *atos Iabilitado$ )
A?adimos otro bot'n de comando, que &uardaremos como cmd6liminar) /ituamos su
propiedad Iabilitado como 0=)
0o a?adir( ms botones para no hacer este ejemplo interminable) Creo que esos dos, para
operar con re&istros, sern suficientemente representatios)
3amos a sacar las propiedades de >+otones y en el eento Al abrir le &eneraremos este
c'di&o8
D
Priate /ub >ormE=pen(Cancel As ;nte&er$
F*eclaramos las ariables
*im /up As 7on&, ;,q As 7on&
FAbrimos >;nicio
*oCmd)=pen>orm G>;nicioG
FCo&emos los alores de la esquina superior i,quierda de >;nicio
/up N >ormsO>;nicio)PindoQ4op
;,q N >ormsO>;nicio)PindoQ7eft
FAjustamos el formulario a la esquina superior i,quierda de >;nicio
Ce)Coe 4op8N/up, 7eft8N;,q
6nd /ub
D
Por qu( lo hacemos as. (abrir el men% botonera antes que >;nicio$? Porque el sistema deber
tener presente qu( formulario es el que est actio en ese momento, porque esa informaci'n
la llearemos a una ariable &lobal (ya eremos c'mo hacemos eso ms adelante$) Al abrir
>;nicio en se&undo lu&ar nos ase&uramos que, efectiamente, sea el formulario que nos quede
actio)
UN MOMENTO PARA PENSAR
Antes de lan,arnos a pro&ramar c'di&os amos a sentarnos un momento a pensar)
Kefle-ionemos sobre las posibles eentualidades que pueden producirse8
Podemos tener abierto s'lo >;nicio y pulsar el bot'n cerrar) 6n este caso pediremos si
se quiere salir de la aplicaci'n)
Podemos tener abierto un formulario cualquiera (menos >;nicio$ y pulsar el bot'n
cerrar) 6n este caso, adems de cerrar, deberemos abrir >;nicio)
R
3is.tame en http822nec99ito)siliconproject)com)ar
Podemos tener abiertos los dos formularios de >*atosH y pulsar cerrar) 6n este caso
s'lo deberemos cerrar el formulario actio)
Para operar con los botones de la fase ! debemos tener
en cuenta cul es el formulario que est actio)
6identemente, si el formulario que tenemos abierto es
>;nicio estos botones no deben estar actios)
A todo esto hay que a?adir que debemos ir controlando qu(
botones de >+otones se habilitan o deshabilitan en funci'n
del formulario que ten&amos abierto)
Como eis, las combinaciones son importantes (y qui,s me deje al&una$) Como siempre, un
buen testeo nos dir si lo estamos haciendo bien o no) 6n principio debemos tener todo lo
anterior en cuenta para ju&ar correctamente con nuestra botonera)
CREANDO NUESTRO MDULO DE CDIGO
3amos a crearnos un nueo m'dulo, que &uardaremos con el nombre de mdl+otones
M
) Ah.
tendremos todos los c'di&os que nos permitirn &estionar el sistema de la botonera)
6n ese m'dulo, en su cabecera, amos a declarar una ariable &lobal y una serie de ariables
priadas que nos an a serir para todos los procedimientos y funciones que amos a utili,ar)
6n definitia, que en lu&ar de declarar las ariables dentro de cada procedimiento o funci'n las
amos a declarar al principio del m'dulo) 6so implica que, en procedimiento o funci'n, s'lo
amos a tener que declarar las ariables locales que necesitemos)
3amos a ir reali,ando el proceso del c'di&o paulatinamente para ir entendiendo cada
operaci'n) 6so representa ir un poco ms lento, pero a efectos peda&'&icos creo que ser ms
claro para quien analice el ejemplo)
6n primer lu&ar declaramos la ariable &lobal de la si&uiente manera8
D
=ption Compare *atabase
=ption 6-plicit
Public formActio As /trin&
D
7a l.nea =ption Compare *atabase nos habr aparecido al crear el m'duloS la l.nea =ption
6-plicit qui, no nos haya aparecido) A efectos de este ejemplo que no e-ista la l.nea =ption
6-plicit no tiene mayor importancia)
1 de d'nde co&er esta ariable &lobal su alor? Pues ser el propio formulario H quien se lo
indique) Para eso8
/ituamos >;nicio en ista dise?o y en el eento de formulario Al actiar escribimos el
si&uiente c'di&o8
D
Priate /ub >ormEActiate($
formActio N Ce)0ame
6nd /ub
D
M Para insertar un m'dulo estndar podemos abrir el editor de 3+ (A74T>55$ y nos amos a Cen% ;nsertar C'dulo
U
3is.tame en http822nec99ito)siliconproject)com)ar
3amos a reali,ar la misma operaci'n, en el mismo eento, para >Consultas, >*atos5 y
>*atos!)
Iasta aqu. todo bien, espero) 3amos a ima&inarnos la
primera de las situaciones posibles8 que el usuario pulse el
bot'n consultas)
7o que tenemos que anali,ar es si >;nicio est actio o no)
Pro&ramaremos eso en nuestro mdl+otones) 7o que
haremos ser8
Anali,ar si est actio) 6so lo haremos a tra(s de una funci'n)
/i est actio lo cerraremos) 6so lo haremos a tra(s de un procedimiento que, como
ar&umento, tendr la propia funci'n)
6l c'di&o que amos a pro&ramar en mdl+otones ser8
D
Public >unction >;nicioCar&ado($ As +oolean
;f CurrentProject)All>orms(G>;nicioG$);s7oaded 4hen
>;nicioCar&ado N 4rue
6lse
>;nicioCar&ado N >alse
6nd ;f
Call cierro>;nicio(>;nicioCar&ado$
6nd >unction
Priate /ub cierro>;nicio(como6sta As +oolean$
;f como6sta N 4rue 4hen *oCmd)Close ac>orm, G>;nicioG
6nd /ub
D
Como emos, la funci'n V>;nicioCar&adoW nos deuele 4KB6 o >A7/6 en funci'n de si >;nicio
est abierto o no) 6l procedimiento Vcierro>;nicio($W lo cierra si est car&ado)
/i ahora situamos >+otones en ista dise?o podremos asi&nar al eento Al hacer clic del
bot'n cmdAbre>Consultas el si&uiente c'di&o8
D
Priate /ub cmdAbre>ConsultasEClic9($
FComprobamos si >;nicio est car&ado para poder cerrarlo
Call >;nicioCar&ado
FAbrimos >Consultas
*oCmd)=pen>orm G>ConsultasG
6nd /ub
D
3amos a er c'mo pro&ramar el bot'n Cerrar de nuestra botonera) 6n principio lo que
debemos hacer es8
Cerrar el formulario actio)
Comprobar si queda al&%n otro formulario actio (adems de >+otones$) /i no quedara
nin&uno debemos abrir de nueo >;nicio)
4odo lo anterior lo amos a hacer usando nuestro m'dulo) 6l c'di&o del bot'n cmdCerrar ser,
simplemente, una llamada a los procedimientos oportunos)
As. pues, en el eento Al hacer clic del bot'n Cerrar &eneramos el si&uiente c'di&o8
X
3is.tame en http822nec99ito)siliconproject)com)ar
D
Priate /ub cmdCerrarEClic9($
Call subCerrar
6nd /ub
D
Ahora, en mdl+otones, amos a8
Crear una ariable a niel de m'dulo
Crear una funci'n que nos cuente los formularios abiertos)
Crear el procedimiento subCerrar)
Para lo primero, simplemente, escribimos justo debajo de la declaraci'n de formActio
D
Priate num>orms As ;nte&er
D
*e manera que tendremos esto8
3amos ahora a pro&ramar una funci'n que nos cuente el n%mero de formularios actios) 6so lo
hacemos porque, como eremos en el si&uiente procedimiento, debemos saber que si s'lo nos
queda un formulario actio ser >+otones) Como no podemos dejarlo solo tendremos que abrir
>;nicio para que la aplicaci'n no nos cojee)
7a funci'n es la si&uiente8
D
Priate >unction fnc0um>orms($ As ;nte&er
*im frm As =bject
>or 6ach frm ;n CurrentProject)All>orms
;f /ysCmd(ac/ysCmdAet=bject/tate, ac>orm, frm)0ame$ N 5 4hen
fnc0um>orms N fnc0um>orms T 5
6nd ;f
0e-t frm
6nd >unction
D
1 ahora s., el procedimiento que nos e-aminar lo que hacer cuando se pulse el bot'n cerrar
ser8
D
Public /ub subCerrar($
FAnali,amos qu( formulario se est cerrando
F/i es >;nicio)))
;f formActio N G>;nicioG 4hen
F)))llamamos al procedimiento cerrarCon>;ncio
Call cerrarCon>;nicio
6-it /ub
6lse
F)))si es otro)))
FCerramos el formulario actio
*oCmd)Close ac>orm, formActio
FKeco&emos el n%mero de formularios actios llamando a la funci'n que
Fnos los cuenta
num>orms N fnc0um>orms($
Y
3is.tame en http822nec99ito)siliconproject)com)ar
F/i s'lo hay uno actio (>+otones$ abrimos >;nicio
;f num>orms N 5 4hen
*oCmd)=pen>orm G>;nicioG
6nd ;f
6nd ;f
6nd /ub
D
>ijaos que el c'di&o contempla las si&uientes situaciones8
/i tenemos abierto s'lo >;nicio pues llama al procedimiento
VcerrarCon>;nicioW
/i tenemos abierto otro formulario nos cuenta los
formularios que tenemos abiertos
/i queda ms de uno simplemente cierra el actio
/i queda s'lo uno (que ser.a >+otones$ nos abre >;nicio
6scribamos el procedimiento VcerrarCon>;nicioW, que lo que har ser aisarnos de que se a
a cerrar la aplicaci'n y se pedir confirmaci'n de ello al usuario) 6l c'di&o ser.a8
D
Priate /ub cerrarCon>;nicio($
*im resp As ;nte&er
resp N Cs&+o-(G6sta acci'n cerrar la aplicaci'n) Continuar?G, E
bZuestion T b1es0o, G/A7;KG$
;f resp N b1es 4hen *oCmd)Zuit
6nd /ub
D
0os queda, para culminar esta primera fase, pro&ramar el bot'n ;nicio) Con la pulsaci'n de
este bot'n se cerrarn todos los formularios que ten&amos actios y se oler a >;nicio)
Con >+otones en ista dise?o &eneramos el si&uiente c'di&o a cmdAbre>;nicio en el eento Al
hacer clic
D
Priate /ub cmdAbre>;nicioEClic9($
Call muestra>;nicio
6nd /ub
D
1 en nuestro m'dulo escribimos el procedimiento al que se llama8
D
Public /ub muestra>;nicio($
*im resp As ;nte&er
*im frm As =bject
FCiramos cuntos formularios estn abiertos
num>orms N fnc0um>orms($
F/i hay s'lo dos formularios abiertos miramos si el que est abierto ya es
F>;nicio) /i lo es no hacemos nada y salimos
;f num>orms N ! 4hen
;f CurrentProject)All>orms(G>;nicioG$);s7oaded 4hen
6-it /ub
6nd ;f
6nd ;f
FAisamos de que se cerrarn todos los formularios y pedimos confirmaci'n
resp N Cs&+o-(G6sta acci'n cerrar todos los formularios abiertos) Continuar?G, E
bZuestion T b1es0o, GA3;/=G$
F/i la respuesta es 0= salimos del proceso
;f resp N b0o 4hen 6-it /ub
F/i la respuesta es /@ cerramos todos los forms abiertos menos >+otones
>or 6ach frm ;n CurrentProject)All>orms
5"
3is.tame en http822nec99ito)siliconproject)com)ar
;f frm)0ame VW G>+otonesG 4hen
;f /ysCmd(ac/ysCmdAet=bject/tate, ac>orm, frm)0ame$ N 5 4hen
*oCmd)Close ac>orm, frm)0ame
6nd ;f
6nd ;f
0e-t frm
FAbrimos >;nicio
*oCmd)=pen>orm G>;nicioG
6nd /ub
D
UN PEQUEO DESCANSO PORQUE AQU
CAMBIA LA COSA
Iasta ahora, en realidad, hemos estado trabajando con formularios en los que no se
introduc.an datos, aunque ya se ha dejado el terreno preparado para aquellos formularios que
s. trabajan con datos)
A partir de ahora amos a trabajar con >*atos5 y >*atos!, lo cual implica que s. a a haber
datos de por en medio) 1 eso, a su e,, si&nifica que amos a tener que actiar los botones
correspondientes)
Para operar con ellos amos a tener que trabajar con cada uno de los formularios de manera
indirecta, dado que no sabremos, a priori, cul es el formulario que a a estar actio y qu(
acciones puede reali,ar el usuario) Adems, como la cosa se complica, amos a tener que
establecer controles de errores para eitar sustos)
7a actiaci'n de los botones para dar de alta un nueo re&istro o eliminar un re&istro a a ser
ordenada desde el propio formulario, y lo mismo ocurrir con la desactiaci'n)
*eberemos controlar tambi(n si, teniendo, por ejemplo, >*atos5 actio, el usuario uele a
pulsar la apertura de ese mismo formulario, para eitar que el c'di&o act%e, ello con el nimo
de no causar nin&%n problema al re&istro que se est( manipulando en ese momento)
Cs o menos con estas ideas en mente amos a er c'mo podemos crear el sistema que nos
interesa)
FASE 2: FORMULARIOS CON REGISTROS
3amos a situar >*atos5 en ista dise?o y amos a editar el c'di&o del eento Al actiar) 7o
modificaremos para que nos quede de la si&uiente manera8
D
Priate /ub >ormEActiate($
formActio N Ce)0ame
Pith >ormsO>+otones
)cmd0ueo)6nabled N 4rue
)cmd6liminar)6nabled N 4rue
6nd Pith
6nd /ub
D
1a tenemos la actiaci'n de los botones) Ahora amos a desactiarlos) Para eso nos amos al
eento de formulario Al cerrar y &eneramos el si&uiente c'di&o8
D
Priate /ub >ormEClose($
Pith >ormsO>+otones
55
3is.tame en http822nec99ito)siliconproject)com)ar
)cmd0ueo)6nabled N >alse
)cmd6liminar)6nabled N >alse
6nd Pith
6nd /ub
D
Iacemos lo mismo, en los mismos eentos, con >*atos!)
3amos a por la apertura de los formularios) /ituados en
>+otones en ista dise?o sacamos las propiedades del
bot'n cmdAbre>*atos5 y &eneramos el si&uiente c'di&o en
el eento Al hacer clic8
D
Priate /ub cmdAbre>*atos5EClic9($
Call subAbre>*atos5
6nd /ub
D
Ahora, en el bot'n cmdAbre>*atos! y en el mismo eento, &eneramos el si&uiente c'di&o8
D
Priate /ub cmdAbre>*atos!EClic9($
Call subAbre>*atos!
6nd /ub
D
7'&icamente amos a tener que irnos a nuestro m'dulo y pro&ramar estos dos
procedimientos) /ern los si&uientes8
D
Public /ub subAbre>*atos5($
FCerramos >;nicio si estuiera car&ado
Call >;nicioCar&ado
FComprobamos si >*atos5 ya est abierto) /i lo est lo actiamos
;f CurrentProject)All>orms(G>*atos5G$);s7oaded 4hen
>ormsO>*atos5)/et>ocus
6-it /ub
6nd ;f
F/i no est abierto lo abrimos
*oCmd)=pen>orm G>*atos5G
6nd /ub
Public /ub subAbre>*atos!($
FCerramos >;nicio si estuiera car&ado
Call >;nicioCar&ado
FComprobamos si >*atos5 ya est abierto) /i lo est lo actiamos
;f CurrentProject)All>orms(G>*atos!G$);s7oaded 4hen
>ormsO>*atos!)/et>ocus
6-it /ub
6nd ;f
F/i no est abierto lo abrimos
*oCmd)=pen>orm G>*atos!G
6nd /ub
D
Como emos las acciones que se reali,an son tres
Comprobamos si >;nicio est car&ado) /i lo est lo cerramos
Comprobamos que el formulario que abrimos no est abierto ya) /i lo esta situamos en
enfoque en (l)
/i no est abierto lo abrimos)
5!
3is.tame en http822nec99ito)siliconproject)com)ar
3amos a por nuestro bot'n de dar de alta un nueo re&istro) /acamos sus propiedades y
&eneramos el si&uiente c'di&o8
D
Priate /ub cmd0ueoEClic9($
Call nueoKe&istro
6nd /ub
D
1 nos olemos a nuestro m'dulo y creamos el si&uiente
procedimiento8
D
Public /ub nueoKe&istro($
*oCmd)Ao4oKecord ac>orm, formActio, ac0eQKec
*oCmd)=pen>orm formActio
6nd /ub
D
A?adimos la %ltima l.nea (*oCmd)=pen>orm formActio$ para que el enfoque nos uela al
formulario que tenemos actio y para el cual hemos creado el nueo re&istro)
3amos a pro&ramar el %ltimo bot'n, que es el de eliminar re&istro) 7e &eneramos el si&uiente
c'di&o8
D
Priate /ub cmd6liminarEClic9($
Call eliminoKe&istro
6nd /ub
D
1 si&uiendo la t'nica habitual olemos a nuestro m'dulo y &eneramos el si&uiente c'di&o8
D
Public /ub eliminoKe&istro($
=n 6rror Ao4o solEerr
*oCmd)=pen>orm formActio
*oCmd)KunCommand acCmd*eleteKecord
6-it /ub
solEerr8
;f 6rr)0umber N !"LR 4hen
Kesume 0e-t
6nd ;f
6nd /ub
D
Por el mismo motio apuntado, abrimos el formActio para situarle el enfoque, lo que permitir
que se pueda producir el borrado del re&istro a tra(s del *oCmd)KunCommand)
6n este caso s. establecemos un control de errores que lo que hace es que cuando no se pueda
borrar un re&istro nos salta a la si&uiente instrucci'n, que es 6-it /ub) *e esta manera
obiamos el error de 0o se puede borrar el re&istro ahora)
Y QU PASA SI QUEREMOS VER UN INFORME!
6l hecho de que nuestra botonera sea un formulario emer&ente tiene sus pros y sus contras)
6llo nos obli&a a trabajar diferente si queremos er un informe)
/i trabajramos de manera normal, al hacer una ista preia de un informe, el formulario
5#
3is.tame en http822nec99ito)siliconproject)com)ar
>+otones nos quedar.a encima, lo que queda muy feo)
3eamos c'mo tratar entonces los informes)
3amos a crearnos un informe sobre la tabla 4*atos!, y lo
&uardaremos como K*atos!) Para lan,arlo aproecharemos
el formulario >Consultas) Ah. nos creamos un bot'n de
comando, que llamaremos cmdAbreK*atos!, y le
&eneraremos el si&uiente c'di&o8
D
Priate /ub cmdAbreK*atos!EClic9($
*oCmd)=penKeport GK*atos!G, ac3ieQPreieQ
6nd /ub
D
Iasta aqu. nada e-traordinario) 7os cambios los haremos en el propio informe) As., situamos
K*atos! en ista dise?o, sacamos sus propiedades y nos amos a Pesta?a =tras 6mer&ente8
/@)
*e manera opcional podr.amos hacer que el formulario se mostrara ma-imi,ado) Para ello
amos a Pesta?a 6entos Al abrir, y ah. &eneramos el si&uiente c'di&o8
D
Priate /ub KeportE=pen(Cancel As ;nte&er$
*oCmd)Ca-imi,e
6nd /ub
D
Con esto nuestro informe nos quedar por encima de la botonera, con lo que la ista ser,
de cara al usuario, una ista no e-tra?a)
PARA FINALI"AR EL E#EMPLO
1 con esto, salo que se me haya colado al&%n bu& que no haya considerado, podemos dar el
ejemplo por terminado)
Creo que ms o menos habr(is podido er la mecnica de funcionamiento, ya sea con
formularios independientes como con formularios que siran para trabajar con re&istros)
*ado que el ejemplo es complicado, y como os comentaba unas l.neas ms arriba, podr.a
darse el caso de que al&o fallara) /i es as. os rue&o que me lo comuniqu(is (por ejemplo, a
tra(s del libro de isitas$ e intentar( ponerle soluci'n y rectificar el ejemplo) *e antemano
muchas &racias por uestra ayuda)
6spero que el ejemplo os sea de utilidad)
Bn saludo, y)))
[suerteO
5L
3is.tame en http822nec99ito)siliconproject)com)ar

You might also like