PDA

Ver la Versión Completa : Problem con IF y Else


BioStudio
07-11-2012, 01:48:14
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:

// 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:

...
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:


...
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
Una variante de la propuesta de ecfisa, usando excepciones:


...
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:

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 (http://www.delphibasics.co.uk/Article.asp?Name=Exceptions). Pero entendiste la idea Román. ;)

roman
08-11-2012, 18:32:02
Pero entendiste la idea Román. ;)

Síp :)

// Saludos