Pocos parámetros, se esperaba 4
Publicado por SebaS (1 intervención) el 12/03/2020 05:53:46
Hola, resulta que me estoy volviendo loco con un tema en el cual llevo dos días. Si quieren ver el problema directamente sáltense el siguiente párrafo.
Tengo una base de datos con muchas tablas, particularmente una de ellas, "EVENTO_LOGISTICOS", integra dos tablas principales (fuertes) que ya se imaginarán son "EVENTOS" y "LOGISTICOS", dentro de EVENTO_LOGISTICOS exite un campo ID_EVENTO que es con el cual relaciono el formulario de eventos con un subformulario de eventos_logisticos. Los otros campos (dentro de la tabla EVENTOS_LOGISTICOS) que intervienen en el problema son: hora_entrada, hora_salida, id_logistico y fecha .
Lo que quiero hacer es validar que no se pueda ingresar un rango de horario de trabajo de un logístico que ya se encuentre en la tabla EVENTO_LOGISTICOS, es decir, si un logístico con el ID_LOGISTICO 100 tiene registrado un rango de horario trabajado de 9am - 5pm, el subformulario no debería permitir ingresar un rango de horario de 10am - 2pm pues se supone que ya trabajó en el rango horario anterior (todo esto sobre el mismo día). Algo así :
Si el rango de horario que está en la base de datos es A, en el subformulario se debe validar que no se puedan ingresar rangos horarios como B, C o D.
Para eso he intentado trabajar con una consulta que valide justamente que esos rangos no se presenten en la base de datos; lo intenté con DLOOKUP y fue frustrante. traté de hacer la sentencia SQL y presentaba errores que la verdad no sé de dónde salieron (creo que era comparando las horas, algo con los formatos) y finalmente estoy tratando de llevar una consulta que creé directamente con el diseñador de consultas para almacenar los resultados en un Recordset y así poder trabajar con ellos pero me muestra el error "Pocos parámetros se esperaba 4". La consulta funciona perfectamente cuando la ejecuto con access, aclarando que en access me toca cambiar los criterios como [Formularios]![fEventos]![fEvento_logisticos]![ID_LOGISTICO] por datos reales. La consulta es:
La sentencia que uso en VB es:
Cabe anotar que la consulta en la base de datos efectivamente se llama "Consulta Horas Coincidentes Logísticos", el evento sobre el cual estoy programando es "Form_BeforeUpdate" y el código ejecutado no llega ni al primer If pues al recordset nunca le llega información y saca el error.
No sé si estoy yendo por el camino equivocado, no programo mucho en access y menos SQL (la sentencia sql de la consulta es la que crea access, traté de ordenarla lo que más pude).
Siento mucho si me extendí en la explicación pero era para contextualizarlos lo que más pudiera
Agradezco su colaboración.
Tengo una base de datos con muchas tablas, particularmente una de ellas, "EVENTO_LOGISTICOS", integra dos tablas principales (fuertes) que ya se imaginarán son "EVENTOS" y "LOGISTICOS", dentro de EVENTO_LOGISTICOS exite un campo ID_EVENTO que es con el cual relaciono el formulario de eventos con un subformulario de eventos_logisticos. Los otros campos (dentro de la tabla EVENTOS_LOGISTICOS) que intervienen en el problema son: hora_entrada, hora_salida, id_logistico y fecha .
Lo que quiero hacer es validar que no se pueda ingresar un rango de horario de trabajo de un logístico que ya se encuentre en la tabla EVENTO_LOGISTICOS, es decir, si un logístico con el ID_LOGISTICO 100 tiene registrado un rango de horario trabajado de 9am - 5pm, el subformulario no debería permitir ingresar un rango de horario de 10am - 2pm pues se supone que ya trabajó en el rango horario anterior (todo esto sobre el mismo día). Algo así :
1
2
3
4
5
' |------- A ---------|
'01 - 02 - 03 - 04 - 05 - 06 - 07 - 08 - 09 - 10 - 11 - 12
' |------- B ------|
' |------- C -------|
' |----------------- D- ------------------|
Para eso he intentado trabajar con una consulta que valide justamente que esos rangos no se presenten en la base de datos; lo intenté con DLOOKUP y fue frustrante. traté de hacer la sentencia SQL y presentaba errores que la verdad no sé de dónde salieron (creo que era comparando las horas, algo con los formatos) y finalmente estoy tratando de llevar una consulta que creé directamente con el diseñador de consultas para almacenar los resultados en un Recordset y así poder trabajar con ellos pero me muestra el error "Pocos parámetros se esperaba 4". La consulta funciona perfectamente cuando la ejecuto con access, aclarando que en access me toca cambiar los criterios como [Formularios]![fEventos]![fEvento_logisticos]![ID_LOGISTICO] por datos reales. La consulta es:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT EVENTO_LOGISTICOS.ID_EVENTO
FROM EVENTO_LOGISTICOS _
WHERE (((EVENTO_LOGISTICOS.ID_LOGISTICO)=[Formularios]![fEventos]![fEvento_logisticos]![ID_LOGISTICO])
AND ((EVENTO_LOGISTICOS.FECHA)=[Formularios]![fEvento_logisticos]![FECHA])
AND ((EVENTO_LOGISTICOS.HORA_ENTRADA) Between ([Formularios]![fEvento_logisticos]![HORA_ENTRADA])
And ([Formularios]![fEvento_logisticos]![HORA_SALIDA]))
AND ((EVENTO_LOGISTICOS.HORA_SALIDA)>=[Formularios]![fEvento_logisticos]![HORA_SALIDA]))
OR (((EVENTO_LOGISTICOS.ID_LOGISTICO)=[Formularios]![fEventos]![fEvento_logisticos]![ID_LOGISTICO])
AND ((EVENTO_LOGISTICOS.FECHA)=[Formularios]![fEvento_logisticos]![FECHA])
AND ((EVENTO_LOGISTICOS.HORA_ENTRADA)<=[Formularios]![fEvento_logisticos]![HORA_ENTRADA])
AND ((EVENTO_LOGISTICOS.HORA_SALIDA) Between ([Formularios]![fEvento_logisticos]![HORA_ENTRADA])
And [Formularios]![fEvento_logisticos]![HORA_SALIDA]))
OR (((EVENTO_LOGISTICOS.ID_LOGISTICO)=[Formularios]![fEventos]![fEvento_logisticos]![ID_LOGISTICO])
AND ((EVENTO_LOGISTICOS.FECHA)=[Formularios]![fEvento_logisticos]![FECHA])
AND ((EVENTO_LOGISTICOS.HORA_ENTRADA)>=[Formularios]![fEvento_logisticos]![HORA_ENTRADA])
AND ((EVENTO_LOGISTICOS.HORA_SALIDA)<=[Formularios]![fEvento_logisticos]![HORA_SALIDA]));
La sentencia que uso en VB es:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim dbsNorthwind As DAO.Database
Dim rstRecords As DAO.Recordset
Set dbsNorthwind = CurrentDb
Set rstRecords = dbsNorthwind.OpenRecordset("Consulta Horas Coincidentes Logísticos")
If rstRecords.EOF Then
FindRecordCount = 0
Else
rstRecords.MoveLast
FindRecordCount = rstRecords.RecordCount
End If
rstRecords.Close
dbsNorthwind.Close
If (FindRecordCount >= 1) Then
Me.Undo
MsgBox ("El rango de horario que indica coincide con uno ya existente, el registro NO se actualizó")
End If
Cabe anotar que la consulta en la base de datos efectivamente se llama "Consulta Horas Coincidentes Logísticos", el evento sobre el cual estoy programando es "Form_BeforeUpdate" y el código ejecutado no llega ni al primer If pues al recordset nunca le llega información y saca el error.
No sé si estoy yendo por el camino equivocado, no programo mucho en access y menos SQL (la sentencia sql de la consulta es la que crea access, traté de ordenarla lo que más pude).
Siento mucho si me extendí en la explicación pero era para contextualizarlos lo que más pudiera
Agradezco su colaboración.
Valora esta pregunta


0