Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   problema con actualizacion (https://www.clubdelphi.com/foros/showthread.php?t=48726)

UREÑA 02-10-2007 21:39:11

problema con actualizacion
 
hola amigos buen dia!!!
una ves mas yo con mis dudas...:rolleyes:

lo que pasa es que quiero hacer una actualizacion de dos campos
Código SQL [-]
try
      frm_DataModule.trans_Commit.StartTransaction;
      frm_DataModule.qry_Alum_Calificacion.Close;
      frm_DataModule.qry_Alum_Calificacion.SQL.Clear;
      frm_DataModule.qry_Alum_Calificacion.SQL.Add('UPDATE CALIFICACION set CALIFICACION.M01 ='+QuotedStr(Edit2.Text)+', CALIFICACION.ID_MATERIA1 = '+'No Esta Cursando'+'');
      frm_DataModule.qry_Alum_Calificacion.SQL.Add('WHERE CALIFICACION.MATRICULA ='+QuotedStr(Label2.Caption)+'');
      frm_DataModule.qry_Alum_Calificacion.SQL.Text;
      frm_DataModule.qry_Alum_Calificacion.ExecSQL;
      frm_DataModule.trans_Commit.Commit;
    Except
      frm_DataModule.trans_Commit.Rollback;

no me marca ningun error pero no me actualiza:mad:
ya probe el update en ib expert y en acces y si me actualiza los dos campos lo mas probable es que tenga un error en el codigo de delphi

bueno muchas gracias espero y me puedan ayudar estoy usando firebird

;)

duilioisola 02-10-2007 21:54:12

Veo algunas cosas que no parecen estar bien:
Código Delphi [-]
   try
      frm_DataModule.trans_Commit.StartTransaction;
      frm_DataModule.qry_Alum_Calificacion.Close;
      frm_DataModule.qry_Alum_Calificacion.SQL.Clear;
      frm_DataModule.qry_Alum_Calificacion.SQL.Add('UPDATE CALIFICACION set CALIFICACION.M01 ='+QuotedStr(Edit2.Text)+', CALIFICACION.ID_MATERIA1 = '+'No Esta Cursando'+'');
      frm_DataModule.qry_Alum_Calificacion.SQL.Add('WHERE CALIFICACION.MATRICULA ='+QuotedStr(Label2.Caption)+'');
{qué es esta linea?}
      frm_DataModule.qry_Alum_Calificacion.SQL.Text;
      frm_DataModule.qry_Alum_Calificacion.ExecSQL;
      frm_DataModule.trans_Commit.Commit;
   Except
{Aqui pon algo para saber si hizo el rollback}
      hay_error := True; {por ejemplo}
      frm_DataModule.trans_Commit.Rollback;
   end;

- La linea "frm_DataModule.qry_Alum_Calificacion.SQL.Text;" creo que no sirve para nada. Quizás asi sola de un error y entre directamente al Except y haga el Rollback.
- Pones un par de cadenas vacías al final de cada Add(....+''). Esto no sirve para nada.
- Qué tipo de campo son M01, ID_MATERIA1 y MATRICULA ?

- El SQL qudaría algo asi:
Código SQL [-]
UPDATE CALIFICACION 
set CALIFICACION.M01 ='EEE', CALIFICACION.ID_MATERIA1 = No Esta Cursando
WHERE CALIFICACION.MATRICULA ='LLL'

Como podrás ver "CALIFICACION.ID_MATERIA1 = No Esta Cursando" no creo que sea correcto.
O bien, si MATERIA1 es un string debería estar entre comillas
O debes poner algo correcto si no es un string (numero, boolean, etc.)

Nota: No es necesario que llames cada campo con el nombre de la tabla, si no utilizas muchas tablas en la consulta.

Yo creo que debería quedar asi:
Código Delphi [-]
   try
      frm_DataModule.trans_Commit.StartTransaction;
      frm_DataModule.qry_Alum_Calificacion.Close;
      frm_DataModule.qry_Alum_Calificacion.SQL.Clear;
      frm_DataModule.qry_Alum_Calificacion.SQL.Add('UPDATE CALIFICACION set M01 ='+QuotedStr(Edit2.Text)+', ID_MATERIA1 = '+QuotedStr('No Esta Cursando'));
      frm_DataModule.qry_Alum_Calificacion.SQL.Add('WHERE MATRICULA ='+QuotedStr(Label2.Caption));
      frm_DataModule.qry_Alum_Calificacion.ExecSQL;
      frm_DataModule.trans_Commit.Commit;
   Except
      frm_DataModule.trans_Commit.Rollback;
      MessageDlg('Ha ocurrido un error al modificar los datos.', mtError,[mbOk], 0);
   end;

duilioisola 02-10-2007 22:04:07

Otra forma un poco más elegante:
Código Delphi [-]
   with frm_DataModule.qry_Alum_Calificacion do
   begin
      try
         {es la transaccion de frm_DataModule.qry_Alum_Calificacion, por el with}
         Transaction.StartTransaction; 
         Close;
         SQL.Clear;
         SQL.Add('UPDATE CALIFICACION set M01 ='+QuotedStr(Edit2.Text)+', ID_MATERIA1 = '+QuotedStr('No Esta Cursando'));
         SQL.Add('WHERE MATRICULA ='+QuotedStr(Label2.Caption));
         ExecSQL;
         Transaction.Commit;
      except
         Transaction.Rollback;
         MessageDlg('Ha ocurrido un error al modificar los datos.', mtError,[mbOk], 0);
      end;
   end; {with}

UREÑA 03-10-2007 17:26:52

gracias amigos ya quedo listo solo le agregue el QuotedStr('No esta Cursando') y listo

me an vuelto a sacar de otro apuro
muchas gracias!!


La franja horaria es GMT +2. Ahora son las 15:55:54.

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