Access - Formularios Duplicidad en Registros

 
Vista:

Formularios Duplicidad en Registros

Publicado por Luis (15 intervenciones) el 10/02/2009 07:06:39
Buen día o noche,

Estoy realizando un programa de facturación en Access. Hasta el momento voy bien, hay algunos detalles que quisiera afinar.

En el detalle de la factura, el cual es un subformulario, he tratado que no se repita el mismo producto. Hay alguna forma de comparar los campos en los registros para que no se duplique el mismo producto y forzar al usuario a ingresar la cantidad correcta en el renglon correspondiente.

Agradezco de antemano la ayuda.

Luis Aldana
Guatemala
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Formularios Duplicidad en Registros

Publicado por mi menda (1111 intervenciones) el 11/02/2009 02:36:43
Hola:
Puedes crear un índice único para el número de factura y producto en el detalle, o permitir la duplicidad y agrupar por producto en el informe, o recorrer el recordsetclone del subformulario y validar sí un producto se repite.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Formularios Duplicidad en Registros

Publicado por Luis  (15 intervenciones) el 13/02/2009 01:36:25
Gracias mi menda, yo juraría que te había contestado, pero no encuentro mi respuesta a tu solución.

De todas formas, te cuento que mi estructura de tabla para facturas si esta indexado el numero de factura, en si el formulario esta hecho sobre una consulta que combina los campos de tres tablas, productos, factura y detalles factura. Por lo que el Codigo de producto esta indexado tambien sin embargo en el detalle de la factura si se puede tener repetido el mismo producto 2 veces.

He tratado utilizar el recordsetclone, sin embargo no estoy teniendo mucho exito. Seguiré tratando y si no llego a la solución, necesitaré de tu ayuda.

Saludos,

Luis Aldana
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Formularios Duplicidad en Registros

Publicado por Luis (15 intervenciones) el 13/02/2009 06:18:40
Que tal Mi menda,

Ya me funciona en parte, este es el codigo que utilice

Private Sub Combo14_AfterUpdate()

Dim rst As DAO.Recordset

Set rst = Forms!Pedidos![Detalle Pedidos Subform].Form.RecordsetClone

If rst.RecordCount > 1 Then
rst.MoveFirst
While Not rst.EOF
If StrComp(rst!Codigo, Codigo, Compare) = 0 Then
MsgBox "Este producto ya existe, ingrese la cantidad correcta"
End If
rst.MoveNext
Wend

End If
End Sub

Sin embargo aunque produce el mensaje de advertencia que ya existe el producto, de todas maneras me permite ingresarlo. Como hago para que no lo permita, hay algún comando o instrucción que me permita hacer esto.

Saludos y gracias de antemano.

Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Formularios Duplicidad en Registros

Publicado por mi menda (1111 intervenciones) el 13/02/2009 09:32:12
Hola:
Hay que diferenciar entre crear un índice único e indexar un campo. Sí indexas un campo, access lo que hace es crear un índice para ese campo, con lo cual acelera las busquedas que se hagan por él.
Para crear un índice único, en la vista diseño de la tabla (detalles factura), busca el icono que pone índices y lo pulsas. En la columna Nombre de índice pones el nombre que quieras, por ejemplo IdxUnico, en la columna Nombre del campo seleccionas el del número de la factura e inmediatamente debajo selecciones el del código del producto, te posicionas en la primera fila del índice y verás abajo del todo las propiedades del índice, en la propiedad Principal pones No y en la propiedad Única pones Sí. Ahora no te permitirá repetir un número de factura y un producto dos veces.
Sí quieres personalizar el mensaje que acces te muestra por defecto, en el evento Al ocurrir un error del formulario pones:

Private Sub Form_Error(DataErr As Integer, Response As Integer)

If DataErr = 3022 Then
MsgBox "Mensaje que quieras"
Response = acDataErrContinue
Else
Response = acDataErrDisplay
End If

End Sub

Aunque no me queda claro lo de hacer un formulario basado en una consulta con los campos de las tres tablas.
Normalmente se hace un formulario principal con la tabla facturas un subformulario con la tabla detalle de factura y en el subformulario tenemos el campo código del producto de la tabla productos. Es decir una relación varios a varios entre la tabla Facturas y la Tabla productos enlazadas las dos tablas mediante la tabla detalle de factura.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Formularios Duplicidad en Registros

Publicado por Luis (15 intervenciones) el 13/02/2009 16:48:19
Gracias mi menda, por tu ayuda y tiempo,

Con respecto a lo del formulario basado en una consulta, es lo mismo que sugieres, En si la relación así la tengo elaborada, una tabla facturas con su ID de factura único que tiene una relación de 1 a varios con detalles factura, quien a su vez tiene una relación de 1 a varios con la tabla productos.

Ya he modificado la propiedad indexed en el campo codigo de la detalle facturas y ha funcionado de maravilla, gracias.

Saludos,

Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar