Cita:
|
Empezado por roman
Únicamente tendrías que fijarte en el evento si el error realmente se debe a eso o bien a otra cosa.
|
Creo que esto no es muy claro.
El evento OnPostError puede generarse por varias razones; una de ellas es la repetición de un campo con índice único, pero puede haber otras, por ejemplo, que no se proporcione valor para un campo requerido. En general, el evento se puede generar por cualquier cosa que contravenga a las restricciones impuestas en la estructura de la tabla.
Por ello es que debes determinar qué tipo de error es el que generó el evento y actuar de acuerdo a ello.
Para determinar el error debes hacer uso del parámetro E del evento. Este parámetro es un objeto excepción. Qué clase de objeto sea dependerá de la forma en que accedas a la base de datos. En tu caso, dado que accedes por medio del BDE, E será de clase EDBEngineError por lo que debes hacer un moldeo de tipos y usar la propiedad Error del objeto para determinar el tipo de error. Un ejemplo sencillo:
Código Delphi
[-]
procedure TForm1.Table1PostError(
DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction
);
begin
if E is EDBEngineError then
case EDBEngineError(E).Errors[0].ErrorCode of
eKeyViol:
begin
ShowMessage('ya existe un dispositivo con este nombre');
Action := daAbort;
end;
eRequiredFieldMissing:
begin
ShowMessage('falta el valor de un campo requerido');
Action := daAbort;
end;
end;
end;
Si el error que genera el evento no es ninguno de los especificados entonces el parámetro Action seguirá con su valor por defecto que es daFail que ocasionará que aparezca el mensaje por defecto para ese error.
Las constantes eKeyViol, eRequiredFieldMissing tienes que definirlas tú. Puedes consultar
este hilo para más detalles de esto último.
// Saludos