Difference between revisions of "locate"
From Free Pascal wiki
Jump to navigationJump to search (lopartialkey behaviour) |
|||
Line 25: | Line 25: | ||
{{Note|Locate and lookup act at low level inside a dataset to search for records. Often it is more efficient to filter/limit what gets into the dataset in the first place, e.g. using SQL WHERE clauses.}} | {{Note|Locate and lookup act at low level inside a dataset to search for records. Often it is more efficient to filter/limit what gets into the dataset in the first place, e.g. using SQL WHERE clauses.}} | ||
− | == | + | ==Examples== |
+ | |||
+ | Using a TDBF dataset and looking for 'di Angelo', 'Di Angelo' etc in a field called | ||
+ | LASTNAME: | ||
<syntaxhighlight> | <syntaxhighlight> | ||
− | |||
uses dbf, db | uses dbf, db | ||
... | ... | ||
− | |||
− | |||
if MyDBF.Locate('LASTNAME','di Angelo',[loCaseInsensitive])then | if MyDBF.Locate('LASTNAME','di Angelo',[loCaseInsensitive])then | ||
writeln('Found record.'); | writeln('Found record.'); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | Using multiple fields to find a record. | ||
+ | |||
+ | Note: you have to add Variants to the uses clause. | ||
+ | <syntaxhighlight> | ||
+ | uses Variants; | ||
+ | .. | ||
+ | procedure LocateMyRecord; | ||
+ | var | ||
+ | aCityID, aCountryID: integer; | ||
+ | begin | ||
+ | if Locate('city_id;country_id', VarArrayOf([aCityID, aCountryID]), []) then | ||
+ | begin | ||
+ | DoSomething; | ||
+ | end; | ||
+ | end; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Revision as of 20:10, 19 February 2014
Definition
Unit: FreePascal, unit db
function Locate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean; override;
Official documentation: none
Description
locate looks for a record in the dataset where the specified search values for the specified fields match. If found, the function returns true and the cursor position/current record moves to that record.
KeyFields can be a single field name or a semicolon-separated list of fields.
KeyValue can be a variant or a variant array and the number of items must match the number of fields specified in KeyFields.
Search options can be
- loCaseInsensitive: ignore upper case/lower case differences when searching
- loPartialKey: match partial finds (instead of the complete key). Note: this only works for string-type fields, not for number/date/currency etc fields where this option is ignored.
Note: Locate is only implemented in non-unidirectional datasets, i.e. you must be able to move back and forwards through the dataset.
Note: Locate and lookup act at low level inside a dataset to search for records. Often it is more efficient to filter/limit what gets into the dataset in the first place, e.g. using SQL WHERE clauses.
Examples
Using a TDBF dataset and looking for 'di Angelo', 'Di Angelo' etc in a field called LASTNAME:
uses dbf, db
...
if MyDBF.Locate('LASTNAME','di Angelo',[loCaseInsensitive])then
writeln('Found record.');
Using multiple fields to find a record.
Note: you have to add Variants to the uses clause.
uses Variants;
..
procedure LocateMyRecord;
var
aCityID, aCountryID: integer;
begin
if Locate('city_id;country_id', VarArrayOf([aCityID, aCountryID]), []) then
begin
DoSomething;
end;
end;
See also
- [1] Description of how to use locate with Delphi