Delphi-Quellcode:
procedure TLoadingThread.Execute;
begin
FrmKundenwahl.FilterSetzen;
Synchronize(FRMKundenwahl.ShowErgebnis);
end;
Delphi-Quellcode:
procedure TfrmKundenwahl.FilterSetzen;
var filt:String;
Begin
filt := '1=1';
if TRIM(E_Sortierfeld.Text) <> '' then
filt := filt + ' AND Sortierfeld like '+AnsiQuotedStr(Trim(E_Sortierfeld.Text), #39)+' +''%''';
if TRIM(E_Name.Text) <> '' then
filt := filt + ' AND (Name1 like '+AnsiQuotedStr(Trim(E_Name.Text), #39)+' +''%'''
+ ' OR Name2 like '+AnsiQuotedStr(Trim(E_Name.Text), #39)+' +''%'')';
// ... noch ein paar weitere solcher abfragen und das öffnen der Querys.
End;
Kein Wunder!
Dur greifst aus dem Thread (Execute) über die Funktion FilterSetzen auf die Komponenten (E_Sortierfeld / E_Name) deines MainThreads zu!
Ändere deinen Thread-Aufruf, so dass Du diese Parameter für den Filter an den Thread übergibst und setzte den Filter IM Thread zusammen, ohne auf Edits und Co zuzugreifen!
Oder Übergebe den kompletten
SQL inclusive des Filterstrings an den Thread!
Zusätzlich braucht der Thread sein eigenes
Query und kann nicht das
Query vom Mainthread verwenden! Denn schließlich wird es dort wohl mit einer Visuellen Komponente verknüpft sein!