Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Buscar y Reemplazar en un ADOTable (https://www.clubdelphi.com/foros/showthread.php?t=10935)

rjsitruiz 01-06-2004 21:33:24

Buscar y Reemplazar en un ADOTable
 
Hola

Alguien tiene implementado ya... algun procedimiento... de buscar y reemplazar en parecido al de Access ??

Empezé a hacerlo con el Locate.. pero me esta costando mas trabajo de lo que yo pensaba

Saludos

__marcsc 01-06-2004 22:52:27

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 :p

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!


La franja horaria es GMT +2. Ahora son las 20:01:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi