TableAdapter.Update funzt nicht...



  • Hallo Leute,

    ich habe ein Programm geschrieben die mit einer Access Datenbank arbeitet und die Netzwerkfähig sein soll!
    Nun muss ich die DB in gewissen Abständen aktualisieren, könnte ja sein, das ein andere USER einen Datensatz gelöscht oder hinzugefügt hat.

    Nun versuche ich es mit der Methode...

    bspTableAdapter.Update(this.bspDataSet.KundenDaten);
    

    Diese Methode zeigt aber die Änderungen nicht an, also der TableAdapter wird nach meinem Gefühl nicht upgedatet.

    Nehme ich hingegen die Fill Methode...

    bspTableAdapter.Fill(this.bspDataSet.KundenDaten);
    

    klappt das, aber da flakern die TextBoxen und das sieht nicht gut aus und ist auch nicht Sinn und Zweck der Sache.

    Warum funzt die Update Methode nicht wie in der Doku beschrieben?
    Kann ich das anders machen?

    Vielen Dank für die Hilfe im Voraus.

    Felix



  • Update fügt nur die eigenen Änderungen in die Datenbank hinzu (du hast also die Doku falsch verstanden -)
    Und mit Fill holst du dir den gesamten Datenbestand neu aus der Datenbank.

    P.S. Access und "netzwerkfähig" passen überhaupt nicht zusammen. Warum kannst du keinen passenden DB-Server verwenden (z.B. SQLServer Express, PostGreSQL)?



  • Danke Th69 für Deine Antwort.

    Aber das stimmt so nicht ganz, dass Access nicht Netzwerkfähig ist.

    ACCESS und dessen (wohl vorhandene Jet-Datenbankengine,User und Rechte Verwaltung,...) ist in vielen Aspekten sogar genau dafür konzipiert auf Netzwerken von mehreren Benutzern gleichzeitig genutzt zu werden.

    ACCESS ist eine professionelle, kostengünstige ALL-IN-ONE Lösung für kleine bis mittelgroße Datenbankanwendungen die auch optimal im Netzwerk von mehreren Benutzern genutzt werden kann. Das das auch funktioniert setzt natürlich das nötige Know-How voraus.

    http://www.administrator.de/index.php?content=25480

    Werde wohl die Fill Methode nehmen müssen.



  • Felix H schrieb:

    Aber das stimmt so nicht ganz, dass Access nicht Netzwerkfähig ist.

    Access hat im Mehrbenutzerbetrieb einige ganz gravierende Nachteile.

    Die SQL-Engine wird auf dem Client ausgeführt, was dazu führt das mehr Daten als nötig über das Netzwerk gehen (Da Filterungen etc. erst auf dem Client durchgeführt wird), ebenso liefern einige SQL-Funktionen nicht die Rückgaben, die man eigentlich erwartet (z.B. Gibt es keine möglichkeit die Serverzeit abzufragen, Now() liefert die Clientzeit)... Und noch vieles mehr.



  • Felix H. schrieb:

    Nun muss ich die DB in gewissen Abständen aktualisieren, könnte ja sein, das ein andere USER einen Datensatz gelöscht oder hinzugefügt hat.

    Vorsicht, wenn die User gleichzeitig mit den Daten hantieren wird Ihnen ständig eine DBConcurrencyException um die Ohren fliegen.

    Die Einfachheit der TableAdapter geht im Mehrbenutzerbetrieb leider ganz schnell verloren und dann ist Programmierarbeit angesagt um die potentiellen Datenkonflikte in den Griff zu kriegen.



  • Felix H. schrieb:

    Hallo Leute,

    ich habe ein Programm geschrieben die mit einer Access Datenbank arbeitet und die Netzwerkfähig sein soll!
    Nun muss ich die DB in gewissen Abständen aktualisieren, könnte ja sein, das ein andere USER einen Datensatz gelöscht oder hinzugefügt hat.

    Microsoft Access beinhaltet keine Funktionen für Nebenläufigkeit. Du wirst also nie zuverlässig erkennen können, ob ein anderer Benutzer einen Datensatz verändert, gelöscht oder hinzugefügt hat. Besser wäre in diesem Fall ein richtiges Datenbanksystem.



  • schmidt-webdesign.net schrieb:

    Microsoft Access beinhaltet keine Funktionen für Nebenläufigkeit. Du wirst also nie zuverlässig erkennen können, ob ein anderer Benutzer einen Datensatz verändert, gelöscht oder hinzugefügt hat

    .

    Auch wenn ich Access einige Qualitäten abstreite, kann ich mich dieser Aussage nicht anschließen. Wir haben in unserer Anwendung zwar gewisse Probleme mit der eingeschränkten Mehrbenutzerfähigkeit, das scheitert aber weder an Sperrmechanismen, Transaktionssicherheit...

    Ich würde von Access zwar abraten, aber gewisse Möglichkeiten gibt es auch mit Access und der Jet-Engine.



  • Welcher Aussage von schmidt-webdesign.net kannst Du Dich nicht anschießen? Dass Access keine Nebenläufigkeitsfunktionen unterstützt? Tut es nicht. Dass Du nie zuverlässig erkennen kannst, ob ein anderer Benutzer einen Datensatz verändert, gelöscht oder hinzugefügt hat? Kannst Du nicht. Dass in diesem Fall ein richtiges Datenbanksystem besser wäre? Das wirst Du nicht bestreiten können.



  • csa104 schrieb:

    Welcher Aussage von schmidt-webdesign.net kannst Du Dich nicht anschießen? Dass Access keine Nebenläufigkeitsfunktionen unterstützt? Tut es nicht. Dass Du nie zuverlässig erkennen kannst, ob ein anderer Benutzer einen Datensatz verändert, gelöscht oder hinzugefügt hat? Kannst Du nicht.

    Man kann aber mittels Sperren zum Schreiben die Änderung von anderen unterbinden (und dies kombiniert mit einem vorherigen Select - unabhängig wie schlecht dies in der Performance ist, lässt schon gewisse Sicherheiten zu). Sofern man diese Sperren immer nur kurzzeitig setzt, kann man eine gewisse "Nebenläufigkeit" schon simulieren (wenn man ggf. andere Zugriffe zeitweise "warten" lässt).

    csa104 schrieb:

    Dass in diesem Fall ein richtiges Datenbanksystem besser wäre? Das wirst Du nicht bestreiten können.

    Das will ich auch gar nicht. Aber man kann auch mit Access durchaus (zu gewissen Zusatzkosten) den Mehrbenutzerbetrieb verwenden. Ich würde, wenn ich nicht dazu gezwungen bin (weil Arbeitsvorgaben) niemals etwas mit Access als DB umsetzen, nur gibt es durchaus Anwendungen die auch mit Access laufen können - nur sollte man sich darüber bewusst sein, das Access massive Einschränkungen hat.


Anmelden zum Antworten