Ver Mensaje Individual
  #6  
Antiguo 02-10-2003
marcial marcial is offline
Miembro
 
Registrado: may 2003
Posts: 147
Reputación: 22
marcial Va por buen camino
Cita:
Posteado originalmente por marcoszorrilla
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.


Gracias de nuevo por contestar, pero creo que si pongo "if GetComputerName..." lo que obtengo es el nombre del usuario local y lo que yo quiero saber es qué usuario de la red es el que bloquea, no el nombre de mi usuario.

PC1 PC2
Edita primero el registro Quiero que aparezca: Registro bloqueado por PC1
Responder Con Cita