Einzelnen Beitrag anzeigen

Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
946 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Locate und VarArrayCreate

  Alt 21. Jun 2007, 13:35
Datenbank: MS SQL 2000 • Version: 8.0 • Zugriff über: ADO
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
  Mit Zitat antworten Zitat