Le he añadido una función para que nos devuelva el nombre del ordenador de la red que esta bloqueando el registro, así queda mejor. II
Código:
Procedure midberror(DataSet: TDataSet; E: EDatabaseError);
function GetComputerNetName: string
…….
Const
eKeyViol = 9729;
eRequiredFieldMissing = 9732;
eForeignKey = 9733;
eDetailsExist = 9734;
eSqlGralerror = 13059;
eInvalidTime = 10058;
eInvalidDate = 75;
EinvalidDateTime=10060;
eRegisterLocked= 10241;
implementation
……
Procedure midberror(DataSet: TDataSet; E: EDatabaseError);
var
mierror:double;
sComputerNetName:String;
sMsgeErrorBloqueo:String;
begin
mierror:= (E as EDBEngineError).Errors[0].Errorcode;
sComputerNetName:=GetComputerNetName();
sMsgeErrorBloqueo:='Imposible hacer modificaciones registro bloqueado por el usuario.'+ sComputerNetName;
if (E is EDBEngineError) then
if (E as EDBEngineError).Errors[0].Errorcode = eKeyViol then
begin
Application.MessageBox('Imposible dar alta ese registro ya existe','Atención',mb_Ok +
mb_IconQuestion);
Abort;
end;
if (E as EDBEngineError).Errors[0].Errorcode = eRequiredFieldMissing then
begin
Application.MessageBox('Imposible dar alta hay un campo vacio.','Atención',mb_Ok +
mb_IconQuestion);
Abort;
end;
if (E as EDBEngineError).Errors[0].Errorcode = eInvalidTime then
begin
Application.MessageBox('Formato de hora incorrecto.','Atención',mb_Ok +
mb_IconQuestion);
Abort;
end;
if (E as EDBEngineError).Errors[0].Errorcode = eInvalidDate then
begin
Application.MessageBox('Formato de fecha incorrecto.','Atención',mb_Ok +
mb_IconQuestion);
Abort;
end;
if (E as EDBEngineError).Errors[0].Errorcode = eInvalidDateTime then
begin
Application.MessageBox('Formato de fecha-hora incorrecto.','Atención',mb_Ok +
mb_IconQuestion);
Abort;
end;
//campo en blanco
if (E as EDBEngineError).Errors[0].Errorcode = eSqlGralerror then
begin
Application.MessageBox('Imposible dar alta hay un campo requerido vacío.','Atención',mb_Ok +
mb_IconQuestion);
Abort;
end;
if (E as EDBEngineError).Errors[0].Errorcode = eRegisterLocked then
begin
Application.MessageBox(Pchar(sMsgeErrorBloqueo),'Atención',mb_Ok +
mb_IconQuestion);
Abort;
end;
end;
//aqui capturamos el error de bloqueo
procedure TdmoPalma.CliEditError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
midberror(cli,e);
end;
procedure TdmoPalma.CliPostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
midberror(cli,e);
end;
function GetComputerNetName: string;
var
buffer: array[0..255] of char;
size: dword;
begin
size := 256;
if GetComputerName(buffer, size) then
Result := buffer
else
Result := ''
end;
Un Saludo.