Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Problema con Update (https://www.clubdelphi.com/foros/showthread.php?t=85304)

NISOTO 27-02-2014 07:29:36

Problema con Update
 
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.

Código Delphi [-]
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

Cita:

Empezado por NISOTO (Mensaje 473118)
Tengo este codigo

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



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.

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 [-]
//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....


La franja horaria es GMT +2. Ahora son las 21:53:30.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi