Delphi Lookup函数-根据条件查找数据

Delphi Lookup函数-根据条件查找数据

Lookup 从与指定搜索值匹配的行中检索字段值。

TCustomClientDataSet、TCustomADODataSet 均有

函数原型:

function Lookup(const KeyFields: string; const KeyValues: Variant;
  const ResultFields: string): Variant;
begin
  Result := Null;
  if LocateRecord(KeyFields, KeyValues, [], False) then
  begin
    SetTempState(dsCalcFields);
    try
      CalculateFields(TempBuffer);
      Result := FieldValues[ResultFields];
    finally
      RestoreState(dsBrowse);
    end;
  end;
end;

CalculateFields

procedure TDataSet.CalculateFields(Buffer: PChar);
var
  I: Integer;
begin
  FCalcBuffer := Buffer;
  if (State <> dsInternalCalc) and (IsUniDirectional = False) then
  begin
    ClearCalcFields(CalcBuffer);
    for I := 0 to FFields.Count - 1 do
      with FFields[I] do
        if FieldKind = fkLookup then CalcLookupValue;
  end;
  DoOnCalcFields;
end;

调用Lookup从与搜索条件匹配的行中检索指定字段的值。

  • KeyFields是一个字符串,其中包含要搜索的字段名的分号分隔列表。
  • KeyValues是一个变量数组,包含要在键字段中匹配的值。要指定多个搜索值,请将键值作为变量数组作为参数传递,或使用VarArrayOf例程动态构造变量数组。
  • ResultFields是一个字符串,包含以分号分隔的字段名列表,其值应从匹配行返回。
  • Lookup返回一个变量数组,其中包含ResultFields中指定字段的值。

 

使用示例:

//单字段

var 
  sName:Variant;
begin
//根据ID,返回名称
  sName:=ADOQuery1.Lookup('id','22','name');
  if VarType(sName) <> varNull then
  begin
    ShowMessage(IntToStr(sName));
  end;
end; 

//多字段

var 
  sArry:Variant;
begin
//根据ID、名称,搜索返回 标题、日期
  sArry:=ADOQuery1.Lookup('id;name',VarArrayOf([22,'test']),'title;date');
  if VarType(v) <> varNull then
  begin
    ShowMessage(sArry[0]+inttostr(sArry[1]));
  end;
end;

  

 

 

创建时间:2021.01.29  更新时间:2022.07.01

posted on 2021-01-29 09:24  滔Roy  阅读(777)  评论(0编辑  收藏  举报

导航