CREACIÓN de filtros repetidos en Access VB

Tengo este formulario como se ve en la imagen

El campo turno esta esta dividido en 3 (turno 1 turno 2 turno3)

Cada turno tiene que llenar los registros de 71 maquinas (registro de inicio y registro final)

Pero que pasa (pasa muy seguido),,, que me repiten los registros (por ejemplo repiten la maquina numero 54 dos veces en un solo turno

Hay alguna forma de que en cada turno .cuando registren cada maquina. Verificar primero si la maquina ya tiene el registro de ese turno

La idea es que cada turno debe tener los 71 registros de inicio y fin

Ojala me haga entender ... Cualquier cosa me avisan

2 Respuestas

Respuesta

Si coloca una imagen de la tabla podría responderle más acertadamente. Como mínimo en la tabla donde registra los datos debe crear un índice compuesto, esto es, fecha+turno+máquina y sin duplicados o en su defecto en el evento Antes de actualizar validarlo, puede ser con algo como:

IF DCOUNT("*",tabla_datos", "fecha=" & "#"  me.fecha & "#" & " AND turno=" & me.turno & " AND maquina=" & me.maquina)>0 then

  Msgbox "Ya registró la maquina en la fecha y número de turno",vbinformation,"Cuidado"

 Cancel=True

END IF

Bueno esto es solo una aproximación.

Vuelvo y le insisto escríbame y le envío algo más simple sin tanta vuelta

buen día 

si te entendí esta es la tabla .. donde se alacena los registros 

Las consultas se utilizan para NO crear campos adicionales, por esto le digo para que dar tantas vueltas.

Le he preparado este pequeño ejemplo:

Puse 10 maquinas, observe que ya no aparece las máquinas 1,2,4,6 porque ya están registrados los registros de la fecha y número de turno.

Le asigne al combo box Turno el nombre cboturno y al combo box Maquina cbomaquina.

El origen de datos del combo cbomaquina lo obtengo a partir del evento Después de actualizar del combo cboturno.

CODIGO COMBO BOX cboTurno

Analice bien la estructura del código SQL le servirá para otros formularios.

Se me olvido comentarle que el ejemplo está elaborado con base en 2 tablas:

Tblturnos

Tblmaquinas

Si solo tiene la tabla dbo_CapturaTelares tiene que validar con DCOUNT() en el evento Antes de actualizar del combo cbomaquina. Algo como:

Cambie tblturnos por dbo_CapturaTelares. Me. Fecha_turno por el nombre del campo de su formulario y Me. Cboturno por el nombre de su combo box.

Si trabaja solo con una tabla, es decir, no tiene la tabla de máquinas también puede rellenar el combo box en el evento Después de actualizar, así:

Esto llena el combo box con los número de máquina que falten por registrar.

Buen día

Si solo tengo una tabla donde se guarda esta información

Pero lo hice con el código que tu me das ... y lo raro es que no me sale nada ni un error

¿Qué me faltara?

¿Puede suministrar una imagen del código?

No indica que tipo de error le aparece

Respuesta

Te presento una posibilidad. ¿No sería mejor que una vez hayas "revisado" una máquina, ésta no aparezca ya en el combinado? Así evitas que puedan repetirla. Por ejemplo, supongamos que tengo una tabla Maquinas, con los datos de cada maquina. Como no sé esos datos le he puesto un número y como no tengo ganas de trabajar sólo he puesto 5

También tengo una tabla a la que he llamado Turnos, que contendría los campos que se ven en el formulario, pero yo sólo he puesto 4

Tengo un formulario independiente, con los mismos campos que la tabla

Anoto la fecha elijo el turno, en este caso el 1 y me crea en la tabla Turnos 5 registros con esa fecha, ese turno y cada una de las máquinas.

Ahora elijo la maquina

En este caso la 1, y cuando marco realizada como hecha( así les obligo a que justifiquen que lo han hecho), la tabla Turnos me la deja

También me deja el formulario, con la misma fecha y el mismo turno, ya que se supone que sigue trabajando ese mismo turno, pero en máquinas ya no me aparece la 1

Tiene además una ventaja, y es que si tuvieran la osadía de decirte que las han revisado todas, con mirar en la tabla sabes si se han dejado alguna( motivo suficiente para despedirlos o cortarle la lengua por mentirosos). El código del formulario es

Private Sub Maquina_GotFocus()
Maquina.Requery
End Sub
Private Sub Realizada_AfterUpdate()
If Realizada = -1 Then
DoCmd.RunSQL "update turnos set realizada=-1 where fecha=forms!turnos!fecha and turno=" & Me.Turno & " and maquina=" & Me.Maquina & ""
Maquina = ""
Realizada = 0
End If
End Sub
Private Sub Turno_BeforeUpdate(Cancel As Integer)
If Nz(DCount("*", "turnos", "fecha=forms!turnos!fecha and turno=" & Me.Turno & "")) = 0 Then
Dim i As Byte
For i = 1 To 5
DoCmd.RunSQL "insert into turnos(Fecha,turno,maquina)values(fecha,turno," & i & ")"
Next
Else
Exit Sub
End If
End Sub

De todas formas como creo que tienes mi correo, si quieres el ejemplo ya sabes lo que tienes que hacer.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas