Quisiera saber si informado un campo en un formulario con un valor numérico se podría utilizar Dlookup para buscar por 2 criteri

Quisiera saber si informado un campo en un formulario con un valor numérico se podría utilizar Dlookup sobre dos criterios, nro de libro informado y quién es primer empleado que figura en una lista de espera.

Tengo una tabla lista de espera en donde se recoge los nombres de las personas que solicitan leer un libro pero que no lo pueden hacer porque el libro está prestado.

A la vez tengo una consulta (C_lista_espera) en la que figuran las personas que hasta el momento están pendientes de leer el libro. La consulta se actualiza dependiendo si hay nuevas peticiones de lectura o disminuye si el libro se sigue prestando.

Ahora estoy intentando que en el formulario de devolución de libro me avise de quién es el empleado que figura como primer solicitante y así poder llamarlo y prestarle el libro. Ya he conseguido que salga el mensaje de que el libro está solicitado pero lo que no he conseguido es que me informe del nombre del empleado.

¿Se puede utilizar “And” para encadenar criterios de selección?

2 respuestas

Respuesta
3

Como te dice Pere puedes usar hasta 99 condiciones and y Or. Por ejemplo, como origen de un formulario basado en la tabla Clientes

me.recordsource="select * from clientes where pais=""Alemania"" and ciudad=""Berlin"" and pelo=""rubio"" or pelo=""Negro"" and Fechanac<Date()-600...".

En el caso de Dlookup es lo mismo

TextoX=dlookup("nombrecliente","clientes","pais=""Alemania"" and ....or pelo=""Calvo como una pelota""")

Si lo fueras a usar en una consulta SQL sólo tendrías que cambiar las comas que separan los términos por punto y coma.

Muchas gracias Icue.

Agradezco la respuesta.

Ya te diré si lo he conseguido o por el contrario tengo que solicitarte más ayuda.

Un saludo

Hola Icue. 

Siento molestarte pero aunque he intentado todo lo que se me ha ocurrido siguiendo tus comentarios anteriores no he conseguido el propósito.

Igual no es la función adecuada el Dlookup, pero lo que trato es que una persona no pueda solicitar inscribirse en la lista de espera dos veces para leer el mismo libro, sería una tontería.

El formulario que he creado consta de 5 campos los cuales 4 ya vienen informados de un formulario anterior y el campo fecha se actualiza a la fecha de día. El que falta informar es el campo empleado que solicita inscribirse.

Me gustaría que una vez introducido el empleado (que es un campo combinado), la aplicación me informe mediante mensaje si no puede inscribirse al constar ya inscrito. Para ello he creado la siguiente instrucción que no funciona.

.......

If DLookup("[Usuario]", "C_Lista_espera_111", "[Usuario]='" & "[Usuario]"", And [IdLibros]=" & [N Libro] & "'") = 1 Then
MsgBox "EL LIBRO INDICADO YA LE TIENES SOLICITADO CON ANTERIORIDAD"
End If

........

El título de la consulta es porque voy guardando las anteriores y con una base hago las modificaciones que creo oportunas.

Gracias por tu tiempo.

Un saludo

Tienes toda la razón. En ese caso deberías usar la función Dcount. Vamos a suponer que tienes una tabla Reservas con Idreserva, NombrePersona, etc. Por ejemplo, vamos a suponer que la persona que sea escribe su nombre en un cuadro de texto al que, en sus propiedades-otras-nombre le has puesto Usuario,. En el evento Antes de actualizar de ese cuadro de texto crea un procedimiento de evento y entre Private sub y End Sub pon

If dcount("*","reservas",""nombrepersona='" & me.usuario & "' and Idlibro='" & me.[n libro] & "'")>=1 then

Msgbox"Ese cliente ya ha reservado ese libro","Vbokonly,"Otra vez será"

Docmd. Cancelevent

end if

Hola Icue.

Después de darle muchas vueltas a la instrucción que me indicabas tengo que decir que algo mal tengo que estar haciendo porque no me funciona. Encuentro problemas de sintaxis y otras cuestiones.

He conseguido resolver el problema creando una consulta en la que que agrupo los usuario (en una consulta con contar)y después, en el formulario, en "al perder el enfoque" he puesto la siguiente instrucción.

If DCount("Usuario", "C_lista_espera_cero_veces", "[Usuario]='" & [Usuario] & "' AND [IdLibros]=" & [N libro]) >= 1 Then

¿Crees que la instrucción aguantará?

Un saludo y gracias por tu tiempo.

Seguro que te inoportuno alguna otra vez. Un saludo

Si tengo una tabla Clientes

Verás que hay un cliente de Berlín en Alemania.

Si en un registro nuevo del formulario Clientes(pero podría ser cualquier otro formulario), relleno datos

En el momento que escribo Alemania y pulso Enter

Al pulsar aceptar el cursor se vuelve al control Pais para que lo cambie(es que no sé que quieres hacer en ese caso).

El código(por lo mismo del paréntesis anterior) lo he puesto en el evento Antes de actualizar del cuadro de texto Pais.

Private Sub Pais_BeforeUpdate(Cancel As Integer)
If DCount("*", "clientes", "ciudad='" & Me.Ciudad & "' and pais='" & Me.Pais & "'") >= 1 Then
MsgBox "No puede ser, ya hay un cliente de esa ciudad y ese país", vbOKOnly, "Que lo sepas"
End If
DoCmd.CancelEvent
End Sub

Hola Icue. No quiero crear polémica entre otras cosas porque llevo muy poco tiempo interesado en el mundo de la informática. Desconozco si los errores que se producen en mi ordenador es motivado por la versión de access que manejo, pero te muestro la imagen del resultado al introducir la instrucción que escribes. He copiado y pegado. La respuesta no es la misma.

La versión con la que estoy intentado manejar una biblioteca es access 2010.

Sea de una manera u otra tengo que agradecer el tiempo que pierdes conmigo, además me motiva para seguir leyendo cosas que son muy interesantes.

Un saludo y gracias. 

Veo que el conversor que he utilizado no es muy bueno. Intentaré buscar algún otro y así poder enviarte la imagen mínimamente legible para que veas el error que provoca la instrucción.

Gracias.

Tanto cuando vas a hacer una pregunta, como al dar una respuesta te aparece lo que ves en la imagen

Si pulsas lo que te señalo con la flecha se abre un "explorador" para que localices la imagen y se puede ver perfectamente, porque si es cierto que no se distingue nada. Por otro lado, te diría que tanto el Office 16 que uso yo, como el Office 10, son exactamente iguales en cuestión de referencias del editor de VB.

Icue, es cierto lo que dices pero cuando seleccionas el archivo te sale un mensaje diciendo que solamente se admiten archivos formato, JPG, PNG o Gif, de ahí que ayer convirtiera el documento doc en Gif para incorporarlo, pero salió el churro con tomate que has visto.

Lo he vuelto a repetir hoy con el mismo resultado.

No te preocupes

Gracias.

Creo que lo mejor es, si quieres, repito, si quieres, mándame lo que sea a [email protected] y lo miro. Si lo haces, en el asunto del mensaje pon tu alias Vicente Moliner, ya que si no sé quien me escribe ni los abro.

Respuesta
1

Puedes usar todos los operadores de comparación que desees. Funciona como una cláusula WHERE de us SQL pero sin el WHERE.

La única restrición es que todos los campos sobre los que quieras hacer comparaciones estén en el mismo dominio. Como he creído entender que el Dlookup lo utilizas sobre una consulta que fusiona información de las dos tablas, no debe haber ningún problema.

Por ejemplo "(A > B o A=0) y Año=2019"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas