PDA

Ver la Versión Completa : problema con actualizacion


UREÑA
02-10-2007, 21:39:11
hola amigos buen dia!!!
una ves mas yo con mis dudas...:rolleyes:

lo que pasa es que quiero hacer una actualizacion de dos campos

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:

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:

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:

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:

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!!