Listview in die MySQL DB speichern

  • VB.NET

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

    Listview in die MySQL DB speichern

    Hallo

    Ich versuche nun schon etwas länger eine Listview in die MySQL Datenbank zu schreiben.
    Natürlich möchte ich sie später auch wieder in die Listview läde können.

    So nun zum Problem
    Ich benutze die MySQL Lib 3 von dodo, da meine db keine externen zugriffe zulässt

    Nun habe ich versucht mit diesen Code die daten in die db reinzuschreiben aber es kommt immer der Fehler:


    VB.NET-Quellcode

    1. Private Sub ToolStripButton4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton4.Click
    2. ' Anzahl ListView-Spalten
    3. Dim lvwCols As Integer = ListView1.Columns.Count
    4. Dim daten As String = ""
    5. Dim sdaten As String = ""
    6. Try
    7. For i As Integer = 0 To lvwCols - 1
    8. daten = ListView1.Items(i).Text.ToString
    9. For u As Integer = 1 To lvwCols - 1
    10. sdaten = ListView1.Items(i).SubItems(u).Text.ToString
    11. Next
    12. Next
    13. Catch ex As Exception
    14. MessageBox.Show(ex.Message)
    15. End Try
    16. Try
    17. db.Query("INSERT INTO `salome-waggler` (`id`) VALUES (" & daten & ")")
    18. db.Query("INSERT INTO `salome-waggler` (`sname`, `level`, `karten`) VALUES (" & sdaten & ")")
    19. Catch ex As Exception
    20. MessageBox.Show(ex.Message)
    21. End Try


    Spoiler anzeigen

    so sieht das Listview aus:


    so sieht die db aus:



    Ich hoffe ihr könnt mir weiterhelfen

    MfG Germanys-Life
    hi

    danke für deine antwort aber irgendwie bin ich zu blöd gerade
    bei mir kommt der gleiche fehler wenn ich jetzt

    VB.NET-Quellcode

    1. db.Query("INSERT INTO `salome-waggler` (`sname`, `level`, `karten`) VALUES (" & sdaten & sdaten & sdaten & ")")


    daraus mache

    ich würde mich freuen, wenn du mir nochmal helfen kannst

    MfG
    hi

    nun habe ich das so geändern und hoffe das war der fehler denn du meintest

    VB.NET-Quellcode

    1. db.Query("INSERT INTO `salome-waggler` (`sname`, `level`, `karten`) VALUES (" & sdaten & ", " & sdaten & ", " & sdaten & ")")


    Nun habe ich 2 Test Spieler hinzugefügt und nun kommen die Fehler





    desweiteren habe ich in die DB geschaut und festgestellt das er, wenns mehrere Zeilen gibt nur die letzte zeile in die Tabelle schreibt.
    Müsste Zeile 8/9 im Code des 1. Post sein

    MfG
    Wie ist das Feld ID, in der Tabelle angelegt also mit welchen Datentyp?

    Wann kommt die 2te Fehlermeldung?


    Und zu der Sache mit dem einem Datensatz ist ja klar, du überschreibst sdaten immer und führst den Insert ja nur einmal aus! Die andere Frage warum trennst du den Insert von ID und dem Rest?

    icemanns schrieb:


    Wie ist das Feld ID, in der Tabelle angelegt also mit welchen Datentyp?

    Int11

    icemanns schrieb:


    Wann kommt die 2te Fehlermeldung?

    direkt nach der 1. fehler meldung in der gleichen zeile wo ich die spieler in die DB eintragen möchte

    icemanns schrieb:


    Und zu der Sache mit dem einem Datensatz ist ja klar, du überschreibst sdaten immer und führst den Insert ja nur einmal aus!

    das wäre dann doch so oder?
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub ToolStripButton4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton4.Click
    2. ' Anzahl ListView-Spalten
    3. Dim lvwCols As Integer = ListView1.Columns.Count
    4. Dim daten As String = ""
    5. Dim sdaten As String = ""
    6. Try
    7. For i As Integer = 0 To lvwCols - 1
    8. daten = ListView1.Items(i).Text.ToString
    9. db.Query("INSERT INTO `salome-waggler` (`id`) VALUES (" & daten & ")")
    10. For u As Integer = 1 To lvwCols - 1
    11. sdaten = ListView1.Items(i).SubItems(u).Text.ToString
    12. db.Query("INSERT INTO `salome-waggler` (`sname`, `level`, `karten`) VALUES (" & sdaten & ", " & sdaten & ", " & sdaten & ")")
    13. Next
    14. Next
    15. Catch ex As Exception
    16. MessageBox.Show(ex.Message)
    17. End Try


    icemanns schrieb:


    Die andere Frage warum trennst du den Insert von ID und dem Rest?


    weil ich nicht weiß wie ich das anders machen soll

    MfG
    Hast du es mal Schritt für Schritt debuggt?

    Das andere schau ich mir noch an und poste dann was dazu.


    So würde ich die Schleife schreiben.

    VB.NET-Quellcode

    1. Dim iID As Integer = -1
    2. Dim sSQL As String = ""
    3. For i As Integer = 0 To ListView1.Items.Count - 1
    4. iID = Convert.ToInt32(ListView1.Items(i).Text)
    5. sSQL = "insert into salome-waggler (id, sname, level, karten) values (" & iID & ", "
    6. For y As Integer = 0 To ListView1.Items(i).SubItems.Count - 1
    7. sSQL += "'" + ListView1.Items(i).SubItems(y).Text & "', "
    8. Next
    9. sSQL = sSQL.Remove(sSQL.Length -2)
    10. sSQL += ")"
    11. Next



    ich hoffe da sind keine Syntaxfehler drin hab es durch Converter gejagt, weil ich es in C# geschrieben habe.

    Natürlich musst du am Ende(nach der Schleife) noch

    VB.NET-Quellcode

    1. db.Query(sSQL)


    machen.


    C# Code

    Spoiler anzeigen

    Quellcode

    1. int iID = -1;
    2. string sSQL = "";
    3. for(int i = 0; i < ListView1.Items.Count; i++)
    4. {
    5. iID = Convert.ToInt32(ListView1.Items[i].Text);
    6. sSQL = "insert into salome-waggler (id, sname, level, karten) values (" + iID +", ";
    7. for(int y = 0; y < ListView1.Items[i].SubItems.Count; y++)
    8. {
    9. sSQL += "'" + ListView1.Items[i].SubItems[y].Text + "', ";
    10. }
    11. sSQL = sSQL.Remove(sSQL.Length -2);
    12. sSQL += ")";
    13. }

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „icemanns“ ()

    hi

    ja ich habe es schon des öfteren im debug modus schritt für schritt durchlaufen lassen

    dein code funktioniert schonmal ein bisschen
    er schreib 1 Datensatz in die DB immerhin vollständig
    sobald aber mehrere Zeilen im Litview sind z.b. 4 nimmt er immer nur die letzte zeile

    desweiteren hatte ich ein problem und zwar musste ich

    VB.NET-Quellcode

    1. & iID & ", "
    in zeile 7 entfernen weil er sonst zuviele daten hatte und zuwenig tabellen


    hier der code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim iID As Integer = -1
    2. Dim sSQL As String = ""
    3. For i As Integer = 0 To ListView1.Items.Count - 1
    4. iID = Convert.ToInt32(ListView1.Items(i).Text)
    5. sSQL = "INSERT INTO `salome-waggler` (`id`,`sname`, `level`, `karten`) values ("
    6. For y As Integer = 0 To ListView1.Items(i).SubItems.Count - 1
    7. sSQL += "'" + ListView1.Items(i).SubItems(y).Text & "', "
    8. Next
    9. sSQL = sSQL.Remove(sSQL.Length - 2)
    10. sSQL += ")"
    11. Next
    12. db.Query(sSQL)


    die Tabelle ID ist eigentlich nur eine Tabelle für ein Platz in einer Rangliste, das sol nicht die ID des Datensatzes sein

    MfG

    Germanys-Life schrieb:

    die Tabelle ID ist eigentlich nur eine Tabelle für ein Platz in einer Rangliste, das sol nicht die ID des Datensatzes sein

    warum heißt sie dann ID und nicht "Rank"?

    Scheinst ja selbst zu merken, dass sowas zu Verständnisproblemen führt.

    Aber ich versteh eh nicht das Datenmodell: Hast du eine eigene Tabelle für eine Rangfolge?
    Weil der Rang eines Datensatzes gehört doch in den Datensatz hinein, oder?

    Oder der Rang läßt sich aus iwas berechnen, dann wäre er redundant und gehört er garnet in die DB.
    wie oben schon gesagt ich wusste nicht wie ich das sonst machen soll

    wie du im 1. Post sehen kannst auf denn Bilder wird das alles in der DB gespeichert.
    Im Programm ist der Rang dann einfach eine Zahl die automatisch eingetragen wird, wenn ein neuer Spieler eingetragen wird.

    ich hoffe jetzt ist es klar, was das feld sein soll ^^

    nun nochmal zum code

    nun werden alle einträge in die DB erfolgreich reingeschrieben
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim iID As Integer = -1
    2. Dim sSQL As String = ""
    3. For i As Integer = 0 To ListView1.Items.Count - 1
    4. iID = Convert.ToInt32(ListView1.Items(i).Text)
    5. sSQL = "INSERT INTO `salome-waggler` (`id`,`sname`, `level`, `karten`) values ("
    6. For y As Integer = 0 To ListView1.Items(i).SubItems.Count - 1
    7. sSQL += "'" + ListView1.Items(i).SubItems(y).Text & "', "
    8. Next
    9. sSQL = sSQL.Remove(sSQL.Length - 2)
    10. sSQL += ")"
    11. db.Query(sSQL)
    12. Next



    Nun wollt ich fragen wie ich die DB auslesen kann und im Listview anzeigen kann?

    MfG
    Sorry, aber solltest du nicht vielleicht erstmal die Grunddinge im Umgang mit VB.Net lernen?
    Das sind alles so Basisfragen...und wie ErfinderDesRades schon sagte der Aufbau der Datenbank ist drücken wir uns nett aus suboptimal ;)

    Erklär uns doch mal genau was du möchstest eventuellen können wir dir dann beim Aufbau der Datenbank helfen.
    also ok

    Das Programm soll eine Rangliste in die MySQL Datenbank schreiben.
    D.h. es werden Spieler mit Level und erspielten Karten ins Programm eingefügt und die Spieler mit denn meisten Karten sollen oben stehen.
    Die Daten werden später über ein PHP script auf einer Homepage angezeigt. Das script schreibt dann später ein kollege

    Ich hoffe nun ist es ein wenig klarer was das Programm machen soll. Screens sind im 1. Post


    So wie soll ich nun die DB bearbeiten außer das mit ID?

    MfG