Vous êtes sur la page 1sur 11

AGENDA AVISADORA

1
A travs de este ejemplo veremos cmo Access puede
convertirse en una agenda de tareas que nos avise de la
proximidad de una tarea a su vencimiento en funcin del
periodo de preaviso que le hayamos establecido.
En principio la mecnica de funcionamiento sera la
siguiente introducimos las tareas en la !"# asignndoles
un vencimiento y un periodo de preaviso. Abrimos la !" $en
otro momento% y Access nos avisar de que hay tareas que
estn ya vencidas $si las hay%# mostrndonos una lista de
dichas tareas. Adems podremos ver tres tipologas de
tareas ms las tareas atrasadas# las tareas sin vencimiento
y las tareas completadas. &inalmente podremos seleccionar
un da y ver qu tareas deben reali'arse en ese da en
concreto.
(a )gracia* del ejemplo# adems del aviso en s# es que slo vamos a utili'ar dos formularios
para todo esto... +tachn,
-omo ya tenemos una idea clara $espero% de lo que nos har la !" sin ms pongmonos
manos a la obra.
CREANDO NUESTRAS TABLAS
.amos a crearnos una tabla# que llamaremos /Eventos# que tendr la siguiente estructura
El campo 0&echEvento1 tiene# como valor predeterminado# la siguiente expresin
&echa$%
El campo 0(apso2reaviso1# aunque ser modificable por el usuario# lo he establecido en quince
das de preaviso. Evidentemente nosotros podemos establecer# por defecto# el tiempo que
queramos simplemente indicando otro valor predeterminado.
CREANDO NUESTROS FORMULARIOS DE INICIO Y DE MEN
.amos a crearnos un formulario en blanco que guardaremos con el nombre de &3enu. Este
4 (a !" de ejemplo os la podis bajar aqu
4
.istame en http55nec66ito.siliconproject.com.ar
formulario nos har de )panel de control* para que el usuario tenga acceso a todas las
opciones de la aplicacin.
2or ahora dejamos el formulario as creado. .olveremos a l
un poco ms tarde.
Ahora nos creamos otro formulario en blanco# que
guardaremos como &7nicio. 8o hace falta que hagamos# por
ahora# ninguna operacin con el formulario. 9implemente
tened en cuenta que debemos configurar Access para que#
al abrirse# nos cargue este formulario $si no sabemos cmo
se hace esto podis echar un vista'o a este artculo%.
CREANDO NUESTRO MOLDE DE FORMULARIO Y, A
CONTINUACIN, NUESTRO FORMULARIO
.amos a construir una consulta que nos va a hacer de )molde* para un formulario. Esta
consulta# a pesar de que la guardaremos ahora# con posterioridad la vamos a eliminar $si
queremos# claro%.
(a consulta es tan simple como lo siguiente
(a podemos guardar por el nombre por defecto# esto es# -onsulta4.
.amos a crearnos un formulario sobre esta consulta# que guardaremos como &7nfo# pero# ojo#
lo haremos en forma de formularios continuos $varios elementos%.
.amos# en el encabe'ado del formulario# a insertar un botn de comando# que llamaremos
cmd-errar
:
.
En el evento )Al hacer clic6* de dicho botn vamos a generar el siguiente cdigo
;

: 2ara asignar un nombre a un control lo que debemos hacer es sacar las propiedades de ese control e irnos a la 2esta<a =tras
8ombre. Ah escribimos el nombre que queramos.
; 2ara generar cdigo debemos sacar las propiedades del control 2esta<a Eventos# y nos situamos en la parte )blanca* a la
derecha del evento que queremos programar. .eremos un peque<o botn de puntos suspensivos. 9i hacemos clic6 sobre l nos
aparecer una ventana que nos pedir qu operacin deseamos reali'ar. (e indicamos que queremos )generar cdigo*.
:
.istame en http55nec66ito.siliconproject.com.ar
>
2rivate 9ub cmd-errar?-lic6$%
@-erramos el formulario actual
"o-md.-lose ac&orm# 3e.8ame
@Abrimos &3enu
"o-md.=pen&orm A&3enuA
End 9ub
>
2or ejemplo# a m me ha quedado as
-on esto# si queremos# ya podemos borrar nuestra -onsulta4 $si queremos%.
Ahora vamos a generar unos cdigos que nos permitirn )controlar* las posibles acciones
errneas del usuario. Estos cdigos despus los vamos a reutili'ar en el formulario que nos
permitir dar de alta los eventos# por lo que no os )asustis* al ver tanto cdigo# pues van a
ser prcticamente los mismos.
En primer lugar vamos a controlar la fecha de vencimiento. 2ara ello seleccionamos el campo
0&ech.to1 y le generamos# en el evento despus de actuali'ar# el siguiente cdigo
>
2rivate 9ub &ech.to?AfterBpdate$%
@"eclaramos las variables
"im v&Ahora As "ate# v&. As .ariant
"im v(ap As (ong
@-ogemos el valor de la fecha actual
v&Ahora C "ate
@-ogemos el valor de la fecha de vencimiento
v&. C 3e.&ech.to..alue
@-ogemos el valor del lapso de preaviso
v(ap C 3e.(apso2reaviso..alue
@9i 0&ech.to1 est vaca avisamos y obligamos a su rellenado
7f 7s8ull$v&.% /hen
3sg!ox A(a fecha de vencimiento no puede quedar en blancoA# vbExclamation# AEDD=DA
3e.(apso2reaviso.9et&ocus
3e.&ech.to.9et&ocus
Exit 9ub
End 7f
@9i 0&ech.to1 es menor que la fecha actual avisamos y borramos el valor introducido
7f v&Ahora E v&. /hen
3sg!ox AEl vencimiento no puede ser anterior a la fecha actualA# vbExclamation# AEDD=DA
3e.&ech.to..alue C 8ull
3e.(apso2reaviso.9et&ocus
3e.&ech.to.9et&ocus
Exit 9ub
End 7f
@9i 0&ech.to1 es inferior a 4F das respecto de 0&echEvento1 situamos el lapso de preaviso en cero das
7f v&. G v&Ahora H v(ap /hen
3sg!ox AEl vencimiento es inferior a A I v(ap I A das. El tiempo de preaviso se establecer en cero dasA# ?
vbExclamation# AA.79=A
3e.(apso2reaviso..alue C J
End 7f
;
.istame en http55nec66ito.siliconproject.com.ar
3e.(apso2reaviso.9et&ocus
End 9ub
>
En segundo lugar vamos a controlar que el lapso de
preaviso sea correcto. 2ara ello seleccionamos el campo
0(apso2reaviso1 y en el evento )"espus de actuali'ar*
generamos el siguiente cdigo
>
2rivate 9ub (apso2reaviso?AfterBpdate$%
@"eclaramos las variables
"im v(ap As .ariant
"im v&Ahora As "ate# v&. As "ate
@-ogemos la fecha actual
v&Ahora C "ate
@-ogemos el valor del lapso
v(ap C 3e.(apso2reaviso..alue
@-ogemos la fecha de vencimiento
v&. C 3e.&ech.to..alue
@9i el preaviso est vaco volvemos a asignar cero das
7f 7s8ull$v(ap% /hen 3e.(apso2reaviso..alue C J
@9i establecemos un preaviso imposible avisamos y situamos el preaviso en cero das
7f v&. G v&Ahora H v(ap /hen
3sg!ox AEl lapso de preaviso no puede ser de A I v(ap I A das. 2or favor# revseloA# ?
vb7nformation# AA.79=A
3e.(apso2reaviso..alue C J
Exit 9ub
End 7f
End 9ub
>
&inalmente vamos a controlar si la tarea es indefinida o no. 2ara ello sacamos las propiedades
del campo 07ndefinida1 y en el evento )"espus de actuali'ar* le generamos el siguiente
cdigo
>
2rivate 9ub 7ndefinida?AfterBpdate$%
@"eclaramos las variables
"im v7ndef As !oolean
"im resp As 7nteger
@3iramos si se ha marcado el chec6
v7ndef C 3e.7ndefinida..alue
@9i se ha marcado avisamos que fecha vencimiento# si la hay# se borrar y pedimos confirmacin
7f v7ndef C /rue /hen
7f 8ot 7s8ull$3e.&ech.to..alue% /hen
resp C 3sg!ox$A9i la tarea es indefinida se eliminar la fecha de vencimiento. K-orrectoLA# ?
vbMuestion N vbOes8o# A-=8&7D3A-7P8A%
7f resp C vb8o /hen @9i la respuesta es no
3e.7ndefinida..alue C &alse @Destituimos el valor del chec6
Else @9i la respuesta es s
3e.&ech.to..alue C 8ull
End 7f
End 7f
Else @9i lo que se hace es desmarcar el chec6
7f 7s8ull$3e.&ech.to..alue% /hen @9i no hay fecha de vencimiento recordamos que debe haberla
3sg!ox ADecuerde que debe indicar una fecha de vencimientoA# vb7nformation# AA.79=A
3e.&ech.to.9et&ocus
End 7f
End 7f
End 9ub
>
O listo. 8o os preocupis ahora por el tema de )+pero si no existe la consulta que da origen a
Q
.istame en http55nec66ito.siliconproject.com.ar
los datos,* $porque# en teora# la hemos borrado%. Eso lo arreglaremos un poco ms adelante.
CREANDO NUESTRO FORMULARIO
FTAREAS
2ara dar de alta las nuevas tareas vamos a crearnos un
formulario )normal* basado en la tabla /Eventos. Bna ve'
creado reali'aremos las siguientes )manipulaciones*
4.G Eliminamos el campo 07d1
:.G 9acamos las propiedades del campo 0&echEvento1 y nos vamos a 2esta<a "atos
Rabilitado y situamos su propiedad en 8=.
Este campo simplemente nos recoger la fecha en que hemos dado de alta la tarea.
;.G En el evento )"espus de actuali'ar* del campo 0&ech.to1 le creamos el mismo cdigo que
hemos creado en &7nfo para el mismo campo $el procedimiento H2rivate 9ub
&ech.to?AfterBpdate$%E%
Q.G En el evento )"espus de actuali'ar* del campo 0(apso2reaviso1 le creamos el mismo
cdigo que hemos creado en &7nfo para ese campo $el procedimiento H2rivate 9ub
(apso2reaviso?AfterBpdate$%E%
F.G En el evento )"espus de actuali'ar* del campo 07ndefinida1 le creamos el mismo cdigo
que hemos creado en &7nfo para el campo del mismo nombre $el procedimiento H2rivate 9ub
7ndefinida?AfterBpdate$%E%
S.G En la cabecera del formulario insertaremos un botn de comando# que llamaremos
cmd-errar# que tendr el siguiente cdigo en el evento )Al hacer clic6*
>
2rivate 9ub cmd-errar?-lic6$%
"o-md.-lose ac&orm# 3e.8ame
"o-md.=pen&orm A&3enuA
End 9ub
>
O asunto finiquitado.
CONFIGURANDO NUESTRO FORMULARIO FINICIO, QUE
HAR ALGO MS QUE DARNOS LA BIENVENIDA
8uestro formulario de inicio va a reali'ar una )operacin secreta* de la que el usuario no se va
a dar cuenta# pero que va a aportarnos una informacin importante si hay o no tareas con
lapso de preaviso.
2or ejemplo# yo he hecho una cosa as
F
.istame en http55nec66ito.siliconproject.com.ar
2ara ello vamos a situar &7nicio en vista dise<o# sacaremos las propiedades del formulario y
nos vamos a 2esta<a =tras# y situamos en 9 las propiedades )Emergente* y )3odal*
Ahora nos vamos a 2esta<a Eventos 7ntervalo de cronmetro# y le escribimos ah el valor
:JJJ.
/ened en cuenta que 4JJJ C 4 segundoT lgicamente# :JJJ son dos segundos. 9i es
demasiado tiempo lo podemos bajar# o si es demasiado poco y queremos# por ejemplo# S
segundos# pues escribiramos SJJJ $+eso se hara eterno,%. 9lo tened en cuenta que si el
lapso es muy corto no os va a dar tiempo a )cortar* el cdigo# y eso puede ser bastante
molesto... je# je...
En esa misma pesta<a nos vamos al evento )Al cronmetro* y le generamos el siguiente
cdigo
>
2rivate 9ub &orm?/imer$%
-all origen&7nfo$3e.8ame# 4# /rue%
End 9ub
>
KMu hace este cdigoL 2ues como vamos a emplear un slo formulario tambin vamos a
)economi'ar* en cdigo. .eremos cmo nos construiremos# a continuacin# un mdulo con un
procedimiento llamado origen&7nfo# donde# como argumentos# le pasaremos el nombre del
formulario $3e.8ame% y un )identificador propio* $es decir# que nos hemos inventado nosotros
mismos%# que nos indicar el tipo de consulta que queremos hacer.
En este caso# el 4 ser la consulta referida a las tareas ya vencidas o que ya nos caen dentro
del lapso de preaviso.
-omo vamos a necesitar saber si el cdigo es llamado desde &7nicio o desde &3enu le pasamos
el tercer argumento $que veremos que es opcional en el mdulo%# dicindole que es )true*# lo
que implica que el cdigo es llamado desde &7nicio.
CREANDO NUESTRO MDULO
.amos a crearnos un mdulo para que nos haga )todo el trabajo* de construccin de
consultas# en funcin de los parmetros que le pasemos.
El cdigo que vamos a generar a continuacin requiere el registro de la librera )3icrosoft "A=
S
.istame en http55nec66ito.siliconproject.com.ar
;.S =bject (ibrary* $o mdulo equivalente%# si no la tuviramos registrada
Q
.
.eamos cmo construimos el cdigo $que est comentado% y despus haremos algunos
comentarios
>
2ublic 9ub origen&7nfo$el&orm As 9tring# num-onsulta As !yte# ?
=ptional es&7nicio As !oolean C &alse# =ptional !y.al la&echa As "ate%
@8ec66ito GGG 4S5J:54;
@Dequiere registro de la librera A3icrosoft "A= ;.S =bject (ibraryA o
@mdulo equivalente
@"eclaramos las variables
"im v(imite As .ariant
"im mi9ql As 9tring
"im resp As 7nteger
"im rst As "A=.Decordset
@-reamos el inicio de la consulta
mi9ql C A9E(E-/ /Eventos.&ech.to# /Eventos.(apso2reaviso#A ?
I A /Eventos.7ndefinida# /Eventos.-ompletada#A
9elect -ase num-onsulta
-ase 4
@Acabamos de construir la 9M( con las tareas no completadas
@y sobre las que ya se haya entrado en periodo de preaviso.
mi9ql C mi9ql ?
I A /Eventos.=bs# 0&ech.to1G0(apso2reaviso1 A9 &(imite &D=3 /EventosA ?
I A UREDE /Eventos.-ompletadaC&A(9E A8"A ?
I A $0&ech.to1G0(apso2reaviso1%HC"ate$%A
-ase :
@Acabamos de construir la 9M( con las tareas no completadas
@y sin vencimiento
mi9ql C mi9ql ?
I A /Eventos.=bs &D=3 /Eventos UREDE /Eventos.-ompletadaC&A(9E A8"A ?
I A /Eventos.7ndefinidaC/DBEA
-ase ;
@Acabamos de construir la 9M( con las tareas completadas
mi9ql C mi9ql ?
I A /Eventos.=bs &D=3 /Eventos UREDE /Eventos.-ompletadaC/DBEA
-ase Q
@Acabamos de construir la 9M( para las tareas del da seleccionado
@que no estn finali'adas
mi9ql C mi9ql ?
I A /Eventos.=bs &D=3 /Eventos UREDE /Eventos.-ompletadaC&A(9E A8"A ?
I A /Eventos.&ech.toCVA I &ormat$la&echa# Amm5dd5yyA% I AVA
End 9elect
@-reamos el recorset sobre la 9M(
9et rst C -urrent"b.=penDecordset$mi9ql%
7f es&7nicio C /rue /hen @9i la llamada viene de &7nicio...
@9i la 9M( no devuelve registros
7f rst.Decord-ount C J /hen
@-erramos el formulario actual y abrimos &3enu
"o-md.-lose ac&orm# el&orm
"o-md.=pen&orm A&3enuA
Wo/o 9alida
@9i hay registros pedimos al usuario si quiere ver esos registros o no
Else
resp C 3sg!ox$ARay tareas vencidas o con periodo de preaviso cumplido. K"esea verlasLA# ?
vbMuestion N vbOes8o# AA/E8-7P8,A%
7f resp C vb8o /hen @9i no quiere verlos cerramos el formulario actual y abrimos &3enu
Q 2ara registrar una referencia debemos irnos# en el editor de .!# a 3enX Rerramientas Deferencias... 9e nos abrir una
ventana mostrndonos todas las referencias disponibles. !uscamos la que nos interese# marcamos su chec6 y aceptamos.
Y
.istame en http55nec66ito.siliconproject.com.ar
"o-md.-lose ac&orm# el&orm
"o-md.=pen&orm A&3enuA
Wo/o 9alida
End 7f
End 7f
End 7f
@Abrimos &7nfo en vista dise<o y oculto
"o-md.=pen&orm A&7nfoA# ac"esign# # # # acRidden
@(e indicamos que su origen de datos es nuestra 9M(
&orms,&7nfo.Decord9ource C mi9ql
@-erramos &7nfo guardando los cambios
"o-md.-lose ac&orm# A&7nfoA# ac9aveOes
@-erramos el formulario actual
"o-md.-lose ac&orm# el&orm
@Abrimos &7nfo para ver la informacin y editarla
"o-md.=pen&orm A&7nfoA# # # # ac&ormEdit
&orms,&7nfo.AlloZAdditions C &alse
9alida
@-erramos conexiones y liberamos memoria
rst.-lose
9et rst C 8othing
End 9ub
>
KMu hace nuestro cdigoL A grandes rasgos lo que hace es lo siguiente
4.G -rea el inicio comXn de la 9M( que va a ser el origen de &7nfo.
:.G KMu consulta queremosL 2ara responder a esta pregunta el cdigo busca qu parmetro le
hemos pasado a travs de )num-onsulta*
;.G En funcin de )num-onsulta*# y a travs del 9E(E-/ -A9E# acabamos de construir la 9M(
de la consulta# aplicando los filtros oportunos.
Q.G Antes hemos anali'ado si el cdigo es llamado desde &7nicio o desde otro formulario $a
travs del parmetro )es&7nicio*%# porque en este caso debemos# en primer lugar# informar al
usuario de que hay tareas vencidas y# en segundo lugar# pedirle si quiere verlas o no.
F.G 2ara poder cambiar el origen del formulario necesitamos situar &7nfo en vista dise<o# ya
que es la Xnica vista que permite manipular el origen del formulario. Entonces el cdigo lo que
hace es abrir &7nfo en vista dise<o# pero oculto $para que el usuario no se percate de que se
est )manipulando* el formulario%# le cambia el origen del formulario en funcin de la 9M(
creada# cierra &7nfo# guardando los cambios# y# ahora s# ya puede abrir &7nfo en vista
&ormulario para mostrar la informacin solicitada.
PROGRAMANDO NUESTRO FMENU
Oa casi tenemos terminada la aplicacin. .amos a situar nuestro &3enu en vista dise<o y
vamos a
4.G A<adir un botn de comando# que llamaremos cmdAbre&/areas# que tendr este cdigo
>
2rivate 9ub cmdAbre&/areas?-lic6$%
"o-md.-lose ac&orm# 3e.8ame
"o-md.=pen&orm A&/areasA# # # # ac&ormAdd
End 9ub
>
El argumento ac&ormAdd nos permite dejar el formulario preparado para la introduccin de un
nuevo registro.
:.G A<adir un botn de comando# que llamaremos cmd-.encidas# que tendr el siguiente
cdigo
[
.istame en http55nec66ito.siliconproject.com.ar
>
2rivate 9ub cmd-.encidas?-lic6$%
-all origen&7nfo$3e.8ame# 4%
End 9ub
>
&ijaos que en la llamada a origen&7nfo$% slo le pasamos los
argumentos obligatorios# que son el nombre del formulario
en el que estamos y 4# que nos define el tipo de consulta
que queremos.
;.G A<adir un botn de comando# que llamaremos
cmd-7ndefinidas# con el siguiente cdigo
>
2rivate 9ub cmd-7ndefinidas?-lic6$%
-all origen&7nfo$3e.8ame# :%
End 9ub
>
Ahora el segundo argumento es ):* porque queremos que se ejecute la 9M( del -A9E :# que
es la que nos da las tareas no completadas e indefinidas.
Q.G A<adir un botn de comando# que llamaremos cmd--ompletadas# con el siguiente cdigo
>
2rivate 9ub cmd--ompletadas?-lic6$%
-all origen&7nfo$3e.8ame# ;%
End 9ub
>
Ahora creo que ya entendis porque pasamos como Xltimo argumento el );*# KverdadL
F.G A<adimos un cuadro de texto# al que pondremos de nombre txt&echa. 9acamos sus
propiedades y nos vamos a la pesta<a &ormato &ormato# y le establecemos un formato de
fecha corta.
"e esta manera ser el propio Access quien nos controle si el valor introducido es vlido o no.
Ahora# para ese textbox# en su evento )"espus de actuali'ar*# generamos el cdigo
>
2rivate 9ub txt&echa?AfterBpdate$%
@"eclaramos las variables
"im la&echa As .ariant
@-ogemos la fecha introducida
la&echa C 3e.txt&echa..alue
@9i no hay valor salimos
7f 7s8ull$la&echa% /hen Exit 9ub
@-onvertimos la fecha en dato tipo fecha para evitarnos errores de tipo
@al llamar al procedimiento origen&7nfo
la&echa C -"ate$la&echa%
@(lamamos al procedimiento
-all origen&7nfo$3e.8ame# Q# # la&echa%
End 9ub
\
.istame en http55nec66ito.siliconproject.com.ar
>
&ijaos que# al tener un elemento ms# que es la fecha que
nos va a hacer de filtro# la llamada a la funcin utili'a los
dos parmetros obligatorios# debemos indicar que el primer
parmetros opcional no lo indicamos $de ah el espacio
entre comas%# y que el segundo parmetros opcional s lo
pasamos# y que viene representado por el valor recogido en
la variable )la&echa*.
O con esto podemos dar por finali'ado la programacin de
nuestra aplicacin.
UNOS COMENTARIOS
KMu pasara si quisiera a<adir ms campos a &7nfoL 9i hemos entendido la mecnica de
funcionamiento de la aplicacin no deberamos tener muchos problemas para poder conseguir
nuestro propsito. 9in embargo# para )clarificar* ideas# os indico lo que deberamos hacer# en
general
4.G A<adir ese nuevo campo a nuestra )consulta molde*# si aXn no tenemos creado &7nfo
:.G 9i ya tenemos creado &7nfo# a<adirle el nuevo campo a travs de la opcin )-ampos
"isponibles* $para Access :JJ; habra que sacar la tabla origen del formulario a travs del
botn correspondiente de la barra de botones%.
;.G En el cdigo del mdulo deberamos a<adir ese nuevo campo en la 9M(# en la parte del
cdigo donde se indica que )creamos el inicio de la consulta*.
2or ejemplo# si creramos un campo llamado 07mportante1# en el cdigo escribiramos# por
ejemplo
>
@-reamos el inicio de la consulta
mi9ql C A9E(E-/ /Eventos.&ech.to# /Eventos.(apso2reaviso#A ?
I A /Eventos.7ndefinida# /Eventos.-ompletada# TEventos.Importante#A
>
Es muy importante que la 9M( finalice con esa coma al final. +=jo,
KMu pasara si quisiramos a<adir una nueva consulta utili'ando el nuevo campoL 2ues el
proceso sera
4.G -omo es una nueva consulta debemos asignarle un identificador de consulta. -omo
tenemos hasta el Q el nuevo sera el F.
:.G -reamos un nuevo -A9E en el cdigo del mdulo a<adiendo el resto de la 9M( de la
consulta. Evidentemente siempre antes del E8" 9E(E-/.
;.G En el botn que nos llama a la nueva consulta pasarle correctamente los argumentos
obligatorios.
2or ejemplo# si queremos filtrar por ese nuevo campo 07mportante1# y que las tareas no estn
completadas# a<adiramos el siguiente -A9E
>
-ase F
@Acabamos de construir la 9M( con las tareas no completadas
@e importantes
4J
.istame en http55nec66ito.siliconproject.com.ar
mi9ql C mi9ql ?
I A /Eventos.=bs &D=3 /Eventos UREDE /Eventos.-ompletadaC&A(9E A8"A ?
I A /eventos.7mportanteC/DBEA
>
O la llamada del botn de comando sera
>
-all origen&7nfo$3e.8ame# F%
>
(o dicho entendida la mecnica nos resultar muy fcil
introducir nuevos elementos.
PARA FINALIZAR
Ahora s... Oa tenemos nuestra agenda de tareas# que adems nos avisa de vencimientos con
preavisos# y todo ello )economi'ando* recursos utili'ando un slo formulario para recoger
todas las consultas que podamos hacer.
Espero que este ejemplo os pueda ser Xtil. Bn saludo# y...
+suerte,
44
.istame en http55nec66ito.siliconproject.com.ar

Vous aimerez peut-être aussi