Ver Mensaje Individual
  #7  
Antiguo 17-06-2013
nefore nefore is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 25
Reputación: 0
nefore Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
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.
Responder Con Cita