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