![]() |
Thread-Problem AccessViolation-Exception
Hallo,
ich möchte eine Connection zu einer DB in einem Thread realisieren:
Delphi-Quellcode:
Führe ich das so aus, bekomme ich eine AccessViolation Exception. Verwende ich Synchronize also
procedure TConnectThread.Execute;
begin Connect; if Terminated then exit; end; procedure TConnectThread.Connect; begin DB_DataModul.createCon(Con, Database, Host, Protocol, User, Password, Port); terminate; end;
Delphi-Quellcode:
wird es zwar ausgeführt aber das Programm friert während der Ausführung des Threads ein.
Synchronize(Connect);
Was tun fragt Gambit |
Re: Thread-Problem AccessViolation-Exception
Ich hab in meiner Anwendung für solche Sachen ne TCriticalSection verwendet, damit die Datenbankabfragen nicht kollidieren... :)
|
Re: Thread-Problem AccessViolation-Exception
könntest du mir etaws genauer schildern, wie du das implementiert hast?
|
Re: Thread-Problem AccessViolation-Exception
Zitat:
|
Re: Thread-Problem AccessViolation-Exception
Danke Luckie!
Würde es dir sehr viel ausmachen, mir noch einen Tipp zu geben, wie ich weiter vorgehen sollte? Wär lieb... |
Re: Thread-Problem AccessViolation-Exception
Du müsstest dann schon diese Datenbank-Kompo als Threadeigenschaft haben, dann kannst du mit ihr ohne Probleme arbeiten, und anschleißend musst du dann diese Thread-Kompo im Hauptprogramm speichern.
Du könntest dann entweder eine Kompo davobn ableiten und en Savetostream implementieren (falls die kompo das nicht hat) und so die komponentendaten aus dem thread in dein hauptprog schleusen, oder aber du gibst den thread nach der bendigung nicht frei, und kannst dann über MyThread.Datenbank.Close; darauf zugreifen. Was auch ginge: Der Thread erzeugt das Datenbankobjekt, arbeitet damit, gibt den Zeiger dem Hauptprogramm weiter und gibt dann bei der beendigung das DB-Objekt aber nicht wieder frei ... (glaub' ich das beste ...) |
Re: Thread-Problem AccessViolation-Exception
ich glaube das is nix für mich...jetzt hatte ich es mit TCriticalSection probiert und es ging dann tatsächlich ne ganze Zeit aber jetzt gehts auf einmal nicht mehr!!?? Wie kann das denn sein?
Edit: Habe rausgefunden, dass es geht solange mein Laptop(als Datenbankserver) nicht angeschlossen ist. Dann läuft der Thread jetzt bis zum Connection-TimeOut. Schließe ich das Lappi(ein Verbindungsaufbau wäre also möglich) an, bekomme ich dann wieder meine AccessViolation. Das raff ich jetzt nicht mehr... //Edit |
Re: Thread-Problem AccessViolation-Exception
Moin,
Bei meinem letzten Projekt (Firebird Embedded und Zeos) erstelle ich alle DB-Kompos zur Laufzeit im Thread. Bei 20 threads sind das dann 21 Verbindungen zur DB (20 Threads plus Hauptprogramm) aber bis jetzt läuft das ganz gut. Finde auch einfacher dann mit Transaktionen zu arbeiten; braucht man sich über die Synchro keine Gedanken zu machen. Tschüss, Lutz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz