Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problem con IF y Else (https://www.clubdelphi.com/foros/showthread.php?t=81356)

BioStudio 07-11-2012 01:48:14

Problem con IF y Else
 
Resulta que debo verificar unos campos que estos esten completos, por ende use un IF para verificar cada uno, entonces en el caso que uno de estos campos no este completo mostramos un mensaje de error, en el caso que este completos, ejecutamos una funcion x:

Código Delphi [-]
// Agregar información a la Tabla.
      IF Edit1.Text = '' THEN
        // Si la caja de Texto de Nombre de Usuario esta sin contenido, lanzamos
        // Error.
        begin
        Application.MessageBox( 'No ha rellenado el nombre del usuario.', 'Acceso denegado', MB_ICONSTOP );
        end;
      if Edit2.Text = '' Then
              // Si la caja de Texto de Password esta sin contenido, lanzamos
              // Error.
              begin
              Application.MessageBox( 'No ha rellenado el password para el usuario.', 'Acceso denegado', MB_ICONSTOP );
              end
      else;

with X.X.X.X do
    begin (...)

bien lo que pasa es que, por ejemplo no completamos nada pero siguen cumpliendo la función, he cambiado muchas veces los ";" y nada.. osea que verifica el primer Edit, no esta completo lanza error, mira el Edit2, no esta completo y luego ejecuta la función, cosa que no debe pasa. como se soluciona esto?

ecfisa 07-11-2012 02:00:17

Hola BioStudio.

Podes hacer:
Código Delphi [-]
  ...
  if Edit1.Text = '' then
  begin
    MessageBox(Handle,'No ha rellenado el nombre del usuario.', 'Acceso denegado', MB_ICONERROR);
    Edit1.SetFocus;
    Exit
  end;
  if Edit2.Text = '' then
  begin
    MessageBox(Handle,'No ha rellenado el password para el usuario.', 'Acceso denegado', MB_ICONERROR);
    Edit2.SetFocus;
    Exit
  end;
  // resto del código
  ...

Saludos.

Maniches 07-11-2012 21:59:26

Yo creería que pruebes controlarlo en los eventos OnExit de cada componente TEdit:
Ya que si se hiciera clic en el botón de validación. al salir del foco del componente le va a exigir que haya ingresado: Edit1 ó Edit2
Ya que no tiene mucho sentido que se intente ingresar con usuario/password vacios...
Es mi recomendación.

Saludos.

Maniche :)

roman 07-11-2012 22:12:07

Una variante de la propuesta de ecfisa, usando excepciones:

Código Delphi [-]
 ...
  if Edit1.Text = '' then
  begin
    Edit1.SetFocus;
    raise Exception.Create('No ha rellenado el nombre del usuario.';
  end;
  if Edit2.Text = '' then
  begin
    Edit2.SetFocus;
    raise Exception.Create('No ha rellenado el password para el usuario.');
  end;
  // resto del código
  ...

// Saludos

dec 07-11-2012 22:45:51

Cita:

Empezado por roman (Mensaje 448873)
Una variante de la propuesta de ecfisa, usando excepciones:

Código Delphi [-]
 ...
  if Edit1.Text = '' then
  begin
    Edit1.SetFocus;
    raise EInvalidArgument.Create('No ha rellenado el nombre del usuario.';
  end;
  if Edit2.Text = '' then
  begin
    Edit2.SetFocus;
    raise EInvalidArgument.Create('No ha rellenado el password para el usuario.');
  end;
  // resto del código
  ...

// Saludos

:eek: :rolleyes: :) :D ;) :cool: :p

roman 08-11-2012 18:01:55

Aunque semánticamente EInvalidArgument luce adecuado, la ayuda de delphi dice:

Cita:

EInvalidArgument is the exception class for out-of-range parameters in specialized math and accounting functions.
que no necesariamente tiene qué ver con las validaciones que aquí se hacen.

Pero es cierto es que conviene más usar una excepción específica que una general como la que puse yo. Quizá definir un EEmptyField y/o EInvalidField.

// Saludos

dec 08-11-2012 18:18:49

Hola,

Sí; quizá tomé el "InvalidArgument" demasiado alegremente... quizá porque me fié de Delphi Basics. Pero entendiste la idea Román. ;)

roman 08-11-2012 18:32:02

Cita:

Empezado por dec (Mensaje 448950)
Pero entendiste la idea Román. ;)

Síp :)

// Saludos


La franja horaria es GMT +2. Ahora son las 12:36:22.

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