Mensaje que me diga expediente prestado ACCESS

Tengo un formulario de prestamos de expediente
Tengo mis tablas de Usuario, Expedientes y Prestamos.
Los campos que tengo en el formulario de Prestamos son los siguientes:

Usuario, Departamento, Puesto, Extencion, Fecha de entrega, Fecha de retiro, Nombre del socio, código de barras, CAG y Descripción.
La búsqueda la estoy realizando con 3 cuadros combinados, el primero lo utilizo para buscar el expediente por nombre del socio, el segundo lo utilizo para buscar el expediente por código de barras y el tercero lo utilizo para buscar el expediente por nombre del CAG.

La búsqueda y el llenado de las cajas de texto ya están listos, lo que quiero hacer es que en cuanto yo realice la búsqueda por cualquiera de los cuadros combinados si el expediente esta prestado que arroje una mensaje que diga que el expediente ya no esta disponible o que esta prestado (si se puede también que diga que Usuario es el que lo tiene.

1 Respuesta

Respuesta
2

No dices donde se puede "averiguar" si un expediente está prestado o no. Vamos a suponer que la tabla Expedientes tiene un campo NumExpediente(o algo parecido),

Y en algún sitio, yo lo llamo tabla Préstamos. Tengo el expediente y a quien se le prestó(ya que no sé la estructura de tal tabla)

En un formulario, en un combinado al que he llamado elegir, selecciono el expediente 3333

Y entonces

El código del evento Antes de actualizar del combinado Elegir es

Private Sub Elegir_BeforeUpdate(Cancel As Integer)
If DCount("*", "prestamos", "numexpediente=" & Me.Elegir & "") >= 1 Then
MsgBox "Ese expediente se prestó el " & DLookup("fechaprestamo", "prestamos", "numexpediente=" & Me.Elegir & "") & " a " & DLookup("cliente", "prestamos", "numexpediente=" & Me.Elegir & ""), vbOKOnly, "Para que lo sepas"
DoCmd.CancelEvent
End If
End Sub

Buenas tardes  Icue González, estuve analizando la información pero no llegue al resultado me marcaba un error en esta parte del código Me.Elegir no se si con esta información adicional se aclare mas el punto

Relación de las tablas

 

este es mi formulario 

 

aquí realizo la búsqueda por el nombre del socio

aquí realizo la búsqueda por el código de barras

aquí realizo la búsqueda por el cag

en cualquiera de los cuadros combinados que yo elija se llenan en automático los cuadros de texto de NOMBRE DEL SOCIO, CÓDIGO DE BARRAS, CAG y DESCRIPCIÓN.

Ese error sale cuando haces referencia al nombre de un control y éste no se llama así. Mira en tu combinado-Propiedades-Otras y mira que nombre figura ahí. Donde yo pongo Elegir tu tienes que poner el nombre que te aparezca. Siempre y cuando la columna dependiente del combinado sea la misma que muestras.

Además, por lo que veo usas 000000016,. En ese caso eso es texto por tanto tendrías que dejar el código como

Private Sub Elegir_BeforeUpdate(Cancel As Integer)
If DCount("*", "prestamos", "numexpediente='" & Me.nombredelcombo & "'") >= 1 Then
MsgBox "Ese expediente se prestó el " & DLookup("fechaprestamo", "prestamos", "numexpediente=" & Me.Elegir & "") & " a " & DLookup("cliente", "prestamos", "numexpediente=" & Me.Elegir & ""), vbOKOnly, "Para que lo sepas"
DoCmd.CancelEvent
End If
End Sub

a ok mira realice lo que me comentaste y me sigue marcando un error

If DCount("*", "PRESTAMOS", "NUMERO_DE_SOCIO =" & Me.NS & "") >= 1 Then
    MsgBox "Ese expediente se prestó el " & DLookup("FECHA_RETIRO", "PRESTAMOS", "NUMERO_DE_SOCIO =" & Me.NS & "") & " a " & DLookup("USUARIO", "PRESTAMOS", "NUMERO_DE_SOCIO =" & Me.NS & ""), vbOKOnly, "Para que lo sepas"
    DoCmd.CancelEvent
End If

¿Te has fijado que en la tabla Prestamos no hay ningún campo que se llame

Numero_de_socio

excelente tienes razón.

me salen estos 2 errores, si agrega los datos en las cajas de texto al elegir el expediente en el cuadro combinado pero no sale ningún mensaje cuando el expediente esta prestado.

anexo código

Private Sub NS_AfterUpdate(Cancel As Integer)
    Me.NOMBRE_DEL_SOCIO = Me.NS.Column(1)
    Me.CODIGO_DE_BARRAS = Me.NS.Column(2)
    Me.CAG = Me.NS.Column(3)
    Me.DESCRIPCION = Me.NS.Column(4)
If DCount("*", "PRESTAMOS", "SOCIO='" & Me.NS & "'") >= 1 Then
    MsgBox "Ese expediente se prestó el " & DLookup("FECHA_RETIRO", "PRESTAMOS", "SOCIO =" & Me.NS & "") & " a " & DLookup("USUARIO", "PRESTAMOS", "SOCIO =" & Me.NS & ""), vbOKOnly, "Para que lo sepas"
    DoCmd.CancelEvent
End If

¿Has mirado que el código que te puse estaba en el evento Antes de actualizar? Tal como lo has puesto es como si te digo "si coges el coche rojo estalla una bomba". Y en mi evento te avisa antes de subirte, con lo cual te salvas, y tu lo has puesto en el evento Después de sentarte, con lo cual... al cielo.

SI de todos modos me sale un error

Private Sub NS_BeforeUpdate(Cancel As Integer)
If DCount("*", "PRESTAMOS", "SOCIO='" & Me.NS & "'") >= 1 Then
    MsgBox "Ese expediente se prestó el " & DLookup("FECHA_RETIRO", "PRESTAMOS", "SOCIO =" & Me.NS & "") & " a " & DLookup("USUARIO", "PRESTAMOS", "SOCIO =" & Me.NS & ""), vbOKOnly, "Para que lo sepas"
    DoCmd.CancelEvent
End If
End Sub

Eso sucede porque en algún lugar le estás diciendo que compare, sume, o lo que sea, dos campos con datos distintos. Uno texto con uno numérico, o uno texto con uno fecha.

En la segunda línea le estás diciendo

......"socio='" & me.ns & &"'"  es decir le estás diciendo que ambos campos son texto, pero si te fijas, en la tercera línea le estás diciendo

...........Dlookup(......."socio=" & me.ns es decir le estás diciendo que lo que hay en NS es numérico

O Ns es texto o es numérico pero no ambas cosas.

Sigue igual sale el mismo error

ya modifique para que todos fueran texto

Private Sub NS_BeforeUpdate(Cancel As Integer)
If DCount("*", "PRESTAMOS", "SOCIO='" & Me.NS & "'") >= 1 Then
    MsgBox "Ese expediente se prestó el " & DLookup("FECHA_RETIRO", "PRESTAMOS", "SOCIO ='" & Me.NS & "'") & " a " & DLookup("USUARIO", "PRESTAMOS", "SOCIO ='" & Me.NS & "'"), vbOKOnly, "Para que lo sepas"
    DoCmd.CancelEvent
End If
End Sub

Para acabar con esto, si quieres, repito, si quieres, mándame una copia con registros inventados, si los datos son confidenciales, a [email protected] y la miro.

Si lo haces, en el asunto del mensaje pon tu alias Juan Andrade, ya que si no sé quien me escribe ni los abro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas