Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-10-2013
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.941
Poder: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
Código Delphi [-]

    except
      raise Exception.Create('Unidad seleccionada no valida. Selecciona una unidad' +
        chr(13)+'de disco duro local que sea accesible.');
    end;

Saludos
No NO. Esta usando un except global!

Es mala idea capturar genericamente cualquier cosa y/o asumir que el error es "Unidad seleccionada no valida".

Que te hace pensar que esa es la REAL razon? La documentacion:

http://docwiki.embarcadero.com/Libra....EFCreateError

Cita:
EFCreateError is raised when an application unsuccessfully attempts to create a file. This can occur, for example, if a user specifies an invalid file name, or specifies the name of an existing file that cannot be overwritten because the user lacks appropriate access permission.
Muestra que puedan existir multiples causas.

Tu codigo EN NINGUN MOMENTO ESTA ASEVERANDO que la unidad seleccionada sea valida.

Osea, el mensaje es una contradiccion de lo que REALMENTE hace tu codigo.
__________________
El malabarista.
Responder Con Cita
  #2  
Antiguo 17-10-2013
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.678
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por mamcx Ver Mensaje
No NO.
¿Cómo lo harías?
Responder Con Cita
  #3  
Antiguo 17-10-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola mamcx.

El texto es copia del mensaje de danielmj, mi intención no era darle la solución definitiva al problema sino sugerirle como evitar el mensaje del sistema con SetErrorMode, (además de mostrarle que podía evitar el uso de Abort).

A diario, son muchos los problemas que leemos e intentamos solucionar y a veces no podemos dedicarle a cada uno todo el tiempo que desearíamos ...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 17-10-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo.

Saliéndome un poco del planteo inicial de danielmj...

Código Delphi [-]
...
procedure TForm1.FormCreate(Sender: TObject);
var
  Device  : DWORD;
  U  : string;
  i  : Integer;
begin
  Device := GetLogicalDrives;
  for i := 1 to 32 do
    if Device shr i and 1 = 1 then
    begin
      U:= Chr(Ord('A') + i) + ':';
      if GetDriveType(PChar(U)) in [DRIVE_REMOVABLE, DRIVE_FIXED] then
        ComboBox1.Items.Add(U);
    end;
  ComboBox1.ItemIndex := 0;
end;


function DriveReady(Drv: string): Boolean;
var
  MaxLen, SysFlags: DWORD;
  SNumber: DWORD;
  OldErr,Error : DWORD;
  Msg   : string;
begin
  OldErr := SetErrorMode(SEM_FAILCRITICALERRORS);
  try
    if GetVolumeInformation(PChar(Drv+'\'),nil,0,@SNumber,MaxLen,SysFlags,nil,0) then
     Result:= True
    else
    begin
      Error := GetLastError;
      case Error of
          ERROR_INVALID_NAME       : Msg := 'Nobre de archivo, de directorio o etiqueta de volumen inválido';
          ERROR_PATH_NOT_FOUND     : Msg := 'Ruta no encontrada';
          ERROR_TOO_MANY_OPEN_FILES: Msg := 'Demasiados archivos abiertos';
          ERROR_ACCESS_DENIED      : Msg := 'Acceso denegado';
          ERROR_WRITE_PROTECT      : Msg := 'Unidad protegida contra escritura';
          ERROR_NOT_READY          : Msg := 'La unidad no esta lista';
          ERROR_NOT_DOS_DISK       : Msg := 'El disco especificado no puede ser accedido';
          ERROR_HANDLE_DISK_FULL   : Msg := 'Disco lleno';
          ERROR_INVALID_DRIVE,
          ERROR_BAD_UNIT           : Msg := 'No se puede encontrar la unidad especificada';
          // ...
       end;
       raise Exception.Create(Msg);
    end;
  finally
    SetErrorMode(OldErr);
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  if DriveReady(ComboBox1.Text) then
  begin
    // Guardar contenido del Memo
  end;
end;

Para contemplar mas errores revisa: System Error Codes

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 21-10-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 16
danielmj Va por buen camino
Hola, pregunta desde mi ignorancia... en mi proyecto, supuestamente si selecciono una unidad no válida (por que no sea accesible), me captura el error y me muestra el mensaje, pero solo contemplo ese error, entonces ¿sería acertado cubrir todos los posibles errores o con mostrar el "unidad no valida" es suficiente? Aclaro que el proyecto simplemente se centra en coger un archivo de 15Gb (ejemplo) y cortarlo en trozos para luego unirlo.

Ahora mismo muestra el mensaje de error si por ejemplo a la hora de unir los trozos selecciono la unidad de CD y no hay disco, pero como digo solo contemplo ese error en concreto.
Saludos.
Responder Con Cita
  #6  
Antiguo 21-10-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por danielmj Ver Mensaje
Hola, pregunta desde mi ignorancia... en mi proyecto, supuestamente si selecciono una unidad no válida (por que no sea accesible), me captura el error y me muestra el mensaje, pero solo contemplo ese error, entonces ¿sería acertado cubrir todos los posibles errores o con mostrar el "unidad no valida" es suficiente?
Hola Daniel.

Depende de la profundidad de la información que vos consideres que el usuario debería conococer para dar solución al problema. En mi opinión el punto es que, sea por H o sea por B, no se puede guardar el archivo. Así un mensaje que exponga de forma simple el problema, a veces es mas sencillo de entender para el lector no avezado.

Por ejemplo algo como:
Cita:
ERROR AL INTENTAR GUARDAR EL ARCHIVO.
Revise que haya un disco insertado y que haya espacio en el mismo.
Si el error persiste controle el correcto funcionamiento del disco o la unidad.
De ese modo el que está ingresando los datos hará lo que está a su alcance para corregirlo y si no puede, llamará a quién corresponda

Por mas que nuestro mensaje indique cada posible error incluyendo el número (como pa' no errarle ), de nada sirve si quién lo lee no puede interpretarlo.

Es decir, un empleado que solo carga datos en un programa de gestión y no tiene ni la más remota idea del funcionamiento de S.O. quedaría bastante confundido con mensajes como: "Error, acceso denegado", "Error, manejador inválido", ... (y me consta que de esos empleados hay)

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 22-10-2013 a las 00:44:00.
Responder Con Cita
  #7  
Antiguo 22-10-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 16
danielmj Va por buen camino
hola ecfisa,

entiendo supongo que tambien iran en funcion del tipo de usuario final, es decir, no tiene sentido dar grandes detalles de errores y sus causas y soluciones sobre una aplicacion que como es el caso de mi proyecto (cortar y unir archivos) que va dirigida a un publco determinado y digamos que no es un soft de gestion o de cierta complicacion sobre todo cuando los pocos errores que pueda dar, son los de acceso a dispositivo.

Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
duda con ECO VCL.NET cmm07 .NET 4 03-03-2008 18:53:25
duda empty Varios 4 05-05-2004 16:56:07
duda vetustas Conexión con bases de datos 12 05-11-2003 19:54:22
duda sql vetustas SQL 5 04-11-2003 15:35:39
duda haffo Varios 3 17-10-2003 19:03:37


La franja horaria es GMT +2. Ahora son las 23:59:33.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi