Yo tambien uso la funcion esa del usuario.... pero da mas problemas que otra cosa, sobre todo, porque la cadena 'User' puede estar contenida en otros errores al editar el registro. Pero vamos, lo que buscas es esto:
Código:
Function USUARIO(Error:string):string;
begin
Result :=copy(error,(Ansipos('User:',error)+6),length(error)-(ansipos('User:',error)+4));
qrypuesto.ParamByName('prPuesto').AsString:=copy(error,(Ansipos('User:',error)+6),length(error)-(ansipos('User:',error)+4));
qrypuesto.Prepare;
qryPuesto.open;
try
if not (qrypuesto.IsEmpty) then
if not qrypuesto.Fields[0].IsNull then
Result:= qrypuesto.Fields[0].AsString
finally
qrypuesto.Close;
end;
result := uppercase(result);
end;
qrypuesto es una consulta que hago a mi tabla login, donde guardo el nombre de mi usuario ( el de mi programa) con el nombre del ordenador donde está trabajando, así, muestro el usuario de mi programa que ha bloqueado el registro en lugar de mostrar el nombre del ordenador.
Eso si, cuando un usuario se va del sistema tienes que borrar el campo 'puesto' de la tabla login.
Advertencia: No uses GetUserName, usuario que inició la sesion en Windows, ya que seria dependiente del sistema operativo que usa el Cliente