Amigo NISOTO, si me permite le sugiero intente realizar este proceso de actualización con un procedimiento almacenado.
A mi humilde opinión es más optimo que el que propone usted.
Adjunto script sql, no le he provado debido a lo cual es posible que pueda tener algun error. No dude en consultar.
Ademas usted debe completar los campos que faltan y definir los tipos correspondientes a las variables declaradas.
Código SQL
[-]
CREATE OR ALTER PROCEDURE SP_UPDATENOTAS()
AS
--Declaración de las variables locales
DECLARE VARIABLE ID_NOTA INTEGER; --Identificador del registro de NOTAS
DECLARE VARIABLE AULAS INTEGER;
DECLARE VARIABLE MATERIA_UNO VARCHAR(20); --Definir tipo correcto
DECLARE VARIABLE IHS_UNO INTEGER;
DECLARE VARIABLE DOCENTE_UNO VARCHAR(10);
...
DECLARE VARIABLE MATERIA_DOCE VARCHAR(20);
DECLARE VARIABLE IHS_DOCE INTEGER;
DECLARE VARIABLE DOCENTE_DOCE VARCHAR(10);
BEGIN
FOR SELECT ID_NOTA, AULAS
FROM NOTAS
INTO :ID_NOTA, :AULAS
DO
BEGIN
--Recupera información del salon correspondiente a :AULAS
SELECT MATERIA_UNO, IHS_UNO, DOCENTE_UNO,
MATERIA_DOS, IHS_DOS, DOCENTE_DOS, ....
MATERIA_DOCE, IHS_DOCE, DOCENTE_DOCE
FROM SALONES
WHERE SALONES.ID_SALON=:AULAS
INTO :MATERIA_UNO, :IHS_UNO, : DOCENTE_UNO,
:MATERIA_DOS, :IHS_DOS, : DOCENTE_DOS, ....
:MATERIA_DOCE, : IHS_DOCE, : DOCENTE_DOCE;
UPDATE NOTAS
SET ASIGNATURA_UNO=:MATERIA_UNO,
INTENSIDAD_UNO=:IHS_UNO,
PROFESOR_UNO =: DOCENTE_UNO,
ASIGNATURA_DOS=:MATERIA_DOS,
INTENSIDAD_DOS=:IHS_DOS,
PROFESOR_DOS =: DOCENTE_DOS,
...
ASIGNATURA_DOCE=:MATERIA_DOCE,
INTENSIDAD_DOCE=:IHS_DOCE,
PROFESOR_DOCE =: DOCENTE_DOCE
WHERE NOTAS.ID_NOTA=:ID_NOTA; --Debe especificar la clave del registro nota para su correcta actualización...
END
END
Para ejecutar el procedimiento almacenado debería utilizar un
Código Delphi
[-]
DMCarga.IBStoredProc1.StoreProcName:='SP_UPDATENOTAS';
DMCarga.IBStoredProc1.ExecProc;
DMCarga.ibtrnsctn_Calificacion.CommitRetaining;
ShowMessage('Operacion realizada con exito...');
Ejemplos hay varios en el foro
Saludos cordiales