Aviso vencimiento en access

Tengo que generar una consulta en donde me avise los vencimientos que están a punto de vencer una semana antes, había pensado en un botón en un formulario y encontré un código, le cambie los campos de acuerdo a la base pero me muestra un error. Este es el código.

Private Sub Comando1_Click()
Dim vencimiento
vencimiento = "SELECT * FROM Forms![ConsultaGeneral]![vencimiento] " & _
"WHERE DateDiff('d',Forms![ConsultaGeneral][vencimiento],Date()))<7));"
Me.RecordSource = vencimiento
End Sub

2 Respuestas

Respuesta

Disculpa la demora pero estaba enfermo y aún. Según el código quieres mostrar la información a partir del campo fecha "vencimiento" que está en el formulario "ConsultaGeneral". No necesitas 2 formulario, con 1 es suficiente, es decir, lo puedes hacer sobre el mismo formulario "ConsultaGeneral", creando un cuadro de lista, que contenga los campos que necesite, esto puedes hacer con el asistente de Access. En el origen de datos debe quedar algo algo como "SELECT campo1, campo2 FROM tabla1. Copia esta instrucción y lo borras del cuadro de lista. Ahora desde donde llamas la consulta adiciona el coódigo que copiaste pero agregas la cláusula WHERE DATEDIFF(...). y actualizar el origen de datos del cuadro de lista REQUERY. Debe quedarte algo como:

Private Sub Comando1_Click()
Dim vencimiento
vencimiento = "SELECT * FROM Forms![ConsultaGeneral]![vencimiento] " & _
"WHERE DateDiff('d',Forms![ConsultaGeneral][vencimiento],Date()))<7));"
Me.cudadrolista.RecordSource = vencimiento

Me.cudadrolista.Requery
End Sub

Observa el la palabra cuadrolista, es el control que mostrará el resultado de la consulta.

Muchas gracias por responder, espero que te recuperes muy pronto, mis mejores vibras desde Mexico.

Ya hice lo que me sugeriste pero el problema que el calculo del vencimiento esta hecho desde un modulo y cuando hago el cuadro de lista ya no me regresa el vencimiento supongo porque falta la llamada del modulo.

Saludos!

También puedes hacer el cálculo desde un módulo, en este caso debes pasar un parámetro de tipo fecha pero la función debes declararla como Pública, algo como:

Public Function vecto(Byval dfecha as Date) as Date

vecto=DateDiff('d',dfecha],Date()))<7))

End Function

Observar que dfecha es el campo del formulario que contiene la fecha de vencimiento, en este caso la consulta SQL quedaría:

Private Sub Comando1_Click()
Dim vencimiento
vencimiento = "SELECT * FROM Forms![ConsultaGeneral]![vencimiento] " & _
"WHERE " & Forms![ConsultaGeneral]![vencimiento]<=" & vecto(Forms![ConsultaGeneral]![vencimiento]) & ";"
Me.cudadrolista.RecordSource = vencimiento
Me.cudadrolista.Requery
End Sub

hola eperezfer.

Me aparece un error en me.cuadrolista.RecordSource, al parecer RecordSource no aparece ,nadamas la instrucción de Recorset y me sigue sin aparecer el vencimiento en el cuadro de lista. En la vista hoja de datos del formulario si se aprecia el vencimiento pero es porque en el origen vuelvo a ponerle como en el campo vencimiento (donde si me muestra el vencimiento) del formulario la llamada del modulo de =Fecha_Vencimiento...... pero en vista formulario no me los muestra.

Así es como escribí los códigos para el public function y el botón.

Public Function vecto(ByVal vencimiento As Date) As Date
vecto = DateDiff("d", vencimiento, Date < 7)
End Function

Private Sub Comando62_Click()
Dim vencimiento
vencimiento = "SELECT * FROM Forms![ConsultaGeneral]![vencimiento] " & _
"WHERE" & "Forms![ConsultaGeneral]![vencimiento]<=" & vecto(Forms![ConsultaGeneral]![vencimiento]) & ";"
Me.RecordSource = vencimiento
Me.Lista63.Requery
End Sub

Saludos!

Veo que te falta un espacio después de la cláusula WHERE, además te falta el nombre del cuadro de lista después de Me, debe ser Me.Lista63.RowSource=vencimento.. Si quieres envíame tu base de datos a [email protected]. Para verificar la instrucción SQL puedes escribir lo siguiente antes de Me.Lista63.RowSource=vencimento
escribe Msgbox vencimento.

Por otra parte comité el error de indicarte RecordSource y es RowSource.

Ya te envíe la base, cambie lo que me dijiste y manda unos errores, te los aclare en el correo.

Gracias! Saludos!

Voy a revisar cuando tenga la respuesta te la envío. Una pregunta ¿De qué país haces la consulta?

Gracias!

Espero la respuesta De México.

Saludos!

Encuentro varias inconsistencias, primero la función vecto está mal ya que en esta solo se debe calcular la fecha que debe retornar al resta 7 días a la fecha actual, de esta forma:

Public Function vecto(ByVal vencimiento As Date) As Date
vecto = Date - 7
End Function

Igualmente la otra función de tu modulo se recomienda que no devuelva Variant

Tienes que reestructurar las tablas veo redundancia en las relaciones no debe existir uno a uno y uno a varios sobre un mismo campo.

Para poder realizar cálculos con fechas y horas es mejor separar la fecha y la hora en campos diferentes

Te pregunto: ¿Tu aplicación debe mostrar al activar el formulario de consulta para el registro activo en el campo vencimiento la fecha que vence? ¿Además qué en el cuadro muestre los respectivos registros que cumplen el criterio? Si tu respuesta es SI, debes replantear las tablas. En este caso el código SQL iría en el procedimiento del formulario Al Activar Registro. Con esto evitas tener que usar un botón de comando adicional.

Resumiendo, si no puedes replantear tu estructura, para poderte ayudar requiero de una descripción de todo lo que deseas sistematizar. En este caso, prepara un documento en Word en donde expliques algo como "Se desea hacer una aplicación para llevar el control de xxxx la cual consta de clientes, etc"

Te mande un correo explicando creo que todo. Espero lo entiendas.

Saludos!

Voy a revisarlo haber si te puedo colaorar.

Te envíe un correo haciendo aclaraciones.

Saludos!

Aún no he podido ver tu base datos, espera hasta la próxima semana

Hola eperezfer.

Gracias. Saludos.

Espero que hayas resuelto tu consulta

Un saludo

Respuesta

It proved to be Very helpful to me and I am sure to all the commentators here! fnf

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas