Datos duplicados en carga de registro desde un formulario

Tengo un formulario(Factura) que guarda los datos ingresados en una tabla (Factura)... Necesito que al ingresar el numero de factura y el tipo de factura me diga si para el tipo de factura existe ese numero de factura de forma tal de no repetir información errónea... Lo se hacer solo para el numero de Factura..

Private Sub NumFactVent_AfterUpdate()
Dim vElem, vElemB As Variant
vElem = Me.NumFactVent.Value
If IsNull(vElem) Then Exit Sub
vElemB = DLookup("[NumFactVent]", "Factura Venta", "[NumFactVent]='" & vElem & "'")
If vElemB = vElem Then
MsgBox "La Factura ingresada ya existe", vbInformation, "AVISO"
Me.NumFactVent.Value = Null
Me.NumFactVent.SetFocus
Me.NumFactVent.SetFocus
End If
End Sub

Respuesta
2

Si quieres validar que no se repitan dos campos, tanto en el código que usas (en la función DLookUp) como en la propuesta de Icue (en la función DCount) tienes que añadir un nuevo criterio en el tercer argumento, por ejemplo, si el segundo campo a validar se llamara TipoFact y es de tipo Texto, y también lo tienes en el formulario:

.- En tu código:

vElemB = DLookup("[NumFactVent]", "Factura Venta", "[NumFactVent]='" & vElem & "' AND TipoFact='" & Me.TipoFact & "'")

.- En el de Icue:

If dcount("*","[factura venta]","numfacturaVent='" & me.numfacturavent & "' AND TipoFact='" & Me.TipoFact & "'")>=1 then

Un saludo.


1 respuesta más de otro experto

Respuesta
2

Es mucho más sencillo. Vamos a suponer que tanto el cuadro de texto como el campo de la tabla se llaman NumFactVent.

En el evento Antes de actualizar del cuadro de texto Numfactura, m crea un procedimiento de evento y pon

If dcount("*","[factura venta]","numfacturaVent='" & me.numfacturavent & "'")>=1 then

Msgbox" ¡Donde vas!. No ves que ese número ya existe", vbokonly,"No te lo digo más"

Docmd. Cancelevent

end if

Me explico. Cuando anotas un número de factura(que por lo que tu has puesto parece texto) y pulsas Enter, primero comprueba si ya existe un número de factura como ese en la tabla. En caso de que lo haya, te sale el mensaje y el cursor vuelve al cuadro de texto para que cambies el valor.

Lo que hace es "contar" cuántos registros hay en la tabla Factura Venta con ese NumFacturaVent

Gracias Icue por tu pronta respuesta como siempre..... mire y probé tu código pero hace lo mismo que el que yo estoy utilizando.... lo que necesito es que cuando cargue el numero de factura(tipo de dato texto) se fije en el tipo de factura(tipo de dato texto) y me deje guardar si no se repite para ese tipo de factura

Entonces tienes que hacer lo que te dice Svein... ponerle más criterios. Por ejemplo, supongamos que tengo la tabla

Y tengo el formulario Facturas, que te lo pongo continuo porque se ve mejor el funcionamiento. Como en la imagen, a veces no sale el cursor, para demostrar que está en el control NumFactura, le digo que se ponga en amarillo.

Puedes ver que intento repetir un numfactura de venta. Al pulsar Enter

Al pulsar Aceptar, el cursor se "vuelve" al control Numfactura, que esta vez, para joder, si se vé el cursor

El código del evento Antes de actualizar del cuadro de texto Numfactura es

Private Sub NumFactura_BeforeUpdate(Cancel As Integer)
If DCount("*", "facturas", "numfactura='" & Me.NumFactura & "' and tipofactura='" & Me.TipoFactura & "'") >= 1 Then
MsgBox "De eso nada monada, ya hay un numfactura como éste", vbOKOnly + vbExclamation, "Tienes que corregirlo"
DoCmd.CancelEvent
End If
End Sub

Hola Icue revisando el código me sale, luego de poner un ejemplo, un cuadro que me dice que hay un error(Error de compilación) y señala NumFactVent luego de Me... el formulario esta hecho a partir de la tabla con el asistente de formulario

La única explicación que se me ocurre es que tengas el campo NumFacturaVent como numérico. Si ese fuera el caso tendrías que poner la instrucción como

........."numfacturavent=" & me.numfacturavent & " and...lo otro igual como está.

Revisando un poco todo el código me quedo así... gracias a tu aporte y el de svein el código ahora funciona...

Private Sub NumFactVent_AfterUpdate()
If DCount("*", "[factura venta]", "NumFactVent='" & Me.[NumFactVent] & "' AND [TipoFact]='" & Me.[TipoFact] & "'") >= 1 Then
MsgBox "Para este tipo de Documento ya existe este numero", vbOKOnly + vbExclamation, "Tienes que corregirlo"
'DoCmd.CancelEvent
Me.NumFactVent.SetFocus
Me.NumFactVent.SetFocus
End If
End Sub

El es que cuando detecta que se repite un numero para un determinado tipo de factura no hace foco en el campo numero de factura para cambiarlo

No necesitas las dos líneas, que además son iguales

Me. NumFactVent. SetFocus
Me. NumFactVent. SetFocus

Con el docmd. Cancelevent es suficiente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas