Consulta de actualización

Tengo una consulta que si la pongo así me funciona (UPDATE t1 SET total=5), pero si el 5 lo substituyo por una subconsulta (UPDATE t1 SET total=(SELECT SUM(total_detalle) from t2 where t2.idfactura=t1.idfactura) GROUP BY t2. Idfactura), me da error, y dice que la operación debe usar una consulta actualizable.
No se donde esta el problema

1 respuesta

Respuesta
1
UPDATE t1 SET t1.total='5'
'SELECT SUM(total_detalle) from t2 where t2.idfactura=t1.idfactura GROUP BY t2.idfactura'
Perdona, pero no me debí explicar bien:
UPDATE t1 SET t1.total=5 era una prueba para ver porque la otra consulta no me funcionaba. Esta funciona, o sea que me actualiza todos los registros a 5 en el campo total.
Y esta otra no tengo ni idea porque me da le error "la operación debe usar una consulta actualizable"
UPDATE t1 SET t1.total=(SELECT SUM(t2.total_detalle) from t2 where t2.idfactura=t1.idfactura) GROUP BY t2.idfactura.
Lo del 5 lo probé porque buscando en internet vi que a mucha gente les daba este error por no tener permisos de escritura, pero si me deja actualizar poniéndole 5, es que permisos de escritura tengo, así que ese no es el problema
Gracias
SELECT total_detalle AS SumaTotal, Sum(total_detalle) FROM t2 where t2.idfactura like ' t1.IdFactura' GROUP BY [total];
En la select le dices que total_detalle se sume todos los registros de la tabla T2, pero según el criterio where, apuntas que T2. Idfactura es = t1. Idfactura de la tabla1 hasta aquí OK, la select está bien, donde veo la anbiguedad es a la hora de hacer el update, le estas diciendo que actualice un campo que es t1
Desde un principio desde una select no se puede hacer ya que te dará error, ya sea por necesitar una consulta actualizable o por funciones de agregado, también pueden se causa de anbiguedades. Yo de ti ejecutaría la select por separado y el valor id se lo devolvería a Update, vamos que has de hacerlo en código.
Prueba esto
Idfactura lo puedes adaptar para que coja el valor de un texto, y en la select update haces lo mismo con id
Dim Misuma As Currency
Misuma = DSum("total_detalle", "T2", _
"idfactura = 12")
DoCmd.RunSQL "UPDATE t1 SET t1.total_detalle = " & Misuma & " WHERE (((t1.idfactura)=12));"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas