Hi,
ich möchte ein Feld welches mehrere Tausend DateTime-Werte enthält mittels Locate durchsuchen und
nur die Werte zurück bekommen die bestimmten Kriterien entsprechen, z.B. alle Termine vom Januar 2006.
Dazu benutze ich bisher:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
I : Integer;
B : TBookMarkStr;
MaxDays : Variant;
Y, M, D : Word;
begin
ListBox1.Items.Clear;
DecodeDate(GetLastMonthDay(EncodeDate(2006, 01, 01)), Y, M, D);
MaxDays := VarArrayCreate([1, D], varVariant);
for I := 1 to D do
MaxDays[I] := Trunc(EncodeDate(2006, 01, I));
B := ADODataSet1.Bookmark;
if ADODataSet1.Locate('StartTime',
MaxDays,
[loCaseInsensitive, loPartialKey]) then
begin
ListBox1.Items.Add(ADODataSet1.FieldValues['StartTime']);
end;
ADODataSet1.Bookmark := B;
end;
Bei der Ausführung kommt es jedoch bei Locate zur
Exception
"Variante des Typs(Array Variant) konnte nicht in den Type(String) konventiert werden".
Ein VarArrayCreate([1,D], varString) schlägt auch fehl, das kein sicheres Array oder Variante erzeugt werden kann.
Wie gehts 'richtiger'?
Gruss
Alter Mann