Como evitar datos duplicados en un formulario

Estoy haciendo un formulario para facturación en acces y quisiera evitar que se repitan datos para que no se facture dos veces el mismo producto. Lo intente con indexado en campo sin duplicado pero me arroja un error que no me permite continuar ingresando datos en el siguiente campo. El msj de error es el siguiente: Los cambios solicitados en la tabla no se realizaron correctamente porque crearían valores duplicados en el indice, clave principal o relación. Cambie los datos en el campo o los campos que contienen datos duplicados, quite el indice o vuelva a definir el indice para permitir entradas duplicadas e inténtelo de nuevo. Si le quito indexado sin duplicados el error se corrige pero me permite colocar dos veces el mismo producto. Quisiera saber si puedo hacer una expresión o macro para que no lo permita y que a su vez muestre un msj de error indicando que el producto ya fue facturado.

1

1 respuesta

Respuesta
1

Supongamos que tienes un campo(no tiene porque ser ese) Numfactura y que la tabla se llama Facturas. En sus propiedades-Eventos-Antes de actualizar puedes poner

If dcount("numfactura","facturas","numnfactura=" & me.numfactura & "")>=1 then

Msgbox"No puede haber dos números de factura iguales", vbokonly, "Otra vez será"

Docmd. Cancelevent

end if

Así, si escribieras un numero de factura que ya está en la tabla y pulsaras enter o te fueras a otro control te sale el mensaje y el cursor se vuelve al cuadro de texto Numfactura

Muchas gracias Icue, yo tengo un subformulario, ingreso un código de producto en un campo de codigo y me muestra en otros campos con una expresión Dbusq descripción, precio, unidad e IVA en función de ese código. Según la respuesta que me enviaste como escribo esa expresión en el campo código para que no se repita y no facturar dos o más veces el mismo producto?

Como no has puesto nombres, voy a ponerles yo unos y luego los cambias por los tuyos. Supongamos que tienes una tabla Ventas con Idventa, cliente, fecha,... etc. Una tabla DetalleVentas con idventa(relacionado con el de ventas en UNO a VARIOS, una venta varios productos), Codigo, Producto, Precio, etc... Con ellas has hecho un formulario con subformulario(si lo haces con el asistente acuérdate de ponerle al subformulario DetalleVentas a secas.

En vista diseño del subformulario, en las propiedades del cuadro de texto Codigo, en eventos-Antes de actualizar ponle

If DCount("codigo", "detalleventas", "codigo=forms!ventas!detalleventas.form!codigo") >= 1 Then
MsgBox "no se puede", vbOKOnly, "Lo siento"
DoCmd.CancelEvent
End If

Lo que te había puesto en la respuesta anterior era válido si el cuadro de texto estaba en el formulario

Muchas gracias Icue, hice lo que me dijiste, pero lo hice en propiedades eventos-procedimiento de eventos-después de actualizar. Yo tengo un formulario que se llama facturadeventa y el sub-formulario detalledeproducto. Al ingresar el código sale el dialogo "lo siento" "no se puede" pero aún así deja repetir el codigo y por ende el mismo producto. Habría que bloquear la repetición del codigo. Me corriges por favor si me equivoqué o si me puedes dar otra indicación te lo agradecería.

Private Sub CODIGO_AfterUpdate()

If DCount("codigo", "detalleproductos", "codigo=forms!facturadeventa!detalleproductos.form!codigo") >= 1 Then

MsgBox "no se puede", vbOKOnly, "Ya existe un registro con este codigo"

DoCmd.CancelEvent

End If

End Sub

Nada de Después de actualizar, yo te puse en el Evento Antes de actualizar. Lo has puesto como si me hubieras hecho algo y luego me pides perdón. El mal ya está hecho. Sin embargo, si lo pones en el evento Antes de actualizar, impide que me hagas nada.

Nuevamente muchas gracias Icue, lo puse antes de actualizar pero no me deja ingresar el código, me sale inmediatamente el dialogo l"o siento" "no se puede" y no me deja continuar y no deja funcionar la expresión Dbusq en los campos siguientes. 

No digo que no puede ser, porque los estás afirmando, pero si que me extraña mucho. Un cuadro de texto no "tiene en cuenta" un valor hasta que no se ha escrito algo en él y se pulsa la tecla enter. Si quieres, repito, si quieres mándame un mensaje a [email protected] y te mando un ejemplo. O mejor, mándame una copia VACIA de las tablas y el formulario y subformulario, lo miro y te digo. En cualquiera de los casos, si lo haces, en el asunto del mensaje pon tu alias Juan Falca, ya que si no sé quien me escribe ni los abro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas