Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
Delphi 10 Seattle Enterprise
|
AW: DataSet.LocateNext (horizontale Suche)
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)
|