[gelöst] Firebird SQL Abfragen in einen Thread auslagern/stoppen/neustarten

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Helios
Lazarusforum e. V.
Beiträge: 93
Registriert: Mi 29. Jun 2011, 22:36
OS, Lazarus, FPC: Lazarus 2.2.0 Windows 10 64Bit / Lazarus 2.0.12 Debian 11 „Bullseye" 64Bit
CPU-Target: 64Bit
Wohnort: Leonberg

Re: Firebird SQL Abfragen in einen Thread auslagern/stoppen/neustarten

Beitrag von Helios »

Hallo Michl,

Danke für den Hinweis, dass DataSource nicht in den Thread muss. Das war entscheidend für die Lösung des Problems bei dem Resizen des Fensters.
Jetzt ist im Thread nur noch die ZQuery (die ist "Non Gui") und bevor ich in die Execute Methode gehe (im Constructor) , entkopple ich die ZQuery von den der GUI abhängigen DataSource via

Code: Alles auswählen

FForm.DataSource1.DataSet := nil;
und binde sie wieder an, wenn die Query komplett durchgelaufen ist

Code: Alles auswählen

FForm.ZQuery1.Last
in der Completed Methode wo GUI Zugriffe wieder erlaubt sind:

Code: Alles auswählen

FForm.DataSource1.DataSet := FForm.ZQuery1;
Ergebnis: Der unangenehme Resize Fehler ist weg, umkopieren muss ich nix und andere "Nebenwirkungen" konnte ich bisher weder unter Windows noch unter Linux feststellen.
Eine Sache könnte man noch besser machen. Wenn ich die Transaktions ID und die Statement ID kennen würde, könnte ich selektiver und besser nur das eine von mir zuvor erzeugte Statement "abschießen" (und nicht über State = 2, das löscht u.U. auch andere Abfragen, die vielleicht gar nicht beendet werden sollen im Multiuser- und Serverbetrieb). Das ist aber evtl. eine separate Frage im Forum wert. Danke nochmal an Dich und die anderen Forenmitglieder für Deine/Eure Unterstützung. Die Entwicklung meiner Big-Data Applikation ist damit deutlich einfacher geworden.
Gruß
Helios
SQLThread4.zip
(65.72 KiB) 62-mal heruntergeladen

Helios
Lazarusforum e. V.
Beiträge: 93
Registriert: Mi 29. Jun 2011, 22:36
OS, Lazarus, FPC: Lazarus 2.2.0 Windows 10 64Bit / Lazarus 2.0.12 Debian 11 „Bullseye" 64Bit
CPU-Target: 64Bit
Wohnort: Leonberg

Re: [gelöst] Firebird SQL Abfragen in einen Thread auslagern/stoppen/neustarten

Beitrag von Helios »

Hallo zusammen,
mit der Hilfe der Firebird Deutschland Forenmitglieder (Danke für die Tipps) gab es noch eine wichtige Verbesserung bzgl. des State = 2 Themas, welches ich oben bereits angekündigt hatte. Nun wird sichergestellt, das wirklich nur die angezeigte SQL Abfrage auf dem Server unterbrochen wird und diese ist dann State unabhängig (ich hatte auch Langläufer im State = 1 mit "SELECT COUNT(*) FROM (SELECT * FROM monstertabelle)").
Für alle Interessierten hier die neue Version auch embeded und Linux fähig.
Würde mich freuen, wenn das für den einen oder anderen hilfreich ist. Probleme/Verbesserungen gerne melden. Ich hoffe aber nun ist das Thema endgültig erfolgreich abgeschlossen.
SQLThread5.zip
(66.21 KiB) 90-mal heruntergeladen
Danke und Gruß
Helios

Antworten