Garfio
10-02-2009, 11:07:27
Tengo el siguiente programa en Delphi 7 con Interbase 6. Uso los componentes de base de datos de interbase. El código es:
DMRepara.QrPre.Close;
DMRepara.QrPre.UnPrepare;
DMRepara.QrPre.ParamByName('ENTRE').asstring := DMRepara.QrCab.FieldbyName('numPreaviso').asstring;
DMRepara.QrPre.Prepare;
DMRepara.QrPre.Open;
DMRepara.QrPre.First;
while not DMRepara.QrPre.Eof do
Begin
if DMRepara.QRPre.FieldByName('numEntre').AsString =
DMRepara.QRCab.FieldByName('numEntre').AsString then
Begin
DMRepara.QrUCab.Close;
DMRepara.QrUCab.UnPrepare;
DMRepara.QrUCab.ParamByName('IDMEN').asinteger := DMRepara.QrPre.FieldbyName('idMensaje').asinteger;
DMRepara.QrUCab.Prepare;
DMRepara.QrUCab.Open;
DMRepara.QrUCab.Edit;
DMRepara.QrUCab.FieldByName('procesado').AsString := '1';
DMRepara.QrUCab.Post;
end;
DMRepara.QrPre.Next;
end;
DMRepara.QRPre.Active := False;
DMRepara.QrCab.Next;
end;
end;
DMRepara.QrUCab.ApplyUpdates;
DMRepara.TRPuerto.Commit;
DMRepara.QrEntr.Close;
DMRepara.QrPre.Close;
DMRepara.QRCab.Close;
DMRepara.QrUCab.Close;
y el SQL que tengo para QrUCab es:
Para el Select
select * from "Cabeceras"
where
"idMensaje" = :IDMEN
y para el Update
update "Cabeceras"
set
"Cabeceras"."procesado" = :"procesado"
where
"Cabeceras"."idMensaje" = :"OLD_idMensaje"
el caso es que no me actualiza el campo procesado a '1'. Lo he probado asignando directamente el valor y tampoco me lo actualiza. Los componentes son TIBQuery y TIBUpdateSQL aunque tambien lo he probado con TIBDataSet y tampoco funciona.
He probado según algunos ejemplos que he visto en el foro y tampoco. Ahora lo tengo con CachedUpdates = True pero tambien lo he probado sin.
La cuestión es que me pasa por todas las sentencias que ha de pasar y no me da error, pero no me actualiza el campo.
Sinceramente, ya no se que hacer. Agradecería cualquier ayuda posible. Gracias.
DMRepara.QrPre.Close;
DMRepara.QrPre.UnPrepare;
DMRepara.QrPre.ParamByName('ENTRE').asstring := DMRepara.QrCab.FieldbyName('numPreaviso').asstring;
DMRepara.QrPre.Prepare;
DMRepara.QrPre.Open;
DMRepara.QrPre.First;
while not DMRepara.QrPre.Eof do
Begin
if DMRepara.QRPre.FieldByName('numEntre').AsString =
DMRepara.QRCab.FieldByName('numEntre').AsString then
Begin
DMRepara.QrUCab.Close;
DMRepara.QrUCab.UnPrepare;
DMRepara.QrUCab.ParamByName('IDMEN').asinteger := DMRepara.QrPre.FieldbyName('idMensaje').asinteger;
DMRepara.QrUCab.Prepare;
DMRepara.QrUCab.Open;
DMRepara.QrUCab.Edit;
DMRepara.QrUCab.FieldByName('procesado').AsString := '1';
DMRepara.QrUCab.Post;
end;
DMRepara.QrPre.Next;
end;
DMRepara.QRPre.Active := False;
DMRepara.QrCab.Next;
end;
end;
DMRepara.QrUCab.ApplyUpdates;
DMRepara.TRPuerto.Commit;
DMRepara.QrEntr.Close;
DMRepara.QrPre.Close;
DMRepara.QRCab.Close;
DMRepara.QrUCab.Close;
y el SQL que tengo para QrUCab es:
Para el Select
select * from "Cabeceras"
where
"idMensaje" = :IDMEN
y para el Update
update "Cabeceras"
set
"Cabeceras"."procesado" = :"procesado"
where
"Cabeceras"."idMensaje" = :"OLD_idMensaje"
el caso es que no me actualiza el campo procesado a '1'. Lo he probado asignando directamente el valor y tampoco me lo actualiza. Los componentes son TIBQuery y TIBUpdateSQL aunque tambien lo he probado con TIBDataSet y tampoco funciona.
He probado según algunos ejemplos que he visto en el foro y tampoco. Ahora lo tengo con CachedUpdates = True pero tambien lo he probado sin.
La cuestión es que me pasa por todas las sentencias que ha de pasar y no me da error, pero no me actualiza el campo.
Sinceramente, ya no se que hacer. Agradecería cualquier ayuda posible. Gracias.