mehrere Daten aus lokaler Datenbank laden und wieder einfügen

  • VB.NET

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

    mehrere Daten aus lokaler Datenbank laden und wieder einfügen

    Hallo,
    Hab mal wieder ein Projekt am Laufen. Nur diesmal in VB2010 ;)

    Folgendes: Ich hab eine lokale Datenbank erstellt. In der Datenbank ist eine Tabelle mit 5 Spalten (Spitzname, Vorname, Nachname, Betrag & Farbe)

    Hab mal 3 Zeilen ausgefüllt und das Programm hat 10 Zeilen aus jeweils 4 Textfelder (Spitzname(1-10), Vorname(1-10), Nachname(1-10) & Betrag(1-10).
    Wenn ich jetzt eine Zeile in dem Datagridview (von der Tabelle) anklick, sollen die Daten in die TextFelder(1) geschrieben werden. Die Zeile, die ich als 2. Anklick in die textfelder(2), usw.
    Das funktioniert alles soweit.


    Außerdem gibt es noch 5 Textfelder (SpitznameNeu, VornameNeu, NachnameNeu, BetragNeu (Wert = 0,00) & FarbeNeu (oder Combo-Box, weiß ich noch nicht.)
    Ein Button (NeuHinzufügen) soll die Daten dann in die Datenbank laden.

    Nun zu dem Problem:
    Mit den Button NeuHinzufügen kann ich die Daten zwar in das Datagridview laden, aber ich kann danach diese Daten durch einen Klick auf die Zeile NICHT in die Text Felder schreiben. Was kann das Problem sein?
    Dass die Daten evtl nur im Datagridview sind, aber noch nicht in der Datenbank?

    Nächstes Problem:
    Ich will durch einen weiteren Button erreichen, dass die Beträge, die in die Textfelder Betrag(1-10) alle +5 ( z.B. Betrag1.Text = Betrag1.text + 5) werden. Danach sollen die neuen Beträge zu dem richtigen Datensatz in der Datenbank geändert werden. Wie könnte ich das realisieren?

    Wenn noch unklar ist, was ich mein, kann ich heute Abend ws noch Screenshots und bereits geschriebene Codes Posten.

    danke schon mal für eure Bemühungen.
    1. Ich denke, ist besser, du löst ein Problem nach dem anneren.
    2. Du hast offensichtlich einen Detailview erstellt, aber möglicherweise mit ganz unggeigneten Mitteln (nämlich mit Rumfummeln im DGV statt mit Databinding)
      Guck dir mal den DetailView an, wie er inne vier Views-Videos gebaut wird (FilmIV).
    3. Auch zu überlegen wäre, ob es nicht eine bessere Userführung wäre, wenn du bei Button_Neu_Click einfach einen Extra-Dialog öffnest, wo man die Daten eintragen kann.
      Dann hast du nicht so viele Textboxen auf deim MainForm rumzufahren, und einfacher zu coden ist das ausserdem.
      Hierzu siehe Daten laden, speichern, verarbeiten - einfachste Variante

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    2. Okay, danke, aber was ich zu dem Thema gestern gelesen hab, weiß ich nicht, ob des genau des is, was ich such ;)
    Schaus mir heut abend mal an. Mal schaun, Vllt is was brauchbares dabei ;)

    3. Ja des is mir schon klar ;P des is dann eh nur noch ne Formsache ;)
    Deine Beschreibung ist mir bis zu diesem Abschnitt klar:
    "Ein Button (NeuHinzufügen) soll die Daten dann in die Datenbank laden."

    Danach kann ich mir zwar was vorstellen, -ich gebe es mal wieder wie ich es versteh.
    Die Textfeld wurden aus dem Datagridview befüllt, die anden manuell und dann wurde es in dei DB geschr?

    Dann an dieser Stelle, komm ich nicht ganz hintzerher: "Mit den Button NeuHinzufügen kann ich die Daten zwar in das Datagridview laden..." Dieser Button schreibt doch die neuen Daten in die DB?
    Lässt du sie ausserdem auch in das Datagried schreiben?

    Vielleicht kannst du code posten oder es nochmal beschr. mir scheint das nicht so schwierig, da lässt sich sicher was machen ohne dass du dir zich video anschauen musst.
    JonDonym
    Eine Anonymisierung-Tool, das nicht nur deine IP verdeckt, sondern deine History, BrowserTyp, Windows-Version etc.
    Das Tool hat ca. 5 FreeKaskaden und ca. 10 Premium. Minimum 5 EUR für ein Volumen von 650MB.
    Also folgendes: ich klick die Namen im Datagridview an. Und die Werte werden dann in die entsprechenden Textboxen geladen. Danach will ich bei manchen Textboxen den Wert ändern. Der alte Wert aus der DB soll zusätzlich auch durch den neuen ersetzt werden.

    Mit den Button NeuHinzufügen ladets Werte aus anderen Textboxen in das Datagridview. Aber nicht in die Datenbank. Hab da den falschen Code:
    Datagridview.add(Vorname.Text, Nachname.Text, wert.Text)
    Oder so ähnlich ;)

    Speicherproblem

    Okay, soweit alles klar. Danke :)

    Hab mir die Videos I - IV angeschaut und soweit verstanden.
    Nur hab ichs noch nicht ganz fertig gebracht, die Daten dann in der Datenbank zu speichern :O heißt, wenn ich die Datenbank wieder öffne, dann ist sie wieder leer. Im Video werden die Daten ja immer wieder neu durch einen Code generiert.
    Ich möchte die Datenbank aber befüllen und beim nächsten Start sollen genau diese Werte wieder in der Datenbank stehen.
    ich empfehle ja, bei so Kleinkram das Dataset einfach mit Dataset.WriteXml auf Platte zu schreiben.
    Eine DB braucht man dafür nicht - da handelt man sich nur erhebliche Komplikationen ein ohne jeglichen Vorteil.
    gugge Daten laden und speichern
    Wie gesagt: Das gilt für Kleinkram bis ca. 20000 Datensätze und Einzel-Nutzer-Anwendungen.
    Aber sogar auch anderenfalls empfehle ich, erst ohne DB zu entwickeln, weil die kann man jederzeit noch später hinterlegen, und hat sich dadurch sehr viel Ärger gespart, wenn man zwischendrin das Datenmodell ändern muss (was eiglich nie ausbleibt).
    Genau das hab ich auch schon rausgefunden, aber ich muss ja dann quasi Dataset.WriteXml(Dateiname) angeben? aber wie erstell ich die Datei mit dem Namen (in dem Fall) "Dateiname"?

    Ich bin einfach zu blöd :cursing: ...

    VB.NET-Quellcode

    1. Private _Datafile As New FileInfo("Dataset1.xml")

    --> des geht nicht :O

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „tobikell“ ()

    Der Typ "FileInfo" ist nicht definiert


    hab den Fehler ;) hab die System.io nicht importiert




    und wie kann ich da jetzt die Werte aus Textboxen hinzufügen?
    ich krieg die Fehlermeldung:

    Zeilen können nicht automatisch zur Zeilenauflistung der DataGridView hinzugefügt werden, wenn das Steuerelement datengebunden ist.


    Habe die Textboxen mit dem Dataset verknüpft, wie du es in deinen Filmen gemacht hast..

    Bitte keine Posts hintereinander in so kurzer Zeit! Es gibt eine "Bearbeiten"-Funktion. ~Thunderbolt

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thunderbolt“ ()

    okay, aber ich will ja nichts kopieren sondern von mehreren Textboxen die Werte eingeben. Habe aber noch nicht ganz verstanden, wo genau ich die dann einfügen muss.

    ist es so richtig?

    VB.NET-Quellcode

    1. Dim neuezeile = Allepersonen.Alle_Personen.AddAlle_PersonenRow()

    Falls ja, was muss ich da hinten in die klammer schreiben?
    Allepersonen = dataset
    Alle_Personen = datatable

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

    Das sagt dir doch Intellisense, was du da reinschreiben sollst - oder nicht?
    Sobald du die geöffnete Klammer hinschreibst, müsste Intellisense dir zuHilfe springen.

    Ist im Video aber auch genau gezeigt, wie Intellisense da aufpoppt, und ist auch gezeigt, dass man nicht den ersten Intellisense-Vorschlag nehmen soll, sondern den zweiten.

    Ich könnte es dir auch noch genauer vorbeten, wenn ich wüsste, welche SpaltenNamen deine All_PersonenDataTable hat.
    okay, hab's verstanden:

    VB.NET-Quellcode

    1. Allepersonen.Alle_Personen.AddAlle_PersonenRow(LID.Text,
    2. Spitzname.Text, Vorname.Text, Nachname.Text, Betrag.Text,
    3. LGesamtbetrag.Text, LBesuche.Text, LZuletzt.Text, LZeit.Text)

    aber
    es wird nichts im datagridview angezeigt (und somit auch nicht in der
    xml-datei gespeichert). Muss ich das datagridview noch refreshen oder
    so?


    jetzt geht gar nichts mehr :O
    - im DataGridFiew werden die Header nicht mehr so angezeigt, wie vorher
    - des mit der Speicherung geht auch nicht mehr (wenn ich eine neue Zeile erstell, is die zwar beim nächsten Öffnen vorhanden, aber immer leer) :O

    VB.NET-Quellcode

    1. Private _Datafile As New FileInfo("Dataset1.xml")
    2. Private Sub Datenbank_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    3. ' Me.Validate()
    4. Allepersonen.WriteXml(_Datafile.FullName)
    5. End Sub
    6. Private Sub Datenbank_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    7. Allepersonen.Clear()
    8. If _Datafile.Exists Then Allepersonen.ReadXml(_Datafile.FullName)
    9. End Sub


    ich verzweifel jetzt dann... :(


    Bitte keine Doppelposts in so kurzer Zeit! Es gibt eine "Bearbeiten"-Funktion! ~Thunderbolt

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thunderbolt“ ()

    tja, weiß ich auch nicht, was du verdaddelt hast. Das Adden sieht jdfs. richtig aus - soweit man das bei einer Zeile Code ohne Zusammenhang sehen kann.
    Poste dochmal das ganze Form.
    Aber schmeiß vorher allen Müll raus falls welcher drinne ist - es sollten nur 3 Methoden sein: _Load, _FormClosing und vmtl. ein ButtonClick.
    Hallo, sry, dass ich mich nicht mehr gemeldet hab, hatte einfach leider keine Zeit :/

    ich werde jetzt ein paar Bilder posten, dass ihr euch besser vorstellen könnt, was ich überhaupt machen will. Vllt könnt ihr mir dann besser helfen.

    Die Formen haben teilweise ein anderes Design, weil ich bei manchen Screenshots eine alte, einfachere Verion des Programmes nehmen musst, da sie leider in der Aktuellen nicht mehr Funktioniert :/ außerdem hab ich aus irgendeinem Grund die Fehlermeldung "Fehler 1 Zwei Ausgabedateinamen wurden zum selben Ausgabepfad aufgelöst: "obj\x86\Debug\Kasse.NeuerAnwesend.resources" Kasse1". Weiß vllt jemand, was des Problem sein kann?

    Also, so schaut meine Startform am Anfang aus:


    Durch den Button "Hinzufügen" soll die Datenbank geöffnet werden und dann kann man eben die Personen auswählen:


    Im "Panel 2" wird dann noch ein Button hinzugefügt, mit dem man bei der Datenbank einen Datensatz hinzufügen kann. Spitzname, Vorname, Nachname und Betrag = Gesamtbetrag werden manuel hinzugefügt. Die ID soll bei jedem neuen Hinzufügen um 1 erhöt werden. In "Letzter Besuch" wird "-" geschrieben, sowie bei "Besuche" und "Anwesende Zeit" der Wert "0".

    Jetzt kann man aus der Datenbank einen Datensatz auswählen, der dann in die Startform geschrieben wird. Der Vorgang kann bis zu 10x durchgeführt werden, je nach dem, wie viele Datensätze man hinzufügen will:

    Bei diesem Vorgang erhöt sich die Anzahl der Besuche in dem Datensatz um 1. Außerdem wird ein Timer gestartet, der die Anwesende Zeit mitzählt und evtl (noch nicht sicher) alle 30 min zu der Anwesenden Zeit in dem Datensatz addiert. Das Datum in "Zuletzt Anwesend" wird auf das heutige Datum gesetzt.


    Jetzt kann man durch das Draufklicken auf eine Person diese Markieren:


    In die Textbox kann man die Anzahl der Getränke schreiben und mit einem Klick auf einen beliebigen Button darunter kann man den Preis * Anzahl zu dem Preis der markierten Person hinzufügen. Die Markierung wird wieder aufgehoben. (Hier einmal auf "Glühwein 70ct" geklickt mit der Anzahl 1):

    Auserdem soll in der Datenbank bei dem Datensatz der Betrag und der Gesamtbetrag um den Preis (hier: 70ct) erhöt werden. (Hier Positiv angezeigt. aber sollt mit Betrag*-1 ja kein Problem sein ;)).

    Jetzt kann man wieder eine Person markieren, den Button "Bezahlen" drücken und den Betrag, der gezahlt wird, eingeben:

    Der Betrag, der bezahlt wird, soll dann in dem Datensatz von "Betrag" abgezogen werden.





    So, nun mein Code von der Datenbank:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Datenbank
    3. Private _Datafile As New FileInfo("Dataset1.xml")
    4. Private Sub Datenbank_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    5. ' Me.Validate()
    6. Allepersonen.WriteXml(_Datafile.FullName)
    7. End Sub
    8. Private Sub Datenbank_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    9. Allepersonen.Clear()
    10. If _Datafile.Exists Then Allepersonen.ReadXml(_Datafile.FullName)
    11. End Sub
    12. End Class


    Ich hoff, ihr könnt mir jetzt weiterhelfen :)

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

    hmm.
    Ich frug nach dem Code des ganzen Forms und kriege eine Art BilderGalerie zu sehen - danach hab ich aber nicht gefragt.

    Immerhin von einem Form "Datenbank" gibt es den Code zu sehen: ist das das Form, bei dem du keine Datensätze adden kannst?
    Die Erklärung ist einfach: Dieses Form enthält keinerlei Code, der einen Datensatz zu adden überhaupt versucht.
    Ich dachte, den Code von der Form "Datenbank"?

    In der Startform sin ja einige andere Codes wie zum Beispiel "nur Zahlen zulassen" und die ganzen Button und da funktioniert ja auch alles so wies soll.
    Dass ich noch keine Datensätze adden kann, ist mir klar, da ich einfach null Plan hab, wie das funktioniert und ich das wieder gelöscht habe, aber ich fügs schnell ein.

    Vllt funktioniert alles :O aber durch den Fehler "obj\x86\Debug\Kasse.NeuerAnwesend.resources" Kasse1" kann ich es ja nicht testen :O

    der Code:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Datenbank
    3. Private _Datafile As New FileInfo("Dataset1.xml")
    4. Private Sub Datenbank_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    5. Me.Validate()
    6. Allepersonen.WriteXml(_Datafile.FullName)
    7. End Sub
    8. Private Sub Datenbank_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    9. Allepersonen.Clear()
    10. If _Datafile.Exists Then Allepersonen.ReadXml(_Datafile.FullName)
    11. End Sub
    12. Private Sub Hinzufügen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Hinzufügen.Click
    13. LID.Text = LID.Text + 1
    14. Allepersonen.alle_personen.Addalle_personenRow(LID.Text, Spitzname.Text, Vorname.Text, Nachname.Text, Betrag.Text, Lgesamtbetrag.Text, LBesuche.Text, LZuletzt.Text, LZeit.Text)
    15. End Sub
    16. Private Sub Betrag_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Betrag.TextChanged
    17. Lgesamtbetrag.Text = Betrag.Text
    18. End Sub
    19. End Class

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

    natürlich den Code der Form "Datenbank" - wenns bei dir halt so heißt.
    Da lädtst du das Dataset und da speicherst du es.
    Nu braucht dieses Form auch einen Button zum Zufügen von Datensätzen.
    Weil sonst kann es keine Datensätze zufügen - haste ja schon gemerkt ;)

    Bitte jetzt nicht ein anderes Form posten. Du lädst das Dataset in "Datenbank", und speicherst es auch dort ab, dann musste auch dort einen Datensatz zufügen.