AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datenbanken und INSERTS in Threads

Datenbanken und INSERTS in Threads

Ein Thema von Tonic1024 · begonnen am 30. Dez 2004 · letzter Beitrag vom 6. Jan 2005
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Datenbanken und INSERTS in Threads

  Alt 30. Dez 2004, 12:08
Hi...

Ich habe mal eine Frage betreffend Insert-Anweisungen und Threads.

Kleine Vorgeschichte:

Ich habe zu einer fremden Datenbank (IB) eine Applikation geschrieben. Weil die Datenbank von einer Fremdfirma ist - und man ja nie wissen kann - habe ich mich dazu entschlossen alle Zugriffe in eine externe DLL zu verlagen und ausschließlich ANSI-SQL zu verwenden. So kann ich relativ flexibel auf Veränderungen der DB reagieren.

Nun möchte ich eine Weitere kleine Software, die bei der DB dabei war ersetzen. Diese Software hat eine ASCII-Schnittstellendatei verarbeitet und in die DB geschrieben. Dafür hat sie eine Stored Procedure verwendet. Da dies nicht in mein Konzept passt realisiere ich dies mit einem INSERT-Statement. Klappt auch, dauert nur etwas länger, was ja auch logisch ist.

Daraus ergibt sich automatisch meine Frage:
Ich habe nun versucht das "Array-Monster" mit den zu verarbeitenden Daten an zwei unabhängig laufende Threads zu übergeben. der eine solldie graden Einträge verarbeiten (daten[2], daten[4], ...) der andere die ungraden (daten[1], daten[3], ...). Wenn ich den einen Thread laufen lasse und den andern nicht starte werden auch die jeweiligen Daten (gerade oder ungerade) korrekt übertragen. wenn ich aber beide gleichzeitig laufen lasse geht garnichts. Wiso das?

Ich benutze ExecuteDirect aus TSQLConnection mit den Einstellungen KeepConnection:=true (scheint mir schneller zu gehen).


Hoffe jemand weiss Rat oder zumindes warum dies so ist...

MfG

Tonic
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Datenbanken und INSERTS in Threads

  Alt 30. Dez 2004, 12:27
Du solltest uns noch verraten auf welche Datenbank du zugreifst.
Evtl. ist auch der dbExpress-Treiber nicht Multi-Threading fähig.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#3

Re: Datenbanken und INSERTS in Threads

  Alt 30. Dez 2004, 17:12
Ich benutze, wie schon gesagt, IB via ANSI-SQL.

Wie finde ich heraus ob der Threading fähig ist? Kann man das irgendwo nachlesen?


[/edit]
Nach allem was ich weiss ist DBExpress Threadfähig wenn für jeden Thread eine eigene TSQLConnection vorhanden ist und diese Teilung konsquent umgesetzt wird. Aber ich bin mir dabei nicht wirklich sicher....
[edit]
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Generalissimo

Registriert seit: 28. Aug 2003
187 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: Datenbanken und INSERTS in Threads

  Alt 30. Dez 2004, 17:20
Soweit ich weiss ist ANSI-SQL nur ne Art von SQL-Syntax.
Er meint aber den Zugriff auf die Datenbank. Ob DBExpress, IBX, ADO etc.
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#5

Re: Datenbanken und INSERTS in Threads

  Alt 30. Dez 2004, 17:25
Ich benutze TSQLConnection. Das ist eine DBExpress-Komponente.

[kleinlaut] Ist sie doch, oder? [/kleinlaut]
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Datenbanken und INSERTS in Threads

  Alt 30. Dez 2004, 18:00
Zitat von Tonic1024:
Nach allem was ich weiss ist DBExpress Threadfähig wenn für jeden Thread eine eigene TSQLConnection vorhanden ist und diese Teilung konsquent umgesetzt wird. Aber ich bin mir dabei nicht wirklich sicher....
Dann Probiers halt einfach mal aus. Da ich kein DBExpress verwende kann ich dir nicht mit Tests/Beispielen helfen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#7

Re: Datenbanken und INSERTS in Threads

  Alt 31. Dez 2004, 09:20
Ich bin dir für deinen Versuch mir zu helfen sehr dankbar, aber ich denke ich habe oben (in meinem ersten Post) relativ deutlich beschrieben was bei diesen Versuchen herausgekommen ist.

Ich komm so nicht weiter.
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von CenBells
CenBells

Registriert seit: 30. Mär 2003
Ort: Kiel urspr. Lübeck
176 Beiträge
 
Delphi 7 Professional
 
#8

Re: Datenbanken und INSERTS in Threads

  Alt 31. Dez 2004, 16:55
hi,

machst du auch irgendwann nach dem einfügen mal nen commit? oder machst du den erst am ende des threads???

Gruß
Ken
Ein Objekt ist eine zur Ausführungszeit vorhandene für seine Instanzvariablen Speicherplatz allokierende Instanz, die sich gemäß dem Protokoll ihrer Klasse verhält.
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#9

Re: Datenbanken und INSERTS in Threads

  Alt 6. Jan 2005, 16:45
Hi...


Da ja alle kleinen Projekte wichtiger sind als manche Große ( ) konnte ich meine Arbeit nicht so recht voranbringen die letzte Woche... Nun habe ich wieder die Möglichkeit...

Okay...

Ich habe beides Versucht. Commit nach jedem Insert und nur zum Schluss. Es scheint jedoch so, als wenn der Engpass nicht im Programm selbst steckt, sondern im Interbaseserver selbst. Denn in beiden Fällen laufen die beiden Threads zusammen wesendlich langsamer als eine einfache Schleife im Hauptprogramm.

Kann es sein, dass der Server die ganzen Anfragen nicht so schnell verarbeiten kann und besser "voran kommt" wenn man ihn langsam füttert? Ist es so? Kann man was dagegen tun? Jemand noch ne Idee??

MfG

Tonic
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Datenbanken und INSERTS in Threads

  Alt 6. Jan 2005, 16:53
Hast du drauf geachtet, daß in jedem Thread eine EIGENE Datenbankverbindung erstellt wird. Ich hab noch nicht mit DBExpress gearbeitet, jedoch ist es bei der BDE (und auch bei den Zeos Komponenten) so, daß du all deine TTables etc. an eine DB Kompo bindest. Ist dies in beiden Thread die gleiche DB Verbindung, kann es zu Problemen kommen, wenn beide Threads gleichzeitig was an den Server schicken, da dies in der gleichen Transaktion passiert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:02 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