¿Limitar ingreso de registros según valor de campos?

He modificado la BD, funciona todo pero necesito, seguridad para evitar duplicar ventas de un mismos "producto". Vamos, que es la continuación de otra pregunta reciente.
Lo tengo hecho en Access 2007.
¿De qué forma podría limitar el ingreso de registros según el valor de varios campos?
En una tabla tengo varios campos: Un campo Fecha, Un campo Salón (lista desplegable varias opciones), un campo Hora Servicio: "Comida", "Cena", Un campo ESTADO que los valores pueden ser: "DISPONIBLE";"INFORMACION";"PDTE CONTRATO", "CONFIRMADA" o "CANCELADA" y otro campo ESTADO1 que los valores pueden ser: "EXCLUSIVO" o "COMPARTIDO".
Lo que necesito es que cuando exista un registro con una fecha, un salón, una hora de servicio, el campo ESTADO con el valor "PDTE CONTRATO" o "CONFIRMADA" y el campo ESTADO1 con el valor "EXCLUSIVO", me obstruya de la forma que sea el ingreso de otro registro con los mismos datos (fecha, salón, hr serv, etc) para impedir que por error de usuario, se venda una misma fecha, hora, salón a más de un cliente si estaba en EXCLUSIVO y a su vez, me permita ingresar más registros en el caso que el ESTADO1="COMPARTIDO".
Estos datos se ingresan en un formulario donde también estarían algunos datos del cliente o posible cliente, observaciones, etc.
1

1 Respuesta

0 pts.
Supongamos que el cuadro de texto Fecha lo llamas txtFecha y que los cuadros combinados los llamas selSalon, selHora, selEstado y selEstado1 y que los eliges por este orden, en el cuadro selEstado1, en la acción al hacer clic ---> Procedimiento de evento ---> Picas en el cuadrado de los ... y pones el código:
Dim db as Database
Dim rs as Recordset
Set db=Currentdb
Set rs=db.OpenRecordset("Select * From ComoSeLlameLaTabla where Fecha=cDate('" & txtFecha & "') and Salon='" & selSalon & "' and [Hora Servicio]='" & selHora & "' and Estado='" & selEstado & "' and Estado1='" & selEstado1 & "'")
If Not rs.Eof then
MsgBox("El registro ya existe")
Else
Lo que quieras que haga si el registro no exite
End If
Es decir 1º seleccionamos en la tabla el registro con los valores que has seleccionado en los cuadros combinados. El EOF es que se ha llegado al final del recordset si es NOT EOF es que el recordset tiene registros, es decir que ya existe un registro con esos valores.
Me cuentas.
Buenas tardes Angeles,
En una copia de La bd con la que estaba probando, el código no me hacía caso. Tendré algún error por ahí. Por lo tanto empecé de cero una tabla y de ella el formulario que luego utilizaré con las demás relaciones, etc. Total, ahora en esta tabla con todo tal cual me comentas, me da un error de compilación: Error de sintaxis, y si no me equivoco, perdonar mi ignorancia con el lenguaje es que dejé tal cual:
Else
Lo que quieras que haga si el registro no exite
End If
Después de else no sé exactamente lo que tengo que poner. En ese caso lo que quiero es que se agregue el registro ingresado
Gracias por la paciencia, saludos
"Lo que quieras que haga si el registro no exite" es un comentario y por tanto el código no lo lee. Si quieres insertar el registro lo tendrás que hacer con una sentencia sql ejecutada por el método DoCmd de esta forma:
DoCmd. RunSql "Insert Into NombreTablaDondeQuierasInsertar (campos de esta tabla separados por comas) Values (valores separados por comas)
Por ejemplo, supongamos que la tabla se llama Convenciones y que el cuadro de texto y los cuadros combinados de donde eliges los datos se llaman como te dije anteriormente, la sql sería:
DoCmd.RunSql "Insert Into Convenciones (Fecha, Salon, Hora, Estado, Estado1) Values (cDate('" & txtFecha & "'),'" & selSalon & "','" & selHora & "','" & selEstado & "','" & selEstado1 & "')
Es decir, insertamos en la tabla Convenciones en los campos Fecha, Salón... los valores de los cuadros del formulario.
Lo estoy escribiendo sin probarlo y ahora mismo no recuerdo si en las sql los valores hay que referirlos al formulario o no, por si acaso pon la referencia de la forma: Form! SelHora y así en todos, tanto en la sql para insertar como en la del recordset para ver si existe o no el registro.
Hola Angeles,
Lo he intentado, pero algún detalle se me debe estar pasando en la sintaxis porque cuando ingreso los mismos datos repetidamente sigue cogiendo los registros sin ningún problema, ni mensajes.
Según interpreto el código lo que hace sería impedir que se dupliquen los mismos datos en un registro sin tener en cuenta si el valor de ESTADO es (información, disponible.. o confirmada o pdte contrato) ya que solo en estos dos últimos casos y solo si ESTADO1 está en "EXCLUSIVO" es cuando me tendría que impedir duplicar registro. No sé si es posible.
He copiado lo que tengo puesto en procedimiento de evento de ESTADO1 al hacer click. Los nombres de la tabla, los campos y los cuadros combinados son correctos. Supongo que me debe faltar o sobrar algo:
Private Sub SelEstado1_Click()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("Select * From Fechas where Fecha=cDate('" & txtFecha & "') and Salon='" & Form!SelSalon & "' and Hora='" & Form!SelHora & "' and ESTADO='" & Form!SelEstado & "' and ESTADO1='" & Form!SelEstado1 & "'")
If Not rs.EOF Then
MsgBox ("El registro ya existe")
Else
DoCmd.RunSQL "Insert Into Fechas (Fecha, Salon, Hora, ESTADO, ESTADO1) Values (cDate('" & Form!txtFecha & "'),'" & Form!SelSalon & "','" & Form!SelHora & "','" & Form!SelEstado & "','" & Form!SelEstado1 & "') End If"
End Sub
Gracias por la paciencia, saludos
Esteban
¿Me mandas la BD y la echo un vistazo? En access 2003 y con pocos registros para que no pese mucho.
[email protected]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas