![]() |
Datenbank: MySQL • Version: 5.5 • Zugriff über: UniDAC 5.1.4
Problem: Update in Thread
Hallo zusammen,
bei mir tritt ein seltsames Verhalten auf, wenn ich ein DB in einem Thread aktualisiere. So lange es String- oder Datumsfelder sind passiert nichts, aber wenn ich JPEG´s von der Platte lade ist die Connection weg (Fehler 10053 Socket error) ... Ich habe die Connection und die Query im Thread etwas weiter vorn in der Execute-Method erzeugt. Hier ein Auschnitt, der läuft. Kommentiere ich das ...LoadfromFile8fFileName) wieder ein knallt es mit dem Fehler. Hat einer Idee, was dort schief läuft ?
Delphi-Quellcode:
Gruß Tom
QueryThread.First;
while (not QueryThread.Eof) and (not Terminated) do begin sDateTime := FormatDateTime(cFormatDT,Now); fFileName := oFldFile.AsString; if FileExists(fFileName) then begin try QueryThread.Edit; oFldUser.AsString := fSQLAccount.User; oFldDate.AsDateTime := Now; // oFldBlob.LoadFromFile(fFileName); QueryThread.Post; inc(fThreadData.PictureOkay); except on E:Exception do begin inc(fThreadData.PictureFailed); fThreadData.Messages.Add(Format('%s - Fehler beim Schreiben der Tabelle "Pictures": %s',[sDateTime,E.Message])); end; end; end else begin inc(fThreadData.PictureFailed); fThreadData.Messages.Add(Format('%s - Bilddatei nicht vorhanden: %s',[sDateTime,fFileName])); end; QueryThread.Next; inc(fThreadData.Counter); if (fThreadData.Counter mod 10 = 0) then Synchronize(UpdateProgress); end; |
AW: Problem: Update in Thread
Kommuniziert das .LoadFromFile() vielleicht über den Haupt-Thread ? Das wäre meine einzige Vermutung, wieso die Connection verloren geht ...
|
AW: Problem: Update in Thread
Da dürfte die Gegenstelle den Abbruch verursachen. Meiner Meinung nach ist die Art, wie Du Bilder in der DB speicherst, nicht korrekt. Wenn ich google, sehe ich immer einen TBlobStream, der verwendet wird.
|
AW: Problem: Update in Thread
Es läuft ja so im normalen Haupt-Thread korrekt. Ich werde deine Anmerkung mal im Sourcecode checken ...
|
AW: Problem: Update in Thread
Wie groß sind die JPEG-Dateien?
|
AW: Problem: Update in Thread
Ich hatte jetzt nicht die Zeit zu prüfen, ob TBlobField.LoadFromFile(...) alles korrekt händelt, aber TBlobStream stammt noch von der BDE (ihgitt) und verlangt ein BDE-DataSet ... nicht gut ! Ich werde noch einmal den Debugger bemühen.
|
AW: Problem: Update in Thread
Zitat:
|
AW: Problem: Update in Thread
Alles zwischen 35 und 400 KB.
|
AW: Problem: Update in Thread
Irgendwo im Datenmodul des jeweiligen Thread fand eine stille Exception statt, die dann wohl wiederum über TWinControl.mainWndProc mit dem Haupt-Thread kommunizierte ... das zerschoss die Connection ! Ich habe jetzt erst einmal die TUniQuery hart verdrahtet, denn irgendwo war wohl ein Fehler im dynamischen Setzen des "SQLUpdate.Text"-Property. Selbst schuld ...
Danke für Eure Mühen ! Gruß Thomas |
AW: Problem: Update in Thread
Du hast diese Query-Instanz aber schon dynamisch im Thread erstellt (so wie auch die Connection-Instanz)?
|
AW: Problem: Update in Thread
Hallo Sir Rufo !
Ich habe die Instanzen in dem Thread (nicht im Create-Event) über ein Datenmodul erzeugt, welches nicht in der Aopplikation geladen wird. Dann werden die Connection und die jeweilige Query dynamisch (Account-Daten für die Connection, SQL für die Query) gefüllt. Wie gesagt, es funktioniert so lange gut, wie nur (in dem Beispiel) String- oder Datumsfelder gefüllt werden. In der Nacht lief es dann auch irgendwann mal mit den Blobs, aber als ich die MD5-Erzeugung (Hash des Bildes abspeichern) einbaute auch wieder nicht mehr. jetzt habe ich mich erst einmal entschlossen, die Verarbeitung nicht in einen Thread auszulagern, weil Kunden auf ein Update warten. Dann habe ich die Muße das Ganze in Ruhe zu Checken. Gruß Thomas |
AW: Problem: Update in Thread
Nur noch ein Hinweis: ich habe bei UniDAC ein Downgrade auf die Version 5.1.4 machen müssen, weil die neue Version 5.2.5 vom Dezember 2013 massive Probleme bereitete (automatische Erzeugung der Properties SQLInsert, SQLUpdate etc.).
|
AW: Problem: Update in Thread
Problem gefunden: nach einem Update des mySQL-Servers auf die Version 5.6.15 (von 5.5.xxx) läuft die Anwendung rund, auch im Thread.
Vielleicht hätte ich mir die Fehlermeldung genauer ansehen sollen ("Connection wurde vom Hostcomputer zurückgwesetzt ...."), dann hätte ich mir eine Menge Zeit und Nerven gespart ! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:09 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