PDA

Ver la Versión Completa : Actualización manual en el evento BeforeUpdateRecord del DataSetProvider


Thales
04-06-2006, 15:42:38
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):


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
06-06-2006, 00: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, 01: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. :)