Problema con sentencia if then else
Hola como estas, gracias por tu ayuda a la pregunta anterior. Ahora estoy lidiando con un nuevo problema. Tengo aplicada una sentencia if para validar unos campos si están vacíos o no, pero lo que me sucede es que después de aplicar la condición del if también lo hace con el else, no se detine. Pongo a continuación el código.
procedure Tagregapersona.Button1Click(Sender: TObject);
var
sexoelegido:string;
ecivilelegido:string;
empresacelularelegida:string;
begin
case sexo.ItemIndex of
0:
sexoelegido:= 'Hombre';
1:
sexoelegido:= 'Mujer' ;
end;
case ecivil.ItemIndex of
0:
ecivilelegido:= 'Soltero';
1:
ecivilelegido:= 'Casado' ;
end;
case empresacelular.ItemIndex of
0:
empresacelularelegida:= 'Personal';
1:
empresacelularelegida:= 'Claro';
2:
empresacelularelegida:= 'Movistar';
3:
empresacelularelegida:= 'Nextel';
end;
begin
if ((nombre.Text='') or (apellido.Text='') or (prefcelu.Text='') or (celu.Text='') or (empresacelular.ItemIndex=-1)) then
showmessage('Debe completar los campos obligatorios')
else
Adoquery1.Active:=false;
Adoquery1.Close;
Adoquery1.SQL.Clear;
Adoquery1.SQL.Text:='insert into dato (nombre,apellido,sexo,mail,profesion,ecivil,fnacimiento,telefono1,telefono2,prefcelu,celu,empresacelu) values ("'+nombre.Text+'","'+apellido.Text+'","'+sexoelegido+'","'+mail.Text+'","'+profesion.text+'","'+ecivilelegido+'","'+datetimetostr(fnacimiento.DateTime)+'","'+telefono1.Text+'","'+telefono2.Text+'","'+prefcelu.Text+'","'+celu.Text+'","'+empresacelularelegida+'")';
ADOQuery1.ExecSQL;
Adoquery1.Active:=false;
Adoquery1.Close;
Adoquery1.SQL.Clear;
Adoquery1.sql.Text:='select * from dato';
ADOQuery1.ExecSQL;
ADOQuery1.Open;
end
end;
Básicamente lo que hago es primero obtener las selecciones de mis Tgroup Radiobuttons y asignarles un valor.
Después de eso aplico un condicional para ver si algunos de esos 4 campos están vacíos, de estarlos muestro el mensaje, pero aquí viene el problema, si intento guardar un registro con alguno de los campos vacíos el mensaje se muestra, por lo tanto se cumple la condición del if, el problema que después de darle ok al mensaje, sigue ejecutando el else y guarda el registro en la base de datos. Ya probé de 1000 maneras y no doy con la solución de que esta mal en la sentencia, porque no me muestra ningún error, la aplicación corre normalmente. Bueno espero puedas ayudarme con esta nueva inquietud.
Me olvidaba, pero esto es para finalizar mi aplicación, tienes idea de como podría hacer para que mi aplicación tenga usuarios, los cuales se le puedan asignar permisos, como por ejemplo, si no es el administrador que los botones eliminar y borrar no sean visibles, es decir no usuarios basados en permisos de la base de datos sino de los comandos de la aplicación.
Espero haber sido claro y puedas ayudarme, desde ya muchas gracias.
procedure Tagregapersona.Button1Click(Sender: TObject);
var
sexoelegido:string;
ecivilelegido:string;
empresacelularelegida:string;
begin
case sexo.ItemIndex of
0:
sexoelegido:= 'Hombre';
1:
sexoelegido:= 'Mujer' ;
end;
case ecivil.ItemIndex of
0:
ecivilelegido:= 'Soltero';
1:
ecivilelegido:= 'Casado' ;
end;
case empresacelular.ItemIndex of
0:
empresacelularelegida:= 'Personal';
1:
empresacelularelegida:= 'Claro';
2:
empresacelularelegida:= 'Movistar';
3:
empresacelularelegida:= 'Nextel';
end;
begin
if ((nombre.Text='') or (apellido.Text='') or (prefcelu.Text='') or (celu.Text='') or (empresacelular.ItemIndex=-1)) then
showmessage('Debe completar los campos obligatorios')
else
Adoquery1.Active:=false;
Adoquery1.Close;
Adoquery1.SQL.Clear;
Adoquery1.SQL.Text:='insert into dato (nombre,apellido,sexo,mail,profesion,ecivil,fnacimiento,telefono1,telefono2,prefcelu,celu,empresacelu) values ("'+nombre.Text+'","'+apellido.Text+'","'+sexoelegido+'","'+mail.Text+'","'+profesion.text+'","'+ecivilelegido+'","'+datetimetostr(fnacimiento.DateTime)+'","'+telefono1.Text+'","'+telefono2.Text+'","'+prefcelu.Text+'","'+celu.Text+'","'+empresacelularelegida+'")';
ADOQuery1.ExecSQL;
Adoquery1.Active:=false;
Adoquery1.Close;
Adoquery1.SQL.Clear;
Adoquery1.sql.Text:='select * from dato';
ADOQuery1.ExecSQL;
ADOQuery1.Open;
end
end;
Básicamente lo que hago es primero obtener las selecciones de mis Tgroup Radiobuttons y asignarles un valor.
Después de eso aplico un condicional para ver si algunos de esos 4 campos están vacíos, de estarlos muestro el mensaje, pero aquí viene el problema, si intento guardar un registro con alguno de los campos vacíos el mensaje se muestra, por lo tanto se cumple la condición del if, el problema que después de darle ok al mensaje, sigue ejecutando el else y guarda el registro en la base de datos. Ya probé de 1000 maneras y no doy con la solución de que esta mal en la sentencia, porque no me muestra ningún error, la aplicación corre normalmente. Bueno espero puedas ayudarme con esta nueva inquietud.
Me olvidaba, pero esto es para finalizar mi aplicación, tienes idea de como podría hacer para que mi aplicación tenga usuarios, los cuales se le puedan asignar permisos, como por ejemplo, si no es el administrador que los botones eliminar y borrar no sean visibles, es decir no usuarios basados en permisos de la base de datos sino de los comandos de la aplicación.
Espero haber sido claro y puedas ayudarme, desde ya muchas gracias.
Respuesta de roberboy 68
1