Cita:
Empezado por ecfisa
Hola.
Si se trata de campos alfanuméricos la función que te puse en el mensaje anterior funciona perfectamente. De tratarse de campos numéricos, tendrás que filtrar por >, <, = ,>=, <=.
Pero creo entender de tu comentario que no has podido implementar la función del mensaje #2 en tu código, por lo cuál te adjunto un demo funcionando para que puedas revisar con tranquilidad el por qué.
Crea una carpeta, descomprimí los fuentes allí y compila. (incluye dbdemos.mdb que trae Delphi)
Saludos. 
|
Hola muchas gracias por tomarte el tiempo para buscar el arhivo que me pasaste, lo he visto y De verdad agradezco tu paciencia y ayuda. Antes que nada, te pido disculpas me he expresado mal, tu codigo, como dices, no tiene ningun problema cuando es string (como nombre y apellido, y dni lo son), el problema es el campo codigo que es integer, probe colocar el AdoTable1 (que es que esta asociado con la tabla propietarios).Filter: 'DNI ='dato; pero me salta un error de "Parametros Incorrectos, fuera del intervalo permitido o en conflicto con otros'.
Me he fijado el archivo que me pasaste, pero justamente realiza la busqueda por name, capital o continent (campos string) y no por los otros campos numericos:
este es el codigo de la busqueda en el cual esta (entre comentarios) el codigo que me pasaste
Código:
function Tclasepropietario.busqueda(dato: string; opcion: Integer): Boolean;
var
ban: Boolean;
begin
ban:= False;
ADOTable1.Filtered := True;
case opcion of
1: begin
//ADOTable1.Filter:= Format(' = ',[CODIGO_TITULAR,dato]);
//if (ADOTable1.RecordCount > 0)
//then
//begin
// ban:= True;
//end
//else
//begin
// ban:= False;
//end;
if (ADOTable1.Locate('CODIGO_TITULAR',dato,[])=True)then
ban:=True;
end;
2: begin
if (ADOTable1.Locate('DNI',dato,[])=True)then
ban:=True;
end;
3: begin
ADOTable1.Filter:='APELLIDO_NOMBRES LIKE '''+dato+'*''';
if (ADOTable1.RecordCount > 0)
then
begin
ban:=True;
end
else;
begin
ban:=False;
end;
end;
end;
busqueda:= ban;
end;
He intentado implementar el codigo #2 pero como te mencione, me sigue saltando el error de "Parametros Incorrectos, Fuera del Intervalo permitido o en conflicto con otros". Lo probe con el ADOTABLE.locate (que me mencionaste despues y ha funcionado), pero cuando muestro el ADO en un DB Grid, no me filtra y me muestra solamente esa persona con el dni o con el codigo que haya escrito; solamente apunta a donde se encuentra ese registro (supongo que es por la misma funcion locate, que no es un filtro en realidad, solo busca el valor y se para alli), no es asi con el nombre el cual efectivamente me filtra los resultados.
En el siguiente codigo, ocurre el mismo error:
Código:
procedure TForm7.FormActivate(Sender: TObject);
begin
propietario:= Tclasepropietario.Create;
propietario.conectaBD;
propietario.ConectaTabla(1);
ADOTable1.Filtered:= True;
ADOTable1.Filter:='BORRADO LIKE FALSO';
DataSource1.DataSet := ADOTable1;
end;
En donde Form7 es el formulario donde realizo la modificacion de propietarios, lo que intento hacer es: en un DB Grid que esta en dicho formulario, mostrar solo aquellos cuyo campo BORRADO sea FALSO (es decir mostrar aquellos propietarios que estan activos), y a partir de ahi buscar por codigo, dni o "apellido y nombre".
Pero como te digo me salta el error mencionado.