^^^ Subquerys gehen natürlich auch.
Ich meinte eher mit den
SQL Befehlen/Funktionen max,[left] join, group by zu arbeiten.
Deine eine Schleife könnte man beschleunigen, in dem du in der IF-Abfrage hinter den result:=true ein break schreibst.
Somit müsste nicht durch jeden Datensatz gegangen werden.
Weitere Optimierungen sehe ich in dieser Bedingung:
StrToDate(FormMain.QueryUpdate.FieldByName('announcement_date').AsString) >= Date()
Warum muss das im Code passieren? Warum machst du das nicht direkt im
SQL.
Somit müsste der Server dir weniger Daten liefern und du bräuchtest nur noch prüfen ob Daten da sind oder nicht.
Allerdings ich würde meinen ersten Vorschlag bevorzugen, da dieser nur einen
SQL Abfrage zu Server schickt.