Hola
Bien, para empezar:
1- recorrer la tabla no es correcto, imaginate que tengas muchos datos, esto hace que el programa sea lento.
2- hacer o crear variables donde no se necesitas es gastar recursos, el programa crece innecesariamente.
3- Leer tanto el nombre como la clave en un solo IF es un error, ya que no necesariamente el usuario estara mal o la clave.
Bueno, para mi algo sencillo es esto:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
var
Filtro: String;
Cuenta: integer;
begin
Table1.Filtered:= False;
Filtro := 'Nombre = '+Edit1.Text;
Table1.Filter := Filtro;
if table1.FieldByName('Nombre').AsString = Edit1.Text then
begin
Cuenta := Cuenta + 1;
Table1.Filtered:= False;
Filtro := 'Clave = '+Edit2.Text;
Table1.Filter := Filtro;
if table1.fieldbyname('Clave').Asstring = Edit2.Text then
begin
Form2:=TForm2.Create(self);
try
Form1.Visible:= False;
Form2.ShowModal;
finally
Form2.Free;
end;
end
else
Begin
Cuenta := Cuenta + 1;
MessageDlg('Clave Inválida',mtError, [mbOK], 0);
Edit1.Text := '';
Edit1,SetFocus;
If Cuenta = 3 then Close;
end;
end;
Como ves, se filtra solo el nombre, si es el correcto entonces se filtra la clave, no se pierde tiempo ni recursos.
Se inicia la cuenta desde la búsqueda del nombre.
Se crea el form 2, no se hace desde el principio, es una mala practica.
Simplemente se esconde el form 1, no hace falta nada mas.
Se elimina el form 2 cuando el programa termina.
Saludos