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.
Respuesta
1
En cuanto a tu primera pregunta, lo que está sucediendo en Delphi de que el código continúa ejecutándose y se realiza la inserción del registro es correcto, por la siguiente razón. Una sentencia condicional como el IF o el ELSE que no tengan especificado código dentro de un begin y un end, sólo toman la siguiente línea de código dentro de la evaluación de la condición.
Tu código debería estar como sigue:
    if ((nombre.Text='') or (apellido.Text='') or
       (prefcelu.Text='') or (celu.Text='') or
       (empresacelular.ItemIndex=-1)) then
      showmessage('Debe completar los campos obligatorios')
    else
      begin
        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;
En cuanto a tu segunda pregunta, yo creo que deberías de crear un modelo entidad-relación (es decir un grupo de tablas relacionadas) con el cual puedas controlar toda tu seguridad, no sólo de ese sistema sino de cualquiera, no me has dicho que Base de Datos estás utilizando y por supuesto que puedes visualizar o no los botones en base a los permisos que tu definas en una tabla o grupo de tablas, ya te agregue a mi MSN para que me puedas consultar en línea.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas