PDA

Ver la Versión Completa : Problema con Update


NISOTO
27-02-2014, 07:29:36
Hola a todos,

Tengo este codigo que funciona correctamente en IBExpert y Firebird Maestro.
Pero el problema es cuando compilo y lo ejecuto en Delphi 2007, que no hace nada.

procedure TFormCarga.btnCargarClick(Sender: TObject);
begin
if MessageDlg('¿ Esta seguro que desea asignar esta carga Academica ?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
DMCarga.ibqry_Calificacion.Close;
DMCarga.ibqry_Calificacion.Sql.Clear;
DMCarga.ibqry_Calificacion.Sql.Add('UPDATE notas');
DMCarga.ibqry_Calificacion.Sql.Add('SET notas.MATERIA_UNO=(SELECT salones.MATERIA_UNO FROM salones');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE notas.AULA=salones.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('notas.IHS_UNO=(SELECT salones.IHS_UNO FROM salones');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE notas.AULA=salones.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('notas.DOCENTE_UNO=(SELECT salones.DOCENTE_UNO FROM salones');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE notas.AULA=salones.ID_SALON),');

DMCarga.ibqry_Calificacion.Sql.Add('notas.MATERIA_DOS=(SELECT salones.MATERIA_DOS FROM salones');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE notas.AULA=salones.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('notas.IHS_DOS=(SELECT salones.IHS_DOS FROM salones');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE notas.AULA=salones.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('notas.DOCENTE_DOS=(SELECT salones.DOCENTE_DOS FROM salones');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE notas.AULA=salones.ID_SALON),');

DMCarga.ibqry_Calificacion.Sql.Add('notas.MATERIA_TRES=(SELECT salones.MATERIA_TRES FROM salones');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE notas.AULA=salones.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('notas.IHS_TRES=(SELECT salones.IHS_TRES FROM salones');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE notas.AULA=salones.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('notas.DOCENTE_TRES=(SELECT salones.DOCENTE_TRES FROM salones');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE notas.AULA=salones.ID_SALON)');

{ DMCarga.ibqry_Calificacion.Sql.Add('a.MATERIA_CUATRO=(SELECT b.MATERIA_CUATRO FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('a.IHS_CUATRO=(SELECT b.IHS_CUATRO FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('a.DOCENTE_CUATRO=(SELECT b.DOCENTE_CUATRO FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');

DMCarga.ibqry_Calificacion.Sql.Add('a.MATERIA_CINCO=(SELECT b.MATERIA_CINCO FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('a.IHS_CINCO=(SELECT b.IHS_CINCO FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('a.DOCENTE_CINCO=(SELECT b.DOCENTE_CINCO FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');

DMCarga.ibqry_Calificacion.Sql.Add('a.MATERIA_SEIS=(SELECT b.MATERIA_SEIS FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('a.IHS_SEIS=(SELECT b.IHS_SEIS FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('a.DOCENTE_SEIS=(SELECT b.DOCENTE_SEIS FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');

DMCarga.ibqry_Calificacion.Sql.Add('a.MATERIA_SIETE=(SELECT b.MATERIA_SIETE FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('a.IHS_SIETE=(SELECT b.IHS_SIETE FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('a.DOCENTE_SIETE=(SELECT b.DOCENTE_SIETE FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');

DMCarga.ibqry_Calificacion.Sql.Add('a.MATERIA_OCHO=(SELECT b.MATERIA_OCHO FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('a.IHS_OCHO=(SELECT b.IHS_OCHO FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('a.DOCENTE_OCHO=(SELECT b.DOCENTE_OCHO FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');

DMCarga.ibqry_Calificacion.Sql.Add('a.MATERIA_NUEVE=(SELECT b.MATERIA_NUEVE FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('a.IHS_NUEVE=(SELECT b.IHS_NUEVE FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('a.DOCENTE_NUEVE=(SELECT b.DOCENTE_NUEVE FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');

DMCarga.ibqry_Calificacion.Sql.Add('a.MATERIA_DIEZ=(SELECT b.MATERIA_DIEZ FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('a.IHS_DIEZ=(SELECT b.IHS_DIEZ FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('a.DOCENTE_DIEZ=(SELECT b.DOCENTE_DIEZ FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');

DMCarga.ibqry_Calificacion.Sql.Add('a.MATERIA_ONCE=(SELECT b.MATERIA_ONCE FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('a.IHS_ONCE=(SELECT b.IHS_ONCE FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('a.DOCENTE_ONCE=(SELECT b.DOCENTE_ONCE FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');

DMCarga.ibqry_Calificacion.Sql.Add('a.MATERIA_DOCE=(SELECT b.MATERIA_DOCE FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('a.IHS_DOCE=(SELECT b.IHS_DOCE FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON),');
DMCarga.ibqry_Calificacion.Sql.Add('a.DOCENTE_DOCE=(SELECT b.DOCENTE_DOCE FROM salones b');
DMCarga.ibqry_Calificacion.Sql.Add('WHERE a.AULA=b.ID_SALON)');
DMCarga.ibqry_Calificacion.ExecSQL;
ShowMessage('Operacion realizada...');
end
else
begin
ShowMessage('Operacion no realizada...');
end;
end;


Ayuda por favor.

olbeup
27-02-2014, 08:34:19
El problema puede estar en el alias de la tabla "a." que no corresponde a la tabla "notas."

Un saludo.

P.D.: No se como te puedes a clarar con esta SQL.

Casimiro Notevi
27-02-2014, 09:22:26
Tengo este codigo

Recuerda poner los tags al código fuente, ejemplo:

http://www.clubdelphi.com/images/UtilizarTAGs.png

Gracias :)

oscarac
27-02-2014, 23:25:55
y te sale algun mensaje?
me imagino que has depurado el codigo

lo que yo suelo hacer es "armar" una cadena

strsql := 'Select....' + ... y asi sucesivamente
lo cual me permite ver si la cadena resultante es valida comprobandola en la consola de la base de datos

quiza alguna instruccion no es valida o como bien pregunta olbeup que cosa es a. ??

NISOTO
28-02-2014, 03:20:36
Ok,

Muchas gracias por ayudarme, el codigo lo mejore y funciona de maravilla.


procedure TFormCarga.btn3Click(Sender: TObject);
begin
DMCarga.ibqry12.Close;
DMCarga.ibqry12.Sql.Clear;
DMCarga.ibqry12.Sql.Add('UPDATE notas nt');

DMCarga.ibqry12.Sql.Add('SET nt.ASIGNATURA_UNO=(SELECT sl01a.MATERIA_UNO FROM salones sl01a WHERE nt.AULA=sl01a.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.INTENSIDAD_UNO=(SELECT sl01b.IHS_UNO FROM salones sl01b WHERE nt.AULA=sl01b.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.PROFESOR_UNO=(SELECT sl01c.DOCENTE_UNO FROM salones sl01c WHERE nt.AULA=sl01c.ID_SALON),');

DMCarga.ibqry12.Sql.Add('nt.ASIGNATURA_DOS=(SELECT sl02a.MATERIA_DOS FROM salones sl02a WHERE nt.AULA=sl02a.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.INTENSIDAD_DOS=(SELECT sl02b.IHS_DOS FROM salones sl02b WHERE nt.AULA=sl02b.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.PROFESOR_DOS=(SELECT sl02c.DOCENTE_DOS FROM salones sl02c WHERE nt.AULA=sl02c.ID_SALON),');

DMCarga.ibqry12.Sql.Add('nt.ASIGNATURA_TRES=(SELECT sl03a.MATERIA_TRES FROM salones sl03a WHERE nt.AULA=sl03a.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.INTENSIDAD_TRES=(SELECT sl03b.IHS_TRES FROM salones sl03b WHERE nt.AULA=sl03b.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.PROFESOR_TRES=(SELECT sl03c.DOCENTE_TRES FROM salones sl03c WHERE nt.AULA=sl03c.ID_SALON),');

DMCarga.ibqry12.Sql.Add('nt.ASIGNATURA_CUATRO=(SELECT sl04a.MATERIA_CUATRO FROM salones sl04a WHERE nt.AULA=sl04a.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.INTENSIDAD_CUATRO=(SELECT sl04b.IHS_CUATRO FROM salones sl04b WHERE nt.AULA=sl04b.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.PROFESOR_CUATRO=(SELECT sl04c.DOCENTE_CUATRO FROM salones sl04c WHERE nt.AULA=sl04c.ID_SALON),');

DMCarga.ibqry12.Sql.Add('nt.ASIGNATURA_CINCO=(SELECT sl05a.MATERIA_CINCO FROM salones sl05a WHERE nt.AULA=sl05a.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.INTENSIDAD_CINCO=(SELECT sl05b.IHS_CINCO FROM salones sl05b WHERE nt.AULA=sl05b.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.PROFESOR_CINCO=(SELECT sl05c.DOCENTE_CINCO FROM salones sl05c WHERE nt.AULA=sl05c.ID_SALON),');

DMCarga.ibqry12.Sql.Add('nt.ASIGNATURA_SEIS=(SELECT sl06a.MATERIA_SEIS FROM salones sl06a WHERE nt.AULA=sl06a.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.INTENSIDAD_SEIS=(SELECT sl06b.IHS_SEIS FROM salones sl06b WHERE nt.AULA=sl06b.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.PROFESOR_SEIS=(SELECT sl06c.DOCENTE_SEIS FROM salones sl06c WHERE nt.AULA=sl06c.ID_SALON),');

DMCarga.ibqry12.Sql.Add('nt.ASIGNATURA_SIETE=(SELECT sl07a.MATERIA_SIETE FROM salones sl07a WHERE nt.AULA=sl07a.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.INTENSIDAD_SIETE=(SELECT sl07b.IHS_SIETE FROM salones sl07b WHERE nt.AULA=sl07b.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.PROFESOR_SIETE=(SELECT sl07c.DOCENTE_SIETE FROM salones sl07c WHERE nt.AULA=sl07c.ID_SALON),');

DMCarga.ibqry12.Sql.Add('nt.ASIGNATURA_OCHO=(SELECT sl08a.MATERIA_OCHO FROM salones sl08a WHERE nt.AULA=sl08a.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.INTENSIDAD_OCHO=(SELECT sl08b.IHS_OCHO FROM salones sl08b WHERE nt.AULA=sl08b.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.PROFESOR_OCHO=(SELECT sl08c.DOCENTE_OCHO FROM salones sl08c WHERE nt.AULA=sl08c.ID_SALON),');

DMCarga.ibqry12.Sql.Add('nt.ASIGNATURA_NUEVE=(SELECT sl09a.MATERIA_NUEVE FROM salones sl09a WHERE nt.AULA=sl09a.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.INTENSIDAD_NUEVE=(SELECT sl09b.IHS_NUEVE FROM salones sl09b WHERE nt.AULA=sl09b.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.PROFESOR_NUEVE=(SELECT sl09c.DOCENTE_NUEVE FROM salones sl09c WHERE nt.AULA=sl09c.ID_SALON),');

DMCarga.ibqry12.Sql.Add('nt.ASIGNATURA_DIEZ=(SELECT sl10a.MATERIA_DIEZ FROM salones sl10a WHERE nt.AULA=sl10a.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.INTENSIDAD_DIEZ=(SELECT sl10b.IHS_DIEZ FROM salones sl10b WHERE nt.AULA=sl10b.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.PROFESOR_DIEZ=(SELECT sl10c.DOCENTE_DIEZ FROM salones sl10c WHERE nt.AULA=sl10c.ID_SALON),');

DMCarga.ibqry12.Sql.Add('nt.ASIGNATURA_ONCE=(SELECT sl11a.MATERIA_ONCE FROM salones sl11a WHERE nt.AULA=sl11a.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.INTENSIDAD_ONCE=(SELECT sl11b.IHS_ONCE FROM salones sl11b WHERE nt.AULA=sl11b.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.PROFESOR_ONCE=(SELECT sl11c.DOCENTE_ONCE FROM salones sl11c WHERE nt.AULA=sl11c.ID_SALON),');

DMCarga.ibqry12.Sql.Add('nt.ASIGNATURA_DOCE=(SELECT sl12a.MATERIA_DOCE FROM salones sl12a WHERE nt.AULA=sl12a.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.INTENSIDAD_DOCE=(SELECT sl12b.IHS_DOCE FROM salones sl12b WHERE nt.AULA=sl12b.ID_SALON),');
DMCarga.ibqry12.Sql.Add('nt.PROFESOR_DOCE=(SELECT sl12c.DOCENTE_DOCE FROM salones sl12c WHERE nt.AULA=sl12c.ID_SALON)');

DMCarga.ibqry12.ExecSQL;
DMCarga.ibtrnsctn_Calificacion.CommitRetaining;
ShowMessage('Operacion realizada con exito...');
end;

Casimiro Notevi
28-02-2014, 09:06:07
¿Qué parte de mi mensaje no has entendido? :confused:

cloayza
28-02-2014, 18:37:32
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.


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


//Usando TIBStoredProc1, de la paleta Interbase.

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

NISOTO
01-03-2014, 21:02:47
Ok, gracias

ya probe el procedimiento almacenado, y funciona muy bien.

Te agradezco, es verdad que este script funciona mas.

Gracias clubdelphi, es mejor que tener un profesor en casa....