Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: DataSet.LocateNext (horizontale Suche)

  Alt 21. Nov 2013, 20:43
Es geht aber auch ganz anders ... man schreibt sich eine procedure die das macht.

In etwa so: (ungetestet)
Delphi-Quellcode:
function DataSetLocateNext( ADataSet : TDataSet; const AFields : string; const AValue : Variant; ALocateOptions : TLocateOptions ) : Boolean;
var
  LBookmark : TBookmark;
  LSValue : string;
  LCValue : string;
  LFields : TStringList;
begin
  LSValue := VarToStrDef( AValue, '' );

  if loCaseInsensitive in ALocateOptions then
    LSValue := LowerCase( LSValue );

  LFields := TStringList.Create;
  try
    LFields.Delimiter := ';';
    LFields.StrictDelimiter := True;
    LFields.DelimitedText := AFields;

    for LIdx := 0 to LFields.Count - 1 do
      LFields.Objects[LIdx] := ADataSet.FieldByName( LFields[LIdx] );

    Result := False;

    LBookmark := ADataSet.GetBookmark;

    ADataSet.DisableControls;
    try
      while not ADataSet.Eof and not Result do
      begin
        ADataSet.Next;
        for LIdx := 0 to LFields.Count - 1 do
          begin
            LCValue := VarToStrDef( TField( LFields.Objects[LIdx] ).Value, '' );

            if loCaseInsensitive in ALocateOptions then
              LCValue := LowerCase( LCValue );

            if loPartialKey in ALocateOptions then
              Result := Pos( LSValue, LCValue ) > 0
            else
              Result := LSValue = LCValue;
          end;
      end;

      if not Result then
        ADataSet.GotoBookmark( LBookmark );

    finally
      ADataSet.EnableControls;
    end;
  finally
    LFields.Free;
  end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (21. Nov 2013 um 21:20 Uhr)
  Mit Zitat antworten Zitat