Ver Mensaje Individual
  #2  
Antiguo 01-06-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Reputación: 22
__marcsc Va por buen camino
Hola,

con un procedimiento es un poco complicado (o poco elengante en mi opinión) el tema de las búsquedas incrementales. Yo lo haría con una clase. Esto sería una aproximación. Ojo que no lo he probado, osea que posiblemente habrá algunos bugs, pero creo que se capta la idea

Código Delphi [-]

interface

  TBuscador = class(TObject)
  private
    FIndiceCampo: Integer;
    FDataSet: TDataSet;
  public
    constructor Create(DS: TDataSet = nil); 
    property DataSet: TDataSet read FDataSet write FDataSet; //Sobre el que se hace la búsqueda
    function Buscar(Texto: String; BuscarBOF: Boolean = True): Boolean;
  end;

implementation

//Como el valor por omisión del parámetro DS es nil, puedes llamar al constructor
//sin parámetros y asignarle posteriormente el DataSet
constructor TBuscador.Create(DS: TDataSet = nil);
begin
  inherited Create;
  FDataSet:= DS;
  FIndiceCampo:= 0;
end;

//El parámetro BuscarEOF, por defecto True, busca el texto desde el inicio del
//DataSet. En caso que se especifique el valor False, buscará incrementalmente
function TBuscador.Buscar(Texto: String; BuscarBOF: Boolean = True): Boolean;
begin
  Result:= False;
  with FDataSet do
  begin
    if BuscarBOF then
    begin
      First;
      FIndiceCampo:= 0;
    end;

    while (not EOF) and (not Result) do
    begin
      while (FIndiceCampo < Fields.Count) and (not Result) do
      begin
        //Esto seria una busqueda absoluta, si quieres opciones de búsqueda
        //parcial, con opciones de mayúsculas etc te lo dejo como mejora 
        Result:= Fields[FIndiceCampo].Text = Texto;
        Inc(FIndiceCampo);
      end;
      FIndiceCampo:= 0;
      Next;
    end;
  end;
end;

Es decir, puedes realizar una búsqueda incremental sobre cualquier punto de la tabla, solo tienes que pasarle el parámetro BuscarBOF como False.

El procedimiento de reemplazar seria casi igual, también te lo dejo para tí

No sé si me he explicado bien, para cualquier duda, ya sabes. Espero que te haya servido

Un saludo!

Última edición por __marcsc fecha: 06-06-2004 a las 23:09:29.
Responder Con Cita