Si me aceptas una sugerencia creo que estas subutilizando recursos, si trabajas con un manejador de base de datos relacional pero trabajas como sifuera local, esto lo digo debido a que expones que trabajas con Locate, esto quiere decir que tienes que cargar todos los registros de la tabla para que funcione, lo que yo te propongo sera algo como esto:
Para la primera consulta
Código Delphi
[-]sq.SQL.Active := False;
sq.SQL.Text := 'Select * from tabla where codigo = ' + QuotedStr(Edit1.Text);
sq.SQL.Active := True;
sq.First;
y para el boton siguiente solo deberias hacer esto:
Código Delphi
[-]if sq.Eof then ShowMessage('Ha llegado al final')
else sq.Next;