Crear una alerta en Access para saber cuales son los vencimientos que tengo pendiente en mi aplicación

Tengo una aplicación que he realizado uniendo varias bases de datos para controlar, vehículos, alquileres, personal, el problema lo tengo que quisiera crear un formulario que al empezar la aplicación me dijera los vencimientos próximos que tengo tanto de revisiones de vehículos, como revisiones medicas de personal, así como vencimientos de alquileres, cada vencimiento esta en una base de datos diferente y no se que hacer, ni como filtrar la información en un solo formulario que seria el que me dijera los vencimientos que tengo pendientes que cumplan antes por ejemplo de cinco días a la fecha puesta.

2 Respuestas

Respuesta
2

Tienes que usar una instrucción Dcount. En el evento al activar registro, o en el evento al cargar puedes poner

dim a as integer

a=Dcount("fechaVto","nombre de la tabla","fechavto=date()+5")

msgbox"Hay " & a & " vehículos que vencen en cinco días"

Otra forma sería

dim respuesta as integer

if Dcount("fechaVto","nombre de la tabla","fechavto=date()+5")>=1 then

Respuesta=msgbox"Hay vehículos cuya fecha de vto es dentro de cinco días. ¿quiere verlos ?", vbokcancel,"Que lo sepas"

if respuesta=vbok then

form.recordsource="select * from nombretabla where fechavto=date()+5"

elseif respuesta = vbcancel then

lo que quieras hacer en caso de cancelar

end if

end if

O sea, que antes de abrir(al cargar) que cuente si en la tabla hay vehículos con fecha de vencimiento dentro de cinco días(fecha del sistema + 5)

Si los hay que te aparezca un mensaje advirtiéndotelo y que si quieres verlos. Si pulsas si, el origen de registros del formulario son aquellos de la tabla cuya fecha de vencimiento sea igual a la fecha del sistema + 5

o, que en caso de que pulses cancelar haga otra cosa

Hay más formas, pero habría que saber exactamente como está construido el formulario

La verdad expertos, soy fenemales y rápidos, voy a probar hoy vuestras contestaciones y os comento como me ha ido, de entrada creo que con recordset funcionaria bien, ya os comento y reitero las gracias

Buenos días otra vez

Estoy liado con la base de datos esta, ya he conseguido conectarla pero ahora cuando intento hacer el select

Set rst = CurrentDb.OpenRecordset("SELECT MATRICULA,MARCA,MODELO,VENCEITV FROM [" & rutaBd & "].C1Avisos")

Me sale este error

Error 3921

No se puede hacer referencia a una tabla con un campo multivalor mediante una clausula FROM, que hace referencia a otra base de datos

Yo hago referencia a la base de datos

\VEHICULOS1.accdb

Esta base de datos que yo sepa no tiene ningún campo multivalor a no ser que tiene creado un campo de datos adjuntos en el cual guardo toda la documentación del vehículo, pero a ese campo no hago referencia en ningún momento de esta consulta.

Decirme que puedo hacer y si hay alguna solución, Gracias

Como no he visto la estructura de las tablas no puedo opinar, pero ¿no te sería más sencillo trabajar con tablas vinculadas? Si en la base A trabajas con una tabla vinculada de la base B

1º tienes los valores primitivos

2º te permita añadir datos

3º cualquier modificación que hagas en la estructura de la tabla(con la base b abierta) se reflejará en la base a

No las tengo vinculadas y lo único que hago es consultar la base de datos de vehículos en la consulta C1AVISOS, en esta haga el filtro, y después como os he dicho en el formulario principal quiero que me haga la consulta, si queréis ver la estructura de la tabla os la envío por correo y me incais donde tengo el error, ya que yo no lo encuentro

Como decías "Yo hago referencia a la base de datos..." creía que estabas hablando de otra base de datos.

Casi mejor. Mi correo es [email protected] Si me la mandas, en el asunto del mensaje pon tu alias jmgv43, ya que si no sé quien me escribe, ni los abro.

Respuesta
2

No das detalles de cómo has unido las distintas bases de datos (¿tienes todas las tablas en un único archivo, en varios archivos cada una y todas ellas vinculadas en una única BD, o son todas BDs independientes?)

