602SQL-Úplná dokumentace Index  

TSQL602DataSetFind

Delphi / Kylix

Zjednodušená deklarace třídy:

type TSQL602DataSetFind = class(TComponent);
published
  property Active                     : Boolean;
  property DataSource                 : TDataSource;
  property CondText                   : string;
  property Options                    : TLocateOptions;

  property OnDataSetChange            : TNotifyEvent;

public

  property DataSet                    : TSQL602DataSet;  // pouze pro čtení
  property RecordCount                : trecnum;         // pouze pro čtení
  property KeyFields[Index : Integer] : string;
  property KeyValues[Index : Integer] : Variant;
  property KeyCount                   : Integer;

  constructor Create(AOwner : TComponent); override;
  destructor  Destroy; override;
  
  function Next  : Boolean;
  function Prev  : Boolean;
  function First : Boolean;
  function Last  : Boolean;

protected

  procedure DoOnDataSetChange; virtual;

end;


Popis

Komponenta umožňuje vyhledávat záznamy v napojeném datasetu. Vyhledávací podmínku lze specifikovat dvěma způsoby: jako množinu klíčových sloupců a jejich hodnot, nebo jako řetězec odpovídající klauzuli WHERE v SQL příkazu SELECT (obecnější).

Lze tímto způsobem procházet i datasety naplněné obsahem needitovatelného kurzoru, ale za cenu ztráty efektivity.



Unit

SQL602

Vlastnosti komponenty

DataSource : TDataSource

Datasource, který zprostředkovává odkaz na prohledávaný dataset.

CondText : string

Vyhledávací podmínka jako klauzule WHERE v SQL příkazu SELECT.

KeyFields[Index : Integer] : string

Seznam jmen klíčových sloupců.

KeyValues[Index : Integer] : Variant

Seznam hodnot klíčových sloupců.

KeyCount : Integer

Počet klíčových sloupců, umožňuje vynulovat seznam klíčových sloupců a jejich hodnot před novým hledáním.

Options : TLocateOptions

Příznaky vyhledávání podle klíčových hodnot.
loCaseInsensitiveŘetězce se porovnávají bez ohledu na velká a malá písmena (má smysl pouze tehdy, když prohledávaný sloupec nemá již přímo v definici tabulky klauzuli IGNORE_CASE)
loPartialKeyV případě sloupců typu CHAR(n) a NCHAR(n) se porovnává, zda hodnota sloupce začíná řetězcem zadaným v KeyValues[i]
loSubKeyV případě sloupců typu CHAR(n) a NCHAR(n) se porovnává, zda hodnota sloupce obsahuje řetězec zadaný v KeyValues[i] (není to fulltextové vyhledávání!)
Je-li vyhledávací podmínka zadána jako klauzule WHERE, nemá vlastnost Option význam.

Active : Boolean

Indikuje, zda má komponenta aktivované potřebné zdroje na SQL serveru. Nastavení hodnoty na true není nutné, aktivace se provede automaticky při prvním zavolání metody Next, Prev, First nebo Last. Nastavením hodnoty na false se zdroje na SQL serveru uvolní.

DataSet : TSQL602DataSet

Prohledávaný dataset.

RecordCount : string

Vrací počet nalezených záznamů.



Metody komponenty

function Next : Boolean;

Nastaví dataset DataSet na další záznam odpovídající zadané vyhledávací podmínce, pokud další takový záznam neexistuje vrátí false.

function Prev : Boolean;

Nastaví dataset DataSet na předchozí záznam odpovídající zadané vyhledávací podmínce, pokud takový záznam neexistuje vrátí false.

function First : Boolean;

Nastaví dataset DataSet na první záznam odpovídající zadané vyhledávací podmínce, pokud takový záznam neexistuje vrátí false.

function Last : Boolean;

Nastaví dataset DataSet na poslední záznam odpovídající zadané vyhledávací podmínce, pokud takový záznam neexistuje vrátí false.

procedure DoOnDataSetChange; virtual;

Dojde-li ke změně prohledávaného datasetu, t.j. změní-li se Filter, Order, CommandText apod., dojde k vynulování stavu komponenty TSQL602DataSetFind a případné další prohledávání bude probíhat od začátku datasetu. Tato metoda umožňuje třídě potomka na tuto událost reagovat.



Události komponenty

procedure OnDataSetChange(Sender: TObject);

Dojde-li ke změně prohledávaného datasetu, t.j. změní-li se Filter, Order, CommandText apod., dojde k vynulování stavu komponenty TSQL602DataSetFind a případné další prohledávání bude probíhat od začátku datasetu. Tato událost umožňuje aplikaci na tuto změnu reagovat.



Příklad

Vyhledávání záznamů prostřednictvím klíčových sloupců a hodnot (na rovnost)

dsf             := TSQL602DataSetFind.Create(Self);
dsf.DataSource  := DataSource1;
dsf.KeyFields[0] := 'Jmeno';
dsf.KeyValues[0] := 'Josef';
dsf.KeyFields[1] := 'Prijmeni';
dsf.KeyValues[1] := 'Novák';
dsf.Options     := [loCaseInsensitive];
while dsf.Next do begin
    .
    .
    .
end;
dsf.Free;

Vyhledávání záznamů prostřednictvím klauzule WHERE (na rovnost i nerovnost)

dsf             := TSQL602DataSetFind.Create(Self);
dsf.DataSource  := DataSource1;
dsf.CondText    := 'Jmeno=''Josef'' AND Prijmeni<>''Novák''';
while dsf.Next do begin
    .
    .
    .
end;
dsf.Free;