|
| » myCSharp.de Diskussionsforum |
|
|
|
|
Autor
 |
|
Cookiie
myCSharp.de-Mitglied
Dabei seit: 27.06.2007
Beiträge: 360
Entwicklungsumgebung: VS 2010 Herkunft: früher Leipzig, jetzt Out of Rosenheim
|
|
verwendetes Datenbanksystem: Access 2007/2010
Hi,
ich arbeite zwar momentan unter VB.net, sollte aber für das Problem nicht relevant sein.
Folgendes Konstrukt:
Ich habe eine HauptConnection für die DB im MainThread. Für gewisse Aufgaben starte ich einen Backgroundworker der eine eigene Connection erhält und diese nach getaner Arbeit auch wieder aufräumt.
Im konkreten Fall erstelle ich ein größeres Dokument und speichere es im Backgroundworker in der DB und nach beenden des Workers lade ich selbiges und versuche es anzuzeigen.
Mitunter findet der Hauptthread den neuen Datensatz nicht, obwohl dieser fertig geschrieben wurde.
Wenn der selbe Code mit dem SQL-Server durchlaufen wird, gibt es keine Probleme.
Hat Access hier ein gewisses Delay bzw. wie kann ich sicherstellen, das ich mit dem Hauptthread auf den Datensatz der durch den Nebenthread geschrieben wurde zugreifen kann?
Gruß Cookiie
|
|
21.06.2012 09:26
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
gfoidl
myCSharp.de-Team (Moderation)
Dabei seit: 07.06.2009
Beiträge: 5.362
Entwicklungsumgebung: VS 2010 sup{Editionen} Herkunft: Waidring / Tirol
|
|
Hallo Cookiie,
Access ist ja auch keine Datenbank ;-)
Nimm besser eine vernüftige Datenbank und das Problem ist gelöst. Im Forum wurden solche Themen schon öfters behandelt. Eine Übersicht über Datenbanken zeigt Empfehlungen für SQL-Datenbank gesucht
mfG Gü
|
|
21.06.2012 11:07
|
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
Abt
myCSharp.de-Team (Moderation)
Dabei seit: 20.07.2008
Beiträge: 3.404
Entwicklungsumgebung: VS2010, VS2012, ReSharper Herkunft: Stuttgart
|
|
Bei mehreren Threads auf Access, das dafür einfach nicht gedacht ist, sind solche Phänomene eben vorhanden.
Eine Lösung wäre eben eine Schnittstelle für die Access-Datenhaltung zu schreiben, die alles sequenziell über eine einzige Verbindung hält.
zB ein Repository mit einem Nested Singleton.
Willst Du auf der parallelen Zugriffschine über mehrere Verbindungen bleiben, dann musst Du mit solchen Phänomenen leben.
|
|
21.06.2012 12:28
|
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
FZelle
myCSharp.de-Poweruser/ Experte
Dabei seit: 23.04.2004
Beiträge: 8.490
|
|
Indem man schon mal keine offene globale Connection benutzt.
Der Jet Treiber der von OleDb benutzt wird ist ein ekelhaftes gerät wenn man mehr als eine Verbindung gleichzeitig offen hat.
Deshalb sollte man das tunlichst vermeiden.
Das Problem ist aber das Connectionpooling das bei Multizugriff auf mdb's nicht wirklich vorteilhaft ist.
Also schalte Connectionpooling aus und lass auf keinen Fall die HauptConnection offen.
|
|
21.06.2012 12:30
|
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
san-software
myCSharp.de-Mitglied
Dabei seit: 28.08.2008
Beiträge: 52
|
|
Ich habe bei Accees festgestellt, daß genau Dein Problem mit einer Transaktion zu lösen ist.
Tatsächlich arbeitet der Access-Treiber im Hintergrund und schreibt teilweise Daten bzw. Verwaltungsdaten erst in die DB zurück, wenn er Lust :-) hat.
Durch öffnen einer Transaktion, schreiben der Daten und anschliessendem Commit wird er dazu gezwungen die Daten entgültig zu schreiben.
Damit sollte es eigentlich funktionieren.
|
|
21.06.2012 12:45
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
FZelle
myCSharp.de-Poweruser/ Experte
Dabei seit: 23.04.2004
Beiträge: 8.490
|
|
| Zitat: |
| Aber solange der Leidensdruck noch nicht hoch genug ist under ProduktOwner nichts anderes sagt, bleibts eben bei Access + SQL Server. |
Deswegen die Frage.
|
|
22.06.2012 10:58
|
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
|
|