Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Problem: Update in Thread (https://www.delphipraxis.net/178669-problem-update-thread.html)

TRomano 20. Jan 2014 17:34

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:
    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;
Gruß Tom

TRomano 20. Jan 2014 18:42

AW: Problem: Update in Thread
 
Kommuniziert das .LoadFromFile() vielleicht über den Haupt-Thread ? Das wäre meine einzige Vermutung, wieso die Connection verloren geht ...

Furtbichler 20. Jan 2014 20:03

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.

TRomano 20. Jan 2014 20:32

AW: Problem: Update in Thread
 
Es läuft ja so im normalen Haupt-Thread korrekt. Ich werde deine Anmerkung mal im Sourcecode checken ...

Bernhard Geyer 20. Jan 2014 20:32

AW: Problem: Update in Thread
 
Wie groß sind die JPEG-Dateien?

TRomano 20. Jan 2014 20:51

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.

Furtbichler 20. Jan 2014 21:17

AW: Problem: Update in Thread
 
Zitat:

Zitat von TRomano (Beitrag 1244601)
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.

Auweia. Asche auf mein Haupt.

TRomano 20. Jan 2014 21:18

AW: Problem: Update in Thread
 
Alles zwischen 35 und 400 KB.

TRomano 20. Jan 2014 21:50

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

Sir Rufo 20. Jan 2014 21:55

AW: Problem: Update in Thread
 
Du hast diese Query-Instanz aber schon dynamisch im Thread erstellt (so wie auch die Connection-Instanz)?


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:05 Uhr.
Seite 1 von 2  1 2      

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