Delphi - Búsqueda en un TDataSet !!!

 
Vista:

Búsqueda en un TDataSet !!!

Publicado por Fabián (64 intervenciones) el 28/05/2001 17:02:57
Hola a todos:

Estoy implementando un método de búsqueda en un query con dos opciones de búsqueda:
1) Desde el inicio del dato: Utilizo el método Locate y no tengo problemas.
2) En la totalidad del dato: Es decir, buscar en determinado campo el primer registro que contenga esa cadena, ya sea al principio, al medio o al final. ¿Qué método debería utilizar? ¿Alguien sabe si existe algún método o función de Delphi, de las RX Lib o de alguien más?

Desde ya agracezco cualquier tipo de ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Búsqueda en un TDataSet !!!

Publicado por Ernesto D'Spirito (706 intervenciones) el 08/08/2001 13:04:47
Aquí tienes una función ya hecha para buscar un texto en parte de un campo:

type
TLocateStrOption = (loCaseSensitive, loContinue);
TLocateStrOptions = set of TLocateStrOption;

function LocateStr(Dataset: TDataset; Field: TField;
Str: String; LocateOptions: TLocateStrOptions): boolean;
// Busca un texto en un campo de un dataset. La búsqueda puede ser
// sensible a mayúsculas minúsculas (opción loCaseSensitive) y puede
// puede comenzar desde el principio o a partir de la posición actual
// (opción loContinue).
//
// Devuelve True si encontró la cadena (el dataset queda posicionado
// en el registro) y False en caso contrario (el dataset queda en EOF)
//
// Copyright (c) 2001 Ernesto D'Spirito [email protected]>
var
ControlsDisabled: boolean;
begin
ControlsDisabled := Dataset.ControlsDisabled;
if not ControlsDisabled then Dataset.DisableControls;
try
if loContinue in LocateOptions then begin
if not Dataset.Eof then Dataset.Next;
end else
Dataset.First; // Busca desde el principio
if not (loCaseSensitive in LocateOptions) then
Str := UpperCase(Str);
while not Dataset.Eof do begin
if loCaseSensitive in LocateOptions then begin
if Pos(Str, Field.AsString) <> 0 then break;
end else begin
if Pos(Str, UpperCase(Field.AsString)) <> 0 then break;
end;
Dataset.Next;
end;
Result := Dataset.Eof;
finally
if not ControlsDisabled then Dataset.EnableControls;
end;
end;

Espero que te sirva.

Ernesto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar