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)
-   -   FireDac+OldValue (https://www.clubdelphi.com/foros/showthread.php?t=89829)

Luis M. 14-02-2016 17:45:43

FireDac+OldValue
 
Hola.
Estoy intentando obtener el valor de la propiedad OldValue de un campo pero parece que no funciona en Firedac.
Me devuelve el mismo valor que ingreso en un dbEdit.
La base de datos es Firebird 2.5.
Este es el código que pongo en el evento AfterPost del DataSet:

Código Delphi [-]
  if (FactuF_APUNTE.OldValue <> FactuF_APUNTE.AsDateTime) and
     (FactuAPUNTE.OldValue <> FactuAPUNTE.AsString) then
  begin
    QDm.Close;
    QDm.SQL.Text := 'Update conta set documento = null,f_documento = null '+
                    'where (f_apunte = :dF_Apunte) and (apunte = :cApunte)';
    QDm.ParamByName('dF_Apunte').Value := FactuF_APUNTE.OldValue;
    QDm.ParamByName('cApunte').Value := FactuAPUNTE.OldValue;

    QDm.ExecSQL;
    QDm.Close;
  end;

Si pongo este mismo código en el evento OnUpdateRecord (según la ayuda de Delphi),
si obtengo el valor, pero no me guarda las modificaciones que hago en el DataSet.
Alguna sugerencia?
Gracias y un saludo.

AgustinOrtu 14-02-2016 20:30:32

El evento AfterPost se dispara luego de grabar

El indicado sería el BeforePost

After --> después
Before --> antes

Luis M. 14-02-2016 21:43:54

Hola.
Gracias por responder.
En el BeforePost pongo todas las validaciones que quiero para los campos.
ejemplo:
Código Delphi [-]
  if FactuNUMERO.IsNull then
  begin
    MensajeError('Introduzca el número de la factura.',tdiError);
    FactuNUMERO.FocusControl;
    Abort;
  end;

Lo pongo en este evento por que es ahí cuando me interesa que se dispare.
Una vez que ya los datos han sido confirmados y grabados a la DB.
Códigos parecidos al del post anterior me funcionan perfectamente con delphi 2007 y los
componentes MDO.
Pero con delphi 10 Seattle y FireDac me encuentro con esta situación.
Según la ayuda http://docwiki.embarcadero.com/Libra...OnUpdateRecord , en el evento OnUpdateRecor se obtienen dicho valor y así es, pero si coloco el código en este evento
parece que todo va bien, hasta que cierro la ventana de facturas.
Cuando la vuelvo a abrir me encuentro que las modificaciones que había hecho a los datos no se mantienen.

AgustinOrtu 15-02-2016 02:07:24

Ya veo, yo nunca trabaje en profundidad con los eventos de los DataSet; mas bien prefiero moverme usando comandos sql y querys; pero eso es tema aparte


Solo se me ocurren tres cosas:

1. Algun problema de transacciones, sobre todo debido a "parece que todo va bien, hasta que..vuelvo a abrir y no se aplicaron los cambios"

2. Segun la documentacion, en el evento OnUpdateRecord hay que asignar un valor al parametro AAction; si todo va bien, deberia setearse al valor eaApplied

3. La propiedad OldValue de TField solo funciona si se usan Cached Updates, tal como lo dice la documentacion

En este enalce se explica todo sobre Cached Updates con FireDAC


La franja horaria es GMT +2. Ahora son las 20:29:35.

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