Buscar con la función Dlookup con dos criterios de tipo texto

Señores buenos días, Dios nos ampare de esta pandemia llamada Corona Virus. Bueno mi pregunta es la siguiente: Tengo una tabla llamada terceros con los siguientes campos, Idter(Autonumérico), Cedula(Texto), Nombre(Texto), Tipo(Texto). Lo que busco es lo siguiente, en formulario tengo los campos nombrados anteriormente, quiero que al digitar la cedula con la función dlookup buscar en la tabla terceros si ya existe la cedula y el tipo, les recuerdo que ambos son de tipo texto, me saque un mensaje de existencia. He probado con lo siguiente, pero nada no he podido. (En el textbox tipo, puede ir la palabra usuario o proveedor)

If (Not IsNull(DLookup("[Cedula]", "Terceros", "[Cedula] = '" & (Me.TxtCedula) & " And [Idco] = " & (Me.TxtTipo) & "'"))) Then

        MsgBox "El número de cédula ya existe, por favor verifique", vbInformation, "Por favor verifique"

        Me.TxtCedula.SelStart = 0

        Me.TxtCedula.SelLength = Len(Me.TxtCedula.Value)

        DoCmd.CancelEvent

End If

Este código no saca error, pero tampoco controla nada. Esto es para controlar que no se repita un tercero con el misma cédula y el mismo tipo. Si hay otra forma de hacerlo bienvenida sea.

Por favor les pido ayuda con esto, entre el corona virus y esto ya me tienen casi loco.

Si no es tanto pedir, les ruego me armen un ejemplo cuando los criterios son numérico y texto.

Agradecido con la persona que me pueda ayudar.

Respuesta
1

A ver...

1º/ ese código: ¿En qué evento lo tienes puesto? Porque me parece raro que no te funcione y te salte el mensaje dado que nunca se va a cumplir la condición que le pones al DLookup...

2º/ Como te decía, la condición está mal escrita. Tal y como lo tienes, si en TxtCedula tienes, por ejemplo, el valor "ABC" y en TxtTipo el valor "XYZ", te buscará en la tabla la primera Cédula que sea igual a: "ABC And [Idco]=XYZ", y para mi es obvio que ese es un valor que no existe... El motivo es que pones (correctamente) una comilla simple antes del primer criterio de texto, pero luego te olvidas de cerrarlo con otra comilla antes del espacio del AND, y también te falta otra comilla simple después del signo igual del segundo criterio. Al faltar esas dos comillas, Access interpreta que todo lo que va entre las dos que tiene es una única cadena de texto que tiene que buscar en el campo Cédula. La sintaxis correcta sería:

If Not IsNull(DLookup("[Cedula]", "Terceros", "[Cedula] = '" & Me.TxtCedula & "' And [Idco] = '" & Me.TxtTipo & "'")) Then

3º/ Si dices que tienes los campos  Idter(Autonumérico), Cedula(Texto), Nombre(Texto), Tipo(Texto), ¿por qué en el DLookup buscas en un campo llamado Idco? ¿De dónde sale ese campo? ¿Es un campo de texto o un autonumérico...?

4º/ ¿Para qué las lineas del SelLenght y SelStart?

5º/ Si primero escribes la cédula, sin haber escrito el tipo, todo tu código se va al garete...

Yo, si tuviera que validar si existe una cedula y tipo, pondría, en el evento "antes de actualizar" del último campo de los 2 en rellenar los siguiente:

If DCount("*", "Terceros", "[Cedula] = '" & Me.TxtCedula & "' And [Idco] = '" & Me.TxtTipo & "'")>0 Then
   Msgbox "Ya existe esa combinación de cedula y tipo. Revisa los datos", vbInformation,"Error de Duplicado"
   Cancel=True
End If

Y en el evento "al recibir el enfoque" de ese mismo campo, me aseguraría de que se haya rellenado el otro previamente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas