FireDAC.Comp.DataSet.TFDDataSet.LookupEx
Delphi
function LookupEx(const AKeyFields: string; const AKeyValues: Variant;
const AResultFields: string; AOptions: TFDDataSetLocateOptions = [];
ApRecordIndex: PInteger = nil): Variant; overload; virtual;
function LookupEx(const AExpression, AResultFields: string;
AOptions: TFDDataSetLocateOptions = []; ApRecordIndex: PInteger = nil): Variant; overload; virtual;
C++
virtual System::Variant __fastcall LookupEx(const System::UnicodeString AKeyFields, const System::Variant &AKeyValues, const System::UnicodeString AResultFields, TFDDataSetLocateOptions AOptions = TFDDataSetLocateOptions() , System::PInteger ApRecordIndex = (System::PInteger)(0x0))/* overload */;
virtual System::Variant __fastcall LookupEx(const System::UnicodeString AExpression, const System::UnicodeString AResultFields, TFDDataSetLocateOptions AOptions = TFDDataSetLocateOptions() , System::PInteger ApRecordIndex = (System::PInteger)(0x0))/* overload */;
Propriétés
Type | Visibilité | Source | Unité | Parent |
---|---|---|---|---|
function | public | FireDAC.Comp.DataSet.pas FireDAC.Comp.DataSet.hpp |
FireDAC.Comp.DataSet | TFDDataSet |
Description
Recherche dans l'ensemble de données un ensemble de valeurs de champs clés spécifiées ou une expression prédicat pour un enregistrement et renvoie les valeurs de champs obtenues.
Cette méthode est surchargée :
- Utilisez la première méthode surchargée LookupEx pour rechercher dans un ensemble de données un enregistrement avec des valeurs de champs spécifiées.
AKeyFields
est une liste de noms de champs séparés par des points-virgules dans laquelle rechercher.AKeyValues
est un variant contenant les valeurs à mettre en correspondance avec les champs clés. SiAKeyFields
contient un seul nom de champ,AKeyValues
est une valeur simple. SiAKeyFields
contient plusieurs noms de champs,AKeyValues
est un tableau de variants dans lequel les éléments correspondent aux champs clés. - Utilisez la seconde méthode surchargée LookupEx pour rechercher dans un ensemble de données un enregistrement dans lequel l'expression prédicat spécifiée est évaluée à True.
AExpression
est une chaîne contenant l'expression prédicat dans laquelle rechercher. L'expression ne peut pas contenir de fonctions d'agrégation commeSUM
,COUNT
, et elle est évaluée comme étant True ou False. FireDAC supporte la syntaxe étendue des expressions.
Si un enregistrement correspondant est trouvé, LookupEx renvoie un tableau de variants contenant les valeurs de champs spécifiées dans AResultFields
. Sinon, elle renvoie null. La variable pointée par ApRecordIndex
reçoit l'index de l'enregistrement trouvé si ApRecordIndex
n'est pas nil.
Pour optimiser la recherche d'enregistrements, l'application peut configurer l'index client. Cet index sera utilisé par LookupEx si les conditions suivantes sont satisfaites :
- La liste des champs de l'index a comme préfixe les champs
AKeyFields
. - L'index est construit sans l'option
soNoCase
. - L'index est actif et en cours.
AOptions
est un ensemble qui spécifie éventuellement des modes de recherche supplémentaires :
Option |
Description |
---|---|
lxoCaseInsensitive
|
Lorsque cette option est incluse, LookupEx ignore les majuscules/minuscules lors de la mise en correspondance des valeurs chaîne. |
|
Lorsque cette option est incluse, |
|
Lorsque cette option est incluse, LookupEx commence la recherche à partir de l'enregistrement suivant dans l'ensemble de données. Sinon, elle commence la recherche à partir du début. |
|
Lorsque cette option est incluse, LocateEx recherche l'enregistrement vers l'arrière. Sinon, elle recherche vers l'avant. |
|
Lorsque cette option est incluse, LookupEx n'effectue pas les opérations suivantes :
|
|
Lorsque cette option est incluse, FetchAll n'est pas appelée. La recherche est donc effectuée dans les enregistrements déjà extraits. |
Exemple
procedure TForm1.Button1Click(Sender: TObject); var V: Variant; C: Integer; A: String; begin V := FDQuery1.LookupEx('Company = ''Blue Sports'' and State = ''OR''', 'CustNo;Addr1', [lxoCaseInsensitive]); if not VarIsNull(V) then begin C := V[0]; A := V[1]; ShowMessage(IntToStr(C) + #13#10 + A); end else ShowMessage('The record is not found !'); end;