Code:
sqlZielLog.SQL.Add('SELECT');
sqlZielLog.SQL.Add(' *');
sqlZielLog.SQL.Add('FROM');
sqlZielLog.SQL.Add(' ZielLog');
sqlZielLog.SQL.Add('WHERE');
sqlZielLog.SQL.Add(' zl_date between '''+FormatDateTime('YYYY-MM-DD', FromTime)+''' AND '''+FormatDateTime('YYYY-MM-DD', ToTime)+'''');
sqlZielLog.SQL.Add(' AND zl_time between '''+FormatDateTime('HH:NN:SS', FromTime)+''' AND '''+FormatDateTime('HH:NN:SS', ToTime)+'''');
sqlZielLog.SQL.Add('ORDER BY');
sqlZielLog.SQL.Add(' zl_date, zl_time');
Hier würde ich an Deiner Stelle.SQL.Text:='select.......' benutzen, das ist meiner Meinung nach übersichtlicher.
Die Datums bzw. Zeitübergabe solltest Du mit Parametern bewerkstelligen.
Code:
if sqlZielLog.Active then {----- Warum? }
begin
ndx := 0;
sqlZielLog.last; {----- Warum? }
while not sqlZielLog.Eof do
begin
Inc(ndx);
New(sDaten);
sDaten.Datum := sqlZielLog.FieldByName('zl_date').AsDateTime;
sDaten.Transponder := sqlZielLog.FieldByName('zl_transpondernr').AsString;
sDaten.Schlachtnummer := sqlZielLog.FieldByName('zl_schlachnummer').AsString;
Schlachtdaten.Add(sDaten);
sqlZielLog.Next;
if (ndx mod 50) = 0 then
Application.ProcessMessages; {----- Warum? }
end;
sqlZielLog.Close;
Und wie vorher schon angemerkt, Du solltest nicht mehr Daten über die Leitung schicken als nötig!
Um "die Tabelle möglichst wenig zu stören?" gäbe es vllt. die Möglichkeit das Ergebnis der Datumsabfrage in eine temp. Tablelle auszulagern?
Gruß
K-H