Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Providers (https://www.clubdelphi.com/foros/forumdisplay.php?f=10)
-   -   Actualización manual en el evento BeforeUpdateRecord del DataSetProvider (https://www.clubdelphi.com/foros/showthread.php?t=32384)

Thales 04-06-2006 14:42:38

Actualización manual en el evento BeforeUpdateRecord del DataSetProvider
 
Muy buenas a todos.

Estoy utilizando TClientDataSet + DataSetProvider + IBX y en una consulta concreta necesito controlar yo la actualización de los datos, para ello en el evento BeforeUpdateRecord del DataSetProvider utilizo código similar a este (es sólo un ejemplo):

Código Delphi [-]
procedureDataModule1.Provider1BeforeUpdateRecord(Sender: TObject; SourceDS: TDataset; 
  DeltaDS: TClientDataset; UpdateKind: TUpdateKind; var Applied: Boolean);
begin
  if UpdateKind=ukDelete then
  begin
    Query1.SQL.Text:=’update CUSTOMER set STATUS=”DEL” where ID=:ID’;
    Query1.Params[0].Value:=DeltaDS.FieldByName(‘ID’).OldValue;
    Query1.ExecSQL;
    Applied:=true;
  end;
end;

que, básicamente consiste en lanzar manualmente la consulta adecuada e indicar al DataSetProvider que de por realizada la actualización.

Todo funciona a las mil maravillas... bueno tan solo un problema: si la base de datos devuelve algún error como resultado de la consulta (alguna restricción de la base de datos no se cumple por ejemplo) este error no se transmite al ClientDataSet.
Dicho de otra manera, parece que al elegir la actualización manual perdemos el tratamiento automático de errores y estos ya no se propagan a la máquina cliente sino que se lanzan en el servidor de aplicaciones.
Necesito de algún mecanismo para que no se lance el error y que se traslade a la máquina cliente para que lo vea el usuario.

¿Alguna idea al respecto?

Thales 05-06-2006 23:37:36

He seguido haciendo pruebas y al parecer los errores que se producen a nivel del DatasetProvider, sí que se trasladan al ClientDataSet.
Lo que me había confundido es que los errores no se manifiestan en el evento OnReconcileError del ClientDataset como ocurre cuando la actualización es automática, sino que saltan al finalizar la ejecución de ApplyUpdates, o eso me ha parecido al menos, ya que las pruebas las estoy haciendo con las dos capas conectadas por el componente LocalConnection

Un saludo

Al González 05-10-2006 00:09:42

¡Hola a todos!

¿Cómo le haces cuándo se trata de una modificación de registro y no todos los campos fueron modificados? Me gustaría conocer algún ejemplo; en este momento estoy buscando qué sería lo más recomendable al utilizar TDataSetProvider con dbExpress.

Cualquier ayuda al respecto será bien recibida.

Un abrazo dudoso.

Al González. :)


La franja horaria es GMT +2. Ahora son las 20:54:56.

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