Access Datenbank speichern

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Access Datenbank speichern

    Hallo.

    Ich habe ein Programm geschrieben, in dem ich Daten in einer Lokalen Datenbank speichere. Die Datenbank habe ich mit Access erstellt und in Visual Studio 2013 über den DB Manager eingefügt. Die Datenbank besteht aus zwei Tabellen. Einmal die Tabelle Effekte und die Tabelle Schritte. Ich kann in der Datenbank alles machen, was ich will. Also Daten abrufen und hinzufügen usw. Die Daten die ich Hinzufüge werden auch in der Listbox, wo ich die Effekte Tabelle als DataBinding angebunden habe, angezeigt, also die Daten kommen theoretisch in der Datenbank auch an.

    Mein Problem ist allerdings, dass wenn ich mein Programm schließe, dass die Datenbank wieder im Ausgangszustand ist, wie ich sie bei Access gespeichert und bei VB eingebunden habe. Was kann ich machen, damit die Daten auch in der Datenbank bleiben?

    Folgendes habe ich schon versucht:

    VB.NET-Quellcode

    1. TableAdapterManager.UpdateAll(DBDataSet)


    VB.NET-Quellcode

    1. EffekteTableAdapter.Update(DBDataSet.Tables("Effekte"))
    2. SchritteTableAdapter.Update(DBDataSet.Tables("Schritte"))


    VB.NET-Quellcode

    1. Me.Validate()
    2. Me.EffekteBindingSource.EndEdit()
    3. Me.TableAdapterManager.UpdateAll(Me.DBDataSet)



    Wenn ich etwas Hinzufüge mache ich das so:

    VB.NET-Quellcode

    1. Dim zeile As DataRow = DBDataSet.Effekte.NewRow
    2. zeile("Effekt Name") = Name
    3. zeile("Start Bedinung") = Start_Bed
    4. zeile("Start Daten") = Start_Daten
    5. DBDataSet.Effekte.Rows.Add(zeile)



    Killerawft
    Ich hab jetzt noch ein weiteres Problem. Unzwar habe ich jetzt bei der DBDataset.xsd und der DB.mdb in den einstellungen auf kopieren, wenn neuer gestellt und es wir auch der Eintrag gespeichert. Allerdings, wenn ich eine Datei hinzufüge, wird in meiner zweiten listbox, die die Primärschlüssel der Effekte Anzeigt immer eine Negative Zahl gezeigt, also angefangen von -1, -2 usw. Wenn ich das Programm dann aber neu starte, werden mir die Effekte genau so angezeigt wie vorher, deren Primärschlüsselwerte haben sich jedoch verändert. Die werden dann Positiv und auch fortlaufend zu den anderen.

    Ich denke ich muss einfach, wenn ich einen neuen Eintrag hinzufüge, die Datenbank auf der HDD aktualisieren, damit das dataset merkt, dass die Primärschlüssel nicht bei -1 anfangen. Gibt es da so eine Funktion?

    Edit: Wenn ich mir die Daten im DataSet Designer als vorschau anzeigen lassen will, also die Fill() und GetData() funktionen, dann wird mir auch nichts angezeigt. Ich habe bei VB.net auch eine Datenbank mit leeren Tabellen hinzugefügt, die er jetzt warscheinlich anzeigt.
    Ich empfehle dir: Programmiere deine Anwendung ohne Datenbank.
    Das Problem mit den db-seitig generierten Primkeys ist ziemlich fies, und es gibt einfache Lösungen (etwa in der DB statt Primkeys zu generieren, die vom Dataset vorgegebenen zu übernehmen) und aufwändigere, bei denen die DB die Primkey-Hoheit behält.

    Spar dir diese Krämpfe, und programmier ohne Datenbank: das ist schneller, änderungs-flexibler, portabler, einfacher, sicherer. Datenbank kannste jederzeit später hinterlegen.

    Guggemol bei Datenverarbeitungs-Vorraussetzungen die weiterführenden Links, was es alles wichtigeres gibt, als den DB-Anschluss.
    Mein Programm soll aber alle effekte und schritte, die man hinzugefügt hat behalten und alle die man gelöscht hat vergessen. Da ist eine Datenbank, so denke ich zumindest, das Einfachste. Zumindest einfacher, als alles beim schliessen in eine Datei zu schreiben und beim Starten wieder auszulesen.

    Das Problem hat sich inzwischen auch schon so halbwegs erledigt. Ich fülle jetzt jedes mal, wenn ich an denDaten was ändere den jeweiligen table adapter neu mit ***TableAdapter.fill(DBDataset.***)

    Edit: Ich habs gerade komplett erledigt und es war ein Dummer Fehler von mir. Ich habe bei der Datenbank beim Primärschlüssel AutoIncrementSeed und AutoIncrementStep auf -1 gehabt, also hat er auc folgerichtig bei -1 angefangen und rückwärts gezählt. Damit kam aber die Access Datenbank nicht klar und hat die beim Beenden meines Programmes immer selbst nochmal umbenannt. SOmit waren beim zweiten Start von meinem Programm die Daten inkonsistent.

    Aber danke, dass sich hier doch nochmal jemand gemeldet hat und ich dank des verlinkten Videos das nochmal überprüft habe :)

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

    Da sind manchmal versteckte Fehler in der Konfiguration - führe mal folgende Schritte in genau dieser Reihenfolge aus:
    1. Datensatz zufügen - aber nicht speichern
    2. den neuen Datensatz wieder löschen
    3. noch einen Datensatz zufügen
    4. speichern
    5. eine Änderung am neuen Datensatz ausführen
    6. speichern - hierbei kann es bei bestimmten Konfigurationen dann zum Fehler kommen.