La idea básica sería, al abrir el primer formulario, contar los registros que cumplen esa condición, y si la cuenta es distinta de 0, lanzar el aviso.

Por ejemplo, si tienes todas las tablas en la misma BD (o vinculadas a un único archivo):

Private Sub Form_Load()

If DCount("*","TRevisionesMedicas","FechaRevision>=#" & Date & "# AND FechaRevision<=#" & Date +5 & "#")>0 Then

Msgbox "Hay revisiones médicas en los próximos 5 días"

'Aquí abrirías un formulario/consulta para mostrarlos..

End If

End Sub

Otra forma casi idéntica:

1º/ Creas la consulta en la que estableces el filtro para el campo de fecha

2º/ Usas el DCount() para ver si la consulta devuelve o o no registros, y si lo hace, la abres (o un formulario sobre ella)

Otra forma sería hacerlo por medio de recordsets.

Y si las BDs son todas "independientes" (cada una en su archivo de access), tendrías que lanzar las consultas hacia las distintas BDs, indicando además del nombre de la tabla/consulta la ruta al archivo.

Un saludo


Puedes ver un ejemplo completo y explicado aquí: http://siliconproject.com.ar/neckkito/index.php/component/content/article/93-ejemplos-explicados/ejemplos-de-formularios/159-aviso-automatico-al-abrir-un-formulario 

Muchas gracias por ser tan rápidos en contestarme ,os explico las bases de datos son independientes y están unidas por un formulario que me he realizado donde por medio de botones voy a cada una de ellas,la idea es que al iniciar esta aplicación inicial me diga toda esta información que he detallado y que no haya que entrar en cada una de las bases de datos

Te comento cómo lo haría yo, sin complicarme mucho:

1º/ En cada una de las bases de datos (las llamaré BDVehiculos, BDPacientes...) crearía una consulta (CAvisos) en la que filtraría el campo FVencimiento entre la fecha actual y la fecha actual más 5 días (SELECT * FROM TVencimientos WHERE FVto BETWEEN Date And Date+5)

Esta consulta te devolverá los vehículos, pacientes... que tiene revisión dentro de los próximos 5 días

2º/ En la BD que te hace de panel de control, en el formulario de inicio, colocaría 5 cuadros de lista (lstVehiculos, lstPacientes...) y en las etiquetas le pondría: Los siguientes (vehículos, pacientes...) tienen revisión en los próximos 5 días:

3º/ En el evento "Al cargar" de ese formulario de inicio, le pondría:

Private Sub Form_Load()

Dim rst As DAO.Recordset

Dim rutaBD as String

rutaBD="C:\Mis BDs\BDVehiculos.accdb"  ' aqui la ruta completa, con extensión de la primera BD

Set rst = CurrentDb.OpenRecordset("SELECT * FROM [" & rutaBD & "].CAvisos")

If rst.RecordCount > 0 Then
rst.MoveFirst

Me.lstVehiculos.RowSourceType="Value List"
Do Until rst.EOF
Me.lstVehiculos.AddItem rst("Vehiculo")
rst.MoveNext
Loop
Me.lstVehiculos.Requery
End If

'Repites con las otras tablas

....

rst.Close

Set rst=Nothing

End Sub

Lo que te marco en negrita es lo que tienes que modificar con tus valores.

Te dejo un ejemplillo con una sola BD, para que lo veas más claro (he usado una ruta relativa, con CurrentProject.Path, para que te funcione en tu PC): http://filebig.net/files/CQfvMkpBFm 

Un saludo


He visto tu ejemplo y funciona bien y me valdría, el problema que tengo es que lo que quiero filtrar en el listbox, es más de un campo es decir, Matricula, Vencimiento, Compañía, he estado haciendo pruebas con tu ejemplo y no he conseguido que me saque más de un campo en el listbox, te pido me ayudes para agregar los siguientes campos, Gracias por adelantado.

Pon en las propiedades del cuadro de lista el número de columnas que quieras, y con el AddItem vas añadiendo las columnas por filas, por ejemplo, para añadir ID y matrícula:

Me.lstVehiculos.AddItem rst("ID") & ";" & rst("Vehiculo")

Y si te sirve espero que revises la valoración de mi respuesta... XD

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas