Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   TSQLDataSet, TSQLConnection Multithread Exception (https://www.delphipraxis.net/187500-tsqldataset-tsqlconnection-multithread-exception.html)

nahpets 4. Dez 2015 11:55

AW: TSQLDataSet, TSQLConnection Multithread Exception
 
Wenn dem so ist, können wir diese Fehlerursache ja ausschließen.

Klar, bei 'nem Count bekommt man mindestens 0 zurück, wenn es was nicht gibt.

Was ist bei
Delphi-Quellcode:
SQLDS_Work.CommandText := 'SELECT [IdentNr], [WareneingangsNr] from WEP02.dbo.WareneingangsNr WHERE Aktiv = 1';
?
Wenn's das nicht gibt, ist die Ergebnismenge leer, EoF müsste dann erfüllt sein und FieldCount = 2. Fields[0].AsString geht dann und gibt 'ne leere Zeichenfolge zurück.

Gut, können wir den Fehler auch ausschließen.

p80286 4. Dez 2015 12:32

AW: TSQLDataSet, TSQLConnection Multithread Exception
 
Ich frage mich was die beiden Code-Auszüge miteinander zu tun haben. Im ersten wird irgendetwas mit einer TCP-Verbindung gemacht, im zweiten werden Daten aus einer DB per SQL abgeholt. Wenn es da irgendwelche Seiteneffekte gibt, tippe ich auf Pointer-Arithmetik von Zauberlehrlingen.

Gruß
K-H

P.S.
was ist mit durchsteppen mittels F7/F8 kann da der Fehler eingegrenzt werden?

nahpets 4. Dez 2015 12:45

AW: TSQLDataSet, TSQLConnection Multithread Exception
 
@p80286

naja, im "Thread" gibt es sowas wie DataNotInDB und DataExport.
Es könnte sich hier unter Umständen, eventuell, vielleicht um Funktionen handeln, die auf uminöse Weise auf die Datenbank zugreifen. Hier ließen sich dann Probleme und Konflikte beim Zugriff auf die Datenbank nicht zwingend ausschließen.

Im Eingangspost heißt es ja u. a.
Zitat:

... in einem Thread Daten via TCPIP von einem Server gelesen werden und in eine MSSQL Datenbank eingegraten werden...
Wie dies konkret funktioniert, ist aus dem zur Verfügung gestellten Quelltext aber leider nicht zu entnehmen.

Momentan gibt es noch zuviele :glaskugel:, aus denen gelesen werden muss, um sich dem gestellten Problem anzunähern.

p80286 4. Dez 2015 15:34

AW: TSQLDataSet, TSQLConnection Multithread Exception
 
Bei soviel Konjunktiv kann ich Dir nicht widersprechen. es kann natürlich sein, daß zwei Threads sich ins Gehege kommen, das sollte aber nur der Fall sein wenn sie sich eine Ressource teilen müssen, aber welche mag das wohl sein.....:glaskugel:

Gruß
K-H

Barthiboy 5. Dez 2015 15:58

AW: TSQLDataSet, TSQLConnection Multithread Exception
 
Hallo
danke für die vielen Antworten.
@p80286
also die zwei Codeschnipsel stellen die Datenbankzugriffe da, die in der Anwendung gemacht werden.

Programmübersicht:
Also in Einem Thread wird eine TCPIP Kommunikation aufgebaut. Hier werden Daten abgeholt und dann mittels SQLStatements
in die Datenbank geschrieben.

Im VCL-Thread wird in der Datenbank nachgeschaut (select count...) wie viele Datensätze denn schon eingetragen wurden und dies wird dann visualisiert.

In dem TCPIP Thread passiert eigentlich nicht recht viel mehr. Hier wir weiter oben lediglich Kommunikationsgeschichten abgearbeitet. Daher dann die Frage Datacount > 0 und dann gehts los mit Datenbank eintragen.
Die Eigenschaften des Threads wie z.B.: DataNotinDB oder weitere sind mittels CriticalSections geschützt und haben ihre Get und Set Methoden mit denen darauf zugegriffen wird

Ich habe selbstverständlich schon mit F7/F8 versucht zu debuggen. Allerdings lässt sich der Fehler nicht genau lokalisieren.
Also ich arbiete mit XE5 Enterprise und witzigerweise schmiert der Debugger auch ab wenn diese $C000005 Exception auftritt.
Ich kann am Montag gerne einen Auszug davon einstellen.


Zitat:

Im Eingangspost heißt es ja u. a.
Zitat:
... in einem Thread Daten via TCPIP von einem Server gelesen werden und in eine MSSQL Datenbank eingegraten werden...
Wie dies konkret funktioniert, ist aus dem zur Verfügung gestellten Quelltext aber leider nicht zu entnehmen.
Ja stimmt. Werde ich natürlich nachschicken.
Aber vorab schon mal so viel.
In der Funktion ProduktAuswerten wird das gemacht.
Hier werden die SQLStatments generiert und abgesetzt.

Jetzt noch eine ganz grundsätzliche Frage.
Es ist rein theoretisch schon möglich von zwei Threads aus auf die selbe Datenbank zuzugreifen?
Da hier ja der fehler in der dbxmss.dll auftritt.

Vielen Dank
einen schönen Abend

Barthiboy 7. Dez 2015 05:58

AW: TSQLDataSet, TSQLConnection Multithread Exception
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo.
Im Anhang ist jetzt das .pas file in dem der Thread gestartet wird und die Kommunikation läuft.
Den anderen Datenbankzugriff im Main findet ihr ja auf der ersten Seite.
Ich hoffe das jetzt nicht mehr fehlt.
Ich werde jetzt trotzdem gleich mal den Vorschlag von nahpets umsetzen und sehen ob ich zu einem Ergebnis komme.
Wenn ihr Vorschläge hab, nur her damit

Barthiboy 11. Dez 2015 05:17

AW: TSQLDataSet, TSQLConnection Multithread Exception
 
Hallo,
nach längerem vergeblichem probieren bin ich jetzt auf FireDAC umgestiegen.
Einach alle Komponenten ausgetauscht.
Und es funktioniert


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:14 Uhr.
Seite 2 von 2     12   

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