Imprimir página | Cerrar ventana

Actualizar con el valor Max de otra tabla

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=87088
Fecha de impresión: 26/Marzo/2026 a las 13:27


Tema: Actualizar con el valor Max de otra tabla
Publicado por: paloma
Asunto: Actualizar con el valor Max de otra tabla
Fecha de publicación: 20/Agosto/2025 a las 12:31

Hola. ¿Cómo puedo actualizar una tabla por el valor máximo de otra tabla? Todos los intentos me dan error porque la consulta no es actualizable.

Quiero actualizar en la tabla GeneralPedidos el IdEstado por el valor máximo del IdEstado de la tabla EstadosPedidos y agrupado además por el ID, porque EstadosPedidos puede tener varias filas con el mismo ID (no sé si me explico), algo así:

UPDATE GeneralPedidos
INNER JOIN EstadosPedidos ON GeneralPedidos.Id=EstadosPedidos.Id
SET GeneralPedidos.IdEstado = (SELECT MAX(IdEstado) FROM EstadosPedidos)

La única solución que he encontrado es crear una tabla nueva "MaxEstados" solo por los valores máximos IdEstado de la tabla EstadosPedidos agrupado por ID y luego a su vez, ahora sí me deja, actualizar GeneralPedidos con esa tabla ¿pero no hay otra forma en access?

y cada vez que paso el procedimiento, ante tengo que borrarla: DELETE * FROM MaxEstados

INSERT INTO MaxEstados(Id,IdEstado) SELECT Id, Max(IdEstado) FROM EstadosPedidos GROUP BY Id

UPDATE GeneralPedidos INNER JOIN MaxEstados ON GeneralPedidos.Id= MaxEstados.Id
SET GeneralPedidos.IdEstado = MaxEstados.IdEstado


Muchas gracias, 




Respuestas:
Publicado por: xavi
Fecha de publicación: 20/Agosto/2025 a las 14:56
Hola,

¿Y si en lugar de una consulta de 2 tablas utilizas una función agregada de dominio?

UPDATE GeneralPedidos
SET GeneralPedidos.IdEstado = DMax("IdEstado", "EstadosPedidos", "Id=" & GeneralPedidos.Id)º

Nota 1: escrito al vuelo
Nota 2: los experimentos con gaseosa

Un saludo


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: paloma
Fecha de publicación: 20/Agosto/2025 a las 15:16

Hola xavi, gracias lo que pasa que esa función tarda mucho y no me compensa :(


Publicado por: Mihura
Fecha de publicación: 20/Agosto/2025 a las 16:15
La SELECT debe ser algo así:

GeneralPedidos
INNER JOIN (SELECT Id,  MAX(IdEstado) AS ValorMax FROM EstadosPedidos GROUP BY Id) AS T1
     ON GeneralPedidos.Id = T1.Id

Sorry, no puedo probarlo ... 


-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: paloma
Fecha de publicación: 20/Agosto/2025 a las 18:29

hola, gracias Mihura pero me da error de sintaxis:

Update GeneralPedidos
INNER JOIN (SELECT Id,  MAX(IdEstado) AS ValorMax FROM EstadosPedidos GROUP BY Id) AS T1
     ON GeneralPedidos.Id = T1.Id


Publicado por: Mihura
Fecha de publicación: 20/Agosto/2025 a las 21:06
Lo primero que yo haría es generar la SELECT y 'cuadrar' la consulta, ya la convertirás en una de actualización más adelante.

-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: paloma
Fecha de publicación: 25/Agosto/2025 a las 09:48

Hola, el select sería este pero ya digo, no permite la actualización:

SELECT EstadosPedidos.Id, Max(EstadosPedidos.IdEstado) FROM EstadosPedidos GROUP BY EstadosPedidos.Id


Publicado por: pitxiku
Fecha de publicación: 25/Agosto/2025 a las 17:56
Hola.

De la ayuda en línea de Access ( https://learn.microsoft.com/es-es/office/troubleshoot/access/errors-updating-query-form-data" rel="nofollow - Solución de problemas de errores al actualizar datos en una consulta o formulario - Microsoft 365 Apps | Microsoft Learn ):

[...]
Cuando la consulta calcula una suma, un promedio, un recuento u otro tipo de total en los valores de un campo, no se pueden actualizar los datos de la consulta. Además, no se puede actualizar una consulta que haga referencia a un campo de la fila Actualizar a desde una ficha cruzada, una consulta, una consulta de selección o una subconsulta que contenga totales o funciones agregadas.
[...]

Me temo que tendrás que seguir con la tabla temporal o usar la función de dominio como indicó Xavi.


Publicado por: paloma
Fecha de publicación: 27/Agosto/2025 a las 14:31

Hola, gracias. Vaya, que no hay manera. Muchas gracias 

Este hilo se puede cerrar

Saludos,


Publicado por: paloma
Fecha de publicación: 02/Septiembre/2025 a las 11:52
hola, pueden cerrar el hilo, muchas gracias.



Imprimir página | Cerrar ventana