Hola, creo que debes reconciderar el uso del SQL, con esto no te digo que cambies nada, pero si muy bien podrías ausiliarte de una función que use una instrucción sql para resolber tu problema:
Te confieso que no estoy muy empapado en tu programa, no se los componentes que usas etc, pero me he concentrado en el problema actual, si como supongo siempre debes coger el valor inmediato superior al peso introducido en caso de no ser este uno de los existentes puedes crearte una función similar a esta:
Código Delphi
[-]
function paLocate(Peso: String): String;
Var
Query:TADOQuerybegin
Query:= TADOQuery.Create(nil);
Try
Query.Connection :=ADOConnection1; Query.SQL.Text := 'Select min(peso) from TuTabla where Peso >= '+Peso;
Result := Query.Fields[0].asString;
finally
Query.Free
end
end;
Fíjate que te va a devolver el primer valor que sea mayor que el que has pasado como parámetro y en caso de que el parámetro exista en la base de datos te debe devolver ese mismo valor.
Pues nada que el resultado de esa función es el que le debes pasar a tu locate
Código Delphi
[-]
var
MyPeso:String;
begin
MyPeso := paLocate(Edit3.Text)
DTMGesatrans.TTarifa.Locate('Peso',StrToInt(MyPeso ),[]);
end;
Espero que esto te de alguna idea, ya comentarás como te fue.
Consejo: No tienes idea de la cantidad de quebraderos de cabeza que te puedes quitar con solo usar pequeñas inyecciones de SQL en tu sistema.
Saludos