Ver Mensaje Individual
  #32  
Antiguo 11-05-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Para empezar, difícilmente pondría una consulta así pues no hay ninguna condición que relacione ambas tablas.

Ahora, debes tener en claro qué es lo que quieres hacer. Porque al decir que quieres modificar un registro y guardarlo puede parecer obvio cuál es el objetivo, pero, ¿un registro de dónde? Los datos provienen de dos (o más) tablas y sólamente puedes hacer un UPDATE, DELETE o INSERT de una de ellas.

Vamos a ver un ejemplo concreto. Tengo tablas de alumnos, grupos y las inscripciones de los primeros en los segundos:

alumno = (id, nombre)
grupo = (id, clave, salon, creditos)
inscripcion = (alumno_id, grupo_id, calificacion)

Para presentar una lista de los alumnos de un grupo dado, a fin de que el maestro pueda asentar calificaciones, uso esta consulta SQL

Código SQL [-]
select alumno.id, grupo.id, alumno.nombre, inscripcion.calificacion
from alumno
left join alumno on alumno.id = inscripcion.alumno_id
where inscripcion.grupo_id = :grupo_id
order by alumno.nombre

En este caso, me interesa poder actualizar el campo calificacion, es decir, quiero actualizar la tabla de inscripciones.

Puedes entonce usar la propiedad ModifySQL de un objeto UpdateSQL conectado a tu Query, poniendo la siguiente sentencia:

Código SQL [-]
update inscripcion
set calificacion = :calificacion
where
  alumno_id = :OLD_alumno_id and
  grupo_id = :OLD_grupo_id

En esta consulta hay tres parámetros: calificacion, OLD_alumno_id y OLD_grupo_id.

Si esta fuese una consulta independiente, tendríamos que sustituir el parámetro calificación antes de ejecutar la consulta, y asímismo proporcionar los valores de los otros parámetros para indicar cuál es el registro que deseamos modificar.

El mecanismo de los objetos UpdateSQL nos facilitan esto, rellenando en automático los parámetros que coincidan con nombres de campos en la consulta SELECT (calificacion en este caso), proveyendo los valores que vengan del control de edición. Y otro lado, hacen uso de parámetros especiales OLD_, que contienen los valores de los campos indicados, tal y como venían de la consulta SELECT. En el ejemplo, OLD_alumno_id y OLD_grupo_id serán llenados en automático, por los valores de los campos alumno_id y grupo_id que originalmente venían con los datos.

Esto quiere decir entonces, que tu consulta SELECT debe necesariamente incluir los campos necesarios para identificar al registro que se va a modificar (o borrar en el caso de DeleteSQL), aun y cuando tales campos no los muestres al usuario.

// Saludos
Responder Con Cita