Access - Consulta de actualizacion Access solo filtra por un criterio

 
Vista:
sin imagen de perfil

Consulta de actualizacion Access solo filtra por un criterio

Publicado por Txus (7 intervenciones) el 04/01/2024 22:35:01
Hola.
Tengo esta consulta de actualización en Access:

UPDATE (RESERVAS_CABECERA INNER JOIN RESERVAS_LINEAS ON RESERVAS_CABECERA.NumeroSalida = RESERVAS_LINEAS.NumeroSalida) INNER JOIN MAESTRO_ARTICULOS
ON RESERVAS_LINEAS.CodigoArticulo = MAESTRO_ARTICULOS.CodigoArticulo
SET RESERVAS_CABECERA.Seleccionado = -1

WHERE (((MAESTRO_ARTICULOS.CodigoZonaPicking)="10")
AND ((RESERVAS_CABECERA.DenomCliente) In (SELECT DenomCliente FROM RESERVAS_CABECERA GROUP BY DenomCliente
HAVING COUNT(*) < 5)));

que solo me filtra por el segundo criterio, el de DenomCliente...
En el criterio de CodigoZonaPicking da igual lo que le ponga, que no lo tiene en cuenta.

A ver si alguien me puede ayudar.

Muchas gracias!!!
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

Consulta de actualizacion Access solo filtra por un criterio

Publicado por Anonimo (3316 intervenciones) el 04/01/2024 22:56:54
De que tipo es el dato que hay en ' MAESTRO_ARTICULOS.CodigoZonaPicking ' ¿Texto o numérico?

Si es numérico le sobran las comillas, con ellas lo vera como un texto (que puede ser 'cualquier cosa') y lo ignorara.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Consulta de actualizacion Access solo filtra por un criterio

Publicado por Txus (7 intervenciones) el 04/01/2024 23:20:34
Hola. Ahora no lo puedo comprobar, pero debe ser tipo texto, ya que estan alineados a la izquierda, y algunos son 03, 05, 06, etc.
Gracias
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

Consulta de actualizacion Access solo filtra por un criterio

Publicado por Anonimo (3316 intervenciones) el 05/01/2024 03:00:57
Verifícalo bien, hay ocasiones en que se le aplica formato y crea confusion.

Una forma de forzarlo que sea numero es aplicando la función VAL (se obtendrá un valor numérico equivalente o un cero si no detecta valor numérico).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Consulta de actualizacion Access solo filtra por un criterio

Publicado por Txus (7 intervenciones) el 05/01/2024 09:55:37
Hola de nuevo.
Si que es formato de texto. Si le pongo el dato en Vista Diseño, le pone las comillas automaticamente.
Tambien he probado con VAL y nada.

Lo que me ha dado cuenta, es que si, por ejemplo,
las filas a actualizar sin poner nada en CodigoZonaPicking, son 2
y estas corresponden al CodigoZonaPicking "03",
si pongo el "03" en ese criterio, actualiza esas 2 filas,
pero si pongo otro criterio (por ejemplo "06") no actualiza nada,
pero con este criterio "06", si que deberia actualizar otra fila.

Espero haberme explicado bien...
Gracias
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

Consulta de actualizacion Access solo filtra por un criterio

Publicado por Anonimo (3316 intervenciones) el 05/01/2024 11:18:55
Access es una aplicación informática que hace exactamente lo que le ordenan (programan) y pertenece a la generación anterior a la IA, por lo que los éxitos y los problemas son el reflejo de su programación.

Solo con lo publicado no es fácil localizar el bug, que puede estar en la programación o en los datos, pues para Access no es lo mismo que se utilice como dato PEPE (cuatro caracteres) que PEPE (cinco caracteres. tiene un espacio delante de la primera 'P'). Esta es una de las ventajas de utilizar referencias concretas (números y no letras).

Verifica que los datos que se utilizan son los correctos para encontrar el problema de porqué entienda '02' y no '06' (que puedes ser: ' 06', '06 ' o ' 06 '. Podría ser interesante actualizar la tabla (la función TRIM recorta los espacios del principio y final).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Consulta de actualizacion Access solo filtra por un criterio

Publicado por Txus (7 intervenciones) el 05/01/2024 13:22:03
Muchas gracias por el interes en mi pregunta.
Las comprobaciones que me dices, ya las hice y los datos estan bien.

Yo creo que tiene que ser algo de la expresion SQL, que solo se fija en el criterio de CodigoZonaPicking,
cuando cumple el otro criterio (DenomCliente).

O sea, que deberia filtrar por lo de DenomCliente, basandose en CodigoZonaPicking,
pero lo hace al reves.

Como bien dices, la culpa será mia y no de Access, pero no se como hacerlo.

Gracias de nuevo
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

Consulta de actualizacion Access solo filtra por un criterio

Publicado por Anonimo (3316 intervenciones) el 05/01/2024 15:47:37
Sospecho que el problema puede estar en el enfoque que se ha utilizado para obtener el origen de datos.

Es una consulta de acción, por lo que no debería mostrar resultados (solo se apreciará el resultado tras su ejecución).

Su origen de datos se basa en la combinación de varias tablas, lo que supone una serie de restricciones a tener en cuenta y la causa mas probable del problema.

Es algo que solo se puede hacer en el entorno real y con los datos reales.

Cambiar el tipo de SQL de una de acción a una de selección y se la duplica:
.- A una se le dejan las condiciones (el Where + ....)
.- A la otra sin condiciones

Se comparan los resultados y (creo que Access lo permitirá) a la que no tiene condiciones se le aplican en tiempo real (sobre la propia consulta ya ejecutada) para encontrar quien/que causa la diferencia entre lo esperado y lo obtenido.

Una vez que se encuentre el problema y aplicada la solución, se cambia nuevamente a consulta de actualización y a disfrutar del resultado.

NOTA: Si se crean una consultas previas que seleccionen los datos y se utilizan sus resultados, la ejecución acostumbra a ser mas rápida que tratar todo en único punto con todos los datos 'en bruto' (se aplica la táctica de 'divide y vencerás').
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Consulta de actualizacion Access solo filtra por un criterio

Publicado por Txus (7 intervenciones) el 05/01/2024 16:30:53
Uff, no soy muy ducho en Access, pero intentaré lo que me dices, aunque no creo que pueda hasta el lunes.
¡Muchas gracias!
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

Consulta de actualizacion Access solo filtra por un criterio

Publicado por Eduardo Pérez Fernández (317 intervenciones) el 05/01/2024 17:02:18
Pruebe con este script

1
2
3
4
5
6
7
8
9
10
11
UPDATE (RESERVAS_CABECERA INNER JOIN RESERVAS_LINEAS ON RESERVAS_CABECERA.NumeroSalida = RESERVAS_LINEAS.NumeroSalida) INNER JOIN MAESTRO_ARTICULOS
ON RESERVAS_LINEAS.CodigoArticulo = MAESTRO_ARTICULOS.CodigoArticulo
SET RESERVAS_CABECERA.Seleccionado = -1
WHERE
    MAESTRO_ARTICULOS.CodigoZonaPicking = "10" AND
    RESERVAS_CABECERA.DenomCliente In (
        SELECT DenomCliente
        FROM RESERVAS_CABECERA
        GROUP BY DenomCliente
        HAVING COUNT(*) < 5
    );

He movido la condición relacionada con MAESTRO_ARTICULOS.CodigoZonaPicking a la cláusula SET, asegurándome de que ambas condiciones sean parte del mismo bloque de actualización. Esto debería ayudar a que ambas condiciones sean consideradas al realizar la actualización.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Consulta de actualizacion Access solo filtra por un criterio

Publicado por Txus (7 intervenciones) el 08/01/2024 11:00:48
Hola Eduardo.
Acabo de probar tu script y nada, hace lo mismo: solo tiene en cuenta la Zona cuando se cumple la condicion del Cliente.
Muchas gracias de todos modos.
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

Consulta de actualizacion Access solo filtra por un criterio

Publicado por Eduardo Pérez Fernández (317 intervenciones) el 12/01/2024 15:43:23
Pruebe utilizando una subconsulta en lugar de INNER JOIN

1
2
3
4
5
6
7
8
9
10
UPDATE RESERVAS_CABECERA
SET RESERVAS_CABECERA.Seleccionado = -1
WHERE RESERVAS_CABECERA.NumeroSalida IN
    (SELECT RESERVAS_CABECERA.NumeroSalida
     FROM (RESERVAS_CABECERA
          INNER JOIN RESERVAS_LINEAS ON RESERVAS_CABECERA.NumeroSalida = RESERVAS_LINEAS.NumeroSalida)
          INNER JOIN MAESTRO_ARTICULOS ON RESERVAS_LINEAS.CodigoArticulo = MAESTRO_ARTICULOS.CodigoArticulo
     WHERE MAESTRO_ARTICULOS.CodigoZonaPicking = "10"
     GROUP BY RESERVAS_CABECERA.NumeroSalida, RESERVAS_CABECERA.DenomCliente
     HAVING COUNT(*) < 5);
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
sin imagen de perfil

Consulta de actualizacion Access solo filtra por un criterio

Publicado por Txus (7 intervenciones) el 12/01/2024 22:08:51
Hola Eduardo.
Acabo de copiar y pegar tu script y al ejecutarlo, me sale una ventana pidiendo el valor del parámetro RESERVAS_CABECERA.NumeroSalida.
SI voy a las Vista de Diseño, no esta mas que la tabla de RESERVAS_CABECERA.
¿?

He estado intentando hacer la consulta, basándome en otras consultas (como decía Anónimo) y tampoco.
Y yo que pensaba que iba a ser facil...
Muchas gracias de todos modos.
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