angepasst:
Die Suche ist Aufgebaut nach diesem Beispiel-Code von UIB:
Delphi-Quellcode:
unit main;
interface
uses
..snipp..
procedure TMyThread.Execute;
var
Query: TUIBQuery;
Transaction: TUIBTransaction;
begin
FreeOnTerminate := true;
// Form1.DataBase.Lock; //simulate single thread
try
Query := TUIBQuery.Create(
nil);
Transaction := TUIBTransaction.Create(
nil);
try
Transaction.DataBase := Form1.DataBase;
Query.Transaction := Transaction;
Query.FetchBlobs := True;
Query.SQL.Text := '
select imageblobfeldname <, andereFelder> from project where crc = :param_crc';
Query.Params.ParamByName('
param_crc').DataType := ftString;
Query.Params.ParamByName('
param_crc').Value := <valueVonIrgendwoher>;
Query.Open;
while not Query.EOF
do //diese Prüfung kann bleiben, könnte leere Menge ergeben, dann Fehlerbehandlung (ergänzen), gewünschtes Ergebnis: 1 Datensatz
begin
//Query.Next;
//Sleep(10); // simulate activity
// code für Picture Befüllung aus BLOB Stream (steht schon in Deinem Beispiel oben, keine neue Query Vararible nötig)
end;
finally
Query.Close(etmCommit);
Query.Free;
Transaction.Free;
end;
finally
// Form1.DataBase.UnLock; //simulate single thread
end;
end;
end.
Du musst in der
Query das Ergebnis direkt von 500k Datensätzen auf einen einschränken.
Dann kann dir "egal" sein, wieviel DS in der Tabelle stehen.