Dataset mit änderungen der Datenbank updaten

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Dataset mit änderungen der Datenbank updaten

    Hi,
    ich habe ein DataTable mit Daten von einer Access Datenbank via DataAdapter gefüllt.
    Kann ich die Datatabel irgendwie mit den Anderungen der Datenbank "updaten"?
    oder auch alles ganz neu einlesen?

    VB.NET-Quellcode

    1. Dim SQL As String
    2. SQL = "SELECT * FROM Artikel ORDER BY ArtikelNr"
    3. conDB1.Open()
    4. DaArtikel.SelectCommand.CommandText = SQL
    5. CbArtikel = New OleDbCommandBuilder(DaArtikel)
    6. DaArtikel.Fill(DtArtikel)
    7. DsArtikel.Tables.Add(DtArtikel)
    8. Datagridview1.DataSource = DtArtikel
    reinschreiben in die Datenbank möchte ich nicht. Also kein normales Update.

    Ich möchte auch keine Benachrichtigung von der Datenbank.

    eigentlich möchte ich nur ein
    DaArtikel.Fill(DtArtikel)
    nochmals aufrufen, das geht aber nicht da dann die Datensätze doppelt vorhanden sind.
    Das Datatable komplett leeren und dann ein FILL ginge auch oder das Dataset komplett löschen und neu erstellen.
    Aber wie?

    VB.NET-Quellcode

    1. For I = 0 To DsArtikel.Tables("DtArtikel").Rows.Count - 1
    2. DsArtikel.Tables("DtArtikel").Rows(0).Delete()
    3. Next


    das kann es ja wohl nicht sein!
    Ich habe ein Programm, beim Start wird die ArtikelDatenbank mit ArtikelNr, Preis, ArtikelName usw. in ein Datatable eingeladen.
    Mit dieser ArtikelDataTabel arbeite ich.
    Wenn ich jetzt in der ArtikelDatenbank änderungen vornehme z.B. Preis, oder auch einen neuen Artikel anlege habe ich es bis jetzt so gemacht, dass ich das Programm beende und neu starten muss, damit die Änderungen übernommen werden.

    Ich hätte aber gerne das der Anwender (also meistens ich) einen Menüpunkt "Neu einlesen" anklickt und die neuen Daten werden neu eingelesen.
    Das kann natürlich auch so sein, dass die Datenbank erneut ganz eingelesen wird.
    Ich hake mich mal als Mitfragesteller ein, da es um quasi genau dieses Thema geht: Kann man die DBMS dazu bringen, dass man ne Info bekommt, wenn die einst angeforderten Tabellen von einem anderen Programm geändert wurden? Unterstützen die most common DBMS (welche immer das auch sein mögen) dieses Feature - falls es denn ein erwünschenswertes ist?
    Ich selber habe mir zur Erweiterung meiner tDS-Benutzung ein Pseudo-Mini-"DBMS" gebastelt, welches alle Tabellen bereithält und sich auch merkt, welche App welche Tabelle angefordert hat. Und wenn eine App eine Tabelle ändert, werden per Event alle anderen Apps informiert, die jene Tabellen auch angefordert haben. Was jene Apps dann damit machen, bleibt dann denen überlassen. Aber was sollte sie tun? Klar, ist schwer, ne pauschale Aussage zu machen. Sollen die Daten, die von der laufenden App abgeändert wurden, weggeworfen und durch die App-Daten ersetzt werden, die beim DBMS gemeldet wurden? Soll man sie mergen? Nachfragen? Änderungen anzeigen? Was würdet Ihr als Benutzer erwarten bzw. als Entwickler implementieren?
    Ein Beispiel: Ein Telefonlistenprogramm wird auf 2 PCs gleichzeitig ausgeführt. Am Büro-PC wird der Nachname von Mitarbeiter Max Müller in Max Meier wegen Heirat im Telefonbuch geändert. Gleichzeitig wird an Werkstatt-PC dessen Nummer geändert, weil er zur Hochzeit ein neues Handy mit neuem Vertrag geschenkt bekommen hat. An Büro-PC wird auf [speichern] geklickt und somit dem DBMS gemeldet. Nun meldet das DBMS der App an PC 2, dass es Änderungen gab. Nun die Frage auch an Euch: Wie sollte sich die App am Werkstatt-PC verhalten? Bitte jetzt nicht: »Um Personalsachen sollte sich nur ein Mitarbeiter an einem Arbeitsplatz kümmern.« Es kann sich ja auch um ein Warenwirtschaftsprogramm mit Lagerortinformationen oder Beständen handeln.

    (Wie man sicher rauslesen kann, habe ich nicht die geringste Erfahrung mit echten DBMS)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    VaporiZed schrieb:

    Kann man die DBMS dazu bringen, dass man ne Info bekommt

    Beim MS-SQL gibt es SqlDependency.
    Bei anderen DBMS wüsste ich keine native Methode.

    Aber du kannst es auch über das Design lösen.
    Du kannst eine automatisch sich füllende Spalte mit dem UpdateTimestamp anlegen und diese ggf. bei einem Select oder Update auf diese Spalte abfragen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --