Ich habe einen Suchcode geschrieben, um die Datenbank zu erkunden. Da die Abfrage alleine wirkt, habe ich den Thread verwendet.Thread Fehler in Delphi
Jetzt gibt dieser Thread (einer der Benutzer auf der Website geschrieben) eine Menge Fehler.
Code:
procedure TForm1.QueryFinished(Sender: TObject);
begin
if TThread(Sender).FatalException <> nil then
begin
// something went wrong
on E : Exception do
begin
MLog.Lines.Add('Exception class name = '+E.ClassName); /// MLog is Memo For Log
MLog.Lines.Add('Exception message = '+E.Message);
end;
exit;
end;
MLog.Lines.Add('Search is Done!');
end;
procedure TForm1.Requery;
var
Thread: TThread;
begin
Thread := TThread.CreateAnonymousThread(
procedure
begin
query.close;
query.sql.text:='select * from Customer where CustomerID LIKE "%'+Form1.edit1.text+'%"';
query.open;
end);
Thread.OnTerminate := QueryFinished;
Thread.Start;
end;
Fehler 1:
Projekt project1.exe angehoben Ausnahmeklasse EEvaluatorError mit der Meldung 'Could not Text finden'
Erro 2:
Projekt project1 .exe ausgelöst Ausnahmeklasse EEvaluatorError mit der Nachricht 'EvalError in LinkControlToField6: Konnte Text nicht finden'
Fehler 3:
Projekt project1.exe angehoben Ausnahmeklasse EArgumentOutOfRangeException mit Meldung 'Argument außerhalb des Bereichs'
Fehler 4:
Projekt project1.exe angehoben Ausnahmeklasse EBindCompError mit Meldung ‚EvalError in LinkControlToField2: Zugriffsverletzung bei Adresse 5005FC08 in Modul 'rtl230.bpl' lesen der Adresse 000000D0'
Fehler 5:
Zugriffsverletzung bei Adresse 006CE2BF im Modul 'FireDACCommon230.bpl' Adresse lesen 00000004
Was kann zur Lösung dieses Problems getan werden?
Vielleicht sollte ich nur meinen Thread beenden. Woher weiß ich, dass ein Thread das Recht Beenden hat?
Wir wissen nichts 'query'. [McVe] –
Dies funktioniert nicht, da Sie die Verbindung und Abfrage im Kontext des Threads erstellen müssen. Und verwenden Sie die Formularvariable nicht, wenn Sie bereits in der Klasse selbst sind ... – whosrdaddy
Vergessen Sie den Thread, was Sie benötigen, sind asynchrone Datenbankoperationen (die intern einen Thread verwenden). Lesen Sie die [Dokumentation] (http://docwiki.embarcadero.com/CodeExamples/en/FireDAC.TFDQuery.Async_Sample) – whosrdaddy