Problemas con la función DLookup para buscar por dos criterios

Señores muy buenos días. Cordial saludo.

Mi pregunta es la siguiente Tengo dos tablas, una llamada Comunidades que tiene los siguientes campos Idcomu(Autonumérico), Fechacre(Fecha), Nombre(Texto) y otra tabla llamada VrTarifa con los campos Idvrta(Autonumérico), Idcomu(Numérico viene de la tabla comunidades), Vrtarifa(Numérico). Se relacionan por el campo Idcomu. A su vez tengo un formulario llamado FrmVrTarifa, por donde creo el valor de la tarifa para cada comunidad. El formulario tiene los siguientes campos: Cuadro de texto (TxtFechacre, Fecha, para seleccionar la fecha), Cuadro combinado (CmbIdcomu, para seleccionar la comunidad, aunque muestre el nombre de la comunidad en realidad lo que guarda es el Idcomu), Cuadro de texto (TxtVrtarifa, numérico para digitar el valor de la tarifa). Este formulario en el cuadro de texto TxtVrtarifa en la hoja de propiedades, evento al salir tiene el siguiente código.

 Private Sub TxtVrtarifa_Exit(Cancel As Integer)

    If (Not IsNull(DLookup("[Vrtarifa]", "Vrtarifas", "[Vrtarifa] = " & Nz(Me.TxtVrtarifa, 0) & " And [Idcomu] = " & Nz(Me.CmbIdcomu, 0) & ""))) Then

        MsgBox "El valor de la tarifa para esta comunidad ya existe", vbInformation, "Por favor verifique"

        Me.TxtVrtarifa.SelStart = 0

        Me.TxtVrtarifa.SelLength = Len(Me.TxtVrtarifa)

        Cancel = True

        Exit Sub

    End If

End Sub

Esto con el fin de controlar que en una comunidad no se repita el valor de la tarifa. Pero en algunos casos lo hace bien y en otros me saca este error que muestro en la siguiente imagen, bueno como no supe como subir la imagen del error se los detallo a continuación

Se ha producido el error ‘3075’ en tiempo de ejecución:

Error de sintaxis (falta operador) en la expresión de consulta ‘[Vrtarifa] = And [Idcomu] = 1’

Ahora cuando ocurre ese error, ya les digo, ocurre cuando, selecciono una comunidad y le creo los valores de las tarifas, al hacer clic en el cuadro combinado (CmbIdcomu) para cambiar la comunidad enseguida salta el error. Este dice:

Como les dije anteriormente, al seleccionar una comunidad y comienzo a crearle las tarifas, funciona perfectamente, es más, si digito un valor ya creado, me saca el mensaje diciendo que valor ya existe para esa comunidad.

Exactamente esta es la descripción del error. Bueno se preguntarán y por qué el código en el evento al salir créanme que lo probado en varios, como: antes de actualizar, después de actualizar, al hacer clic y en ninguno funciona, en el ultimo evento que lo probé fue aquí y por eso quedo en este evento.

1 Respuesta

Respuesta
2

Eder: Da la impresión que en un momento determinado y por razones que ignoro, el >>TxtVrtarifa toma el valor de "Cadena vacía", que no es lo mismo que Nulo, que es lo que controlas con el Nz.

Una forma de evitarlo, es Formatear ese cuadro de Texto como Número, y si quieres redondear el código, hacer un sondeo previo de los valores de ese TextBox y lo que parece un Combo.

Algo así:

If Not IsNull(Me.CmbIdcomu) And IsNumeric(Me.TxtVrtarifa) Then

'Aquí tu código que tienes arriba

Else

MsgBox "Has de dar valores al Cuadro de Texto y al Desplegable",vbCritical,"FALTAN DATOS"

End If

Mis saludos >> Jacinto

Jacinto mi amigo mil y mil gracias por tu pronta y oportuna respuesta, gracias a tu respuesta exactamente cuando dices  Eder: Da la impresión que en un momento determinado y por razones que ignoro, el >>TxtVrtarifa toma el valor de "Cadena vacía", que no es lo mismo que Nulo, que es lo que controlas con el Nz.  Por esto que dijiste resolví el problema.  Pues fíjate que cuando guardo el los datos del formulario, el TxtVrtarifa lo borraba era con comillas "", (Me.TxtVrtarifa = ""). Lo cambie y por Me.TxtVrtarifa = 0 y todo solucionado. ya funciona a la perfección. 

En verdad muy agradecido por tu respuesta. Un millón de gracias y que Dios todo poderoso te colme de bendiciones 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas