Vielleicht kann man meine Frage auf den einfachen Punkt bringen:
Darf man eine
DB-Connection und eine
Query, die auf einem Form (oder einem Datenmodul) liegen, in einem Thread verwenden und ausführen und dann das Ergebnis mit einer
VCL-Komponente auf dem Form verbinden - oder geht das irgendwann schief?
Zumindest bei
MySQL/MariaDB mittels UniDAC bzw. MyDAC bin ich damit schon auf die Nase gefallen. Es geht
im Prinzip, und kann auch oft und lange gut gehen, aber wenn es dann auf einmal rummst hat man den Salat. Ich meine irgendwo in der Doku auch mal gelesen zu haben, dass man eine Connection immer nur im selben Thread-Kontext benutzen darf, in dem sie auch erstellt wurde. Seit ich dies mache, habe ich keine Probleme mehr.
Zur Anzeige lohnt es sich dann, eine separate Datenhaltung zu machen, die das Gesamtergenis zugewiesen bekommt. Soll dies auch häppchenweise gehen, müssen alle Zugriffe von in dem Thread (schreibend) und dem Mainthread (lesend) durch Critical Sections abgesichert werden. (Tut man dies nicht, hat man wieder eine ähnliche Situation: Kann lange gut gehen, und dann irgendwann mal nicht und man kratzt sich am Kopf.)
Kleiner Hinweis auf etwas was ich auch erst schmerzlich lernen musste: Wenn du eine Connection im Konstruktor deiner Thread-Klasse erstellst, ist dies noch immer im Kontext des
VCL-Threads! Du musst dies in der Execute-Methode machen!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)