Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Thread für reine Inserts in der DB über AnyDAC (https://www.delphipraxis.net/170872-thread-fuer-reine-inserts-der-db-ueber-anydac.html)

Kostas 7. Okt 2012 20:26

Datenbank: Firebird • Version: 1.5 • Zugriff über: AnyDAC

Thread für reine Inserts in der DB über AnyDAC
 
Hallo Zusammen,

ich muss gestehen, ich bin nicht Sattelfest mit Threads. Deshalb bitte ich um Hilfe.
Es sollen Daten in die Datenbank geschrieben werden. Also reine Inserts. Ich benötige
keinerlei Rückmeldung vom Thread. Aktuell habe ich eine Methode, dieser ich ein
paar Werte übergeben die in die Datenbank geschrieben werden sollen. Das würde ich gerne
in einem Thread verpacken. Soweit ich weiß, ist AnyDAC Thread save. Nachdem der Insert
durchgeführt wurde, soll sich der Thread selbstständig beenden. Es kann jedoch vorkommen
dass während der aktive Thread Daten in die DB schreibt, der gleiche Thread nochmal gestartet
wird. Die Reihenfolge welcher zuerst die Daten wegschreibt ist Egal.

Hat jemand bitte so eine code Snippet wie so ein Thread sauber aussehen könnte?
Ideal wäre so ein Gerüst welcher als Parameter eine Methode übergeben bekommt,
die wiederum vom Thread ausgeführt wird.

Gruß Kostas.

Bummi 7. Okt 2012 20:46

AW: Thread für reine Inserts in der DB über AnyDAC
 
Ich habe noch nicht mit AnyDac gearbeitet. Wenn man dieser Seite http://www.da-soft.com/anydac/docu/f...Threading.html
vertrauen schenkt, brauchst Du für Deine Anwendung nur FreeOnTerminate := true; setzen.

Es fehlt nur ein passender Contructor mit den abzuarbeitenden Befehlen, in einer/mehrenen Threadvariable(n) speichern und im Execute verwenden.

Kostas 7. Okt 2012 20:55

AW: Thread für reine Inserts in der DB über AnyDAC
 
Tausend Dank für den Hinweis.

Ich habe noch weitere Beispiel entdeckt. Die muss ich mir jetzt genauer anschauen.
Dir noch einen schönen Abend.

Gruß Kostas

nuclearping 7. Okt 2012 23:07

AW: Thread für reine Inserts in der DB über AnyDAC
 
Wie Bummi schon sagte: Für jeden Insert-Lauf erzeugst du einen eigenen Thread, übergibst im Constructor die benötigten Daten (KEINE Verweise auf VCL-Komponenten wie TListBox, TStringGrid oder dergleichen!) und setzt ebenfalls im Constructor (nach inherited) FreeOnTerminate auf TRUE.

Du überschreibst die Execute-Methode des Threads (in der Methode dann das inherited entfernen), lässt dort deine Queries abarbeiten und wenn der Thread damit fertig ist, gibt er sich von selbst frei.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz