Aus SQLite DB Daten in TextBoxen schreiben

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von mrMo.

    Aus SQLite DB Daten in TextBoxen schreiben

    Hallo

    Ich bin an einem Programm mit dem ich Daten aus eine SQLite DB in TextBoxen auslesen möchte.
    Ich habe im Moment folgendes gemacht:

    Mit der ID im Select den Namen bestimmen und in eine TextBox schreiben. Dies funktioniert

    VB.NET-Quellcode

    1. Dim myConnection As New SQLiteConnection("Data Source=C:\meineDB;Version=3")
    2. Dim myCommand As New SQLiteCommand
    3. Dim myAdapter As New SQLiteDataAdapter
    4. Dim myData As New DataTable
    5. Dim myReader As SQLiteDataReader
    6. myConnection.Open()
    7. myCommand = New SQLiteCommand("SELECT * FROM Name where ID= 1", myConnection)
    8. myReader = myCommand.ExecuteReader
    9. Do While myReader.Read()
    10. TextBox1.Text = (myReader("Name"))
    11. Loop
    12. myReader.Close()
    13. myConnection.Close()



    Nun möchte ich mehrer TextBoxen füllen da ich auch mehrere Namen in der Tabelle habe und da
    sehe ich noch nicht so ganz durch:

    VB.NET-Quellcode

    1. myCommand = New SQLiteCommand("SELECT * FROM Name", myConnection)
    2. myReader = myCommand.ExecuteReader
    3. Do While myReader.Read()
    4. TextBox1.Text = (myReader("????")) 'Hier sollte der Name aus der ersten Zeile stehen
    5. TextBox2.Text = (myReader("????")) 'Hier sollte der Name aus der zweiten Zeile stehen
    6. Loop
    7. myReader.Close()
    8. myConnection.Close()


    Wie muss ich den Select gestallten und wie muss ich die Textboxen füllen? Wie kann ich die ID integrieren?
    Vielen Dank für die Hilfestellung.
    Wieso zeigst du nicht die Daten der Tabelle in einem DataGridView an?
    Du hast in deinem ersten Codeabschnitt alles um ein DataGridView zu befüllen.
    Deinen Command mit dem Select packst du in die SelectCommand Property des DataAdapters.
    Danach rufst du myDataAdapter.Fill(myData) auf, um die DataTable mit den Daten aus der DB zu füllen.
    Nun nimmst du dir ein DataGridView und weist der DataSource Property die DataTable zu.
    Post-AGB:
    §1 Mit dem Lesen dieses Posts stimmst du den AGB unverzüglich zu
    §2 Ein Widerruf muss innerhalb von 3 Sekunden nach Lesen des Hauptbestandteil des ersten jemals gelesenen Posts erfolgen
    Abs.1 Die Signatur zählt nicht zum Hauptbestandteil des Posts
    §3 Ein erfolgreicher Widerruf zwingt zu einem Besuch bei einem Hypnotiseur oder Neurochirurg, sodass der gelesene Text aus den Erinnerungen entfernt werden kann
    Abs.1 Die Kosten und Risiken sind jeweils selbst zu tragen
    Hallo EaranMaleasi

    Ist natürlich auch möglich. Aber ich muss hier mit TextBoxen arbeiten und diese befüllen.
    Gibt es nicht auch für die TextBoxen ein Lösung?

    Kann man den Select nicht direkt in die TextBoxen implementieren, damit mit WHERE die richtigen Namen auslesen kann?

    Vielen Dnak für die erneute Hilfe
    Das grundlegende Problem ist, dass du mehrere Datensätze im selben "Detailbereich" anzeigen lassen möchtest.
    Natürlich geht das, mit etwas Zauberei.

    Bspw. könntest du die Controls Property der Form durchgehen, dir die Textboxen herausfischen, und entweder über die Name, oder über die Tag Property für dich bestimmen, welche Datensätze wo hinkommen. Doch um ehrlich zu sein, ist das weder schön, noch gebräuchlich.

    Könntest du uns schildern welche Daten du dort anzeigen möchtest? Hast du vielleicht eine Art Schema oder sowas, dass die Daten verdeutlicht?

    Oder aber du gehst mal weg von SQLite, und erstellst dir im Projekt ein neues DataSet, über dessen Designer du dir die Datenbank erstellst, wie du sie haben möchtest. Mithilfe des DataSets kannst du später auch die Daten mit nem Einzeiler in eine Datei Speichern und wieder auslesen. Und du kannst uns ganz einfach über den Dateianhang hier im Forum ein Bild deiner DB hochladen.
    Post-AGB:
    §1 Mit dem Lesen dieses Posts stimmst du den AGB unverzüglich zu
    §2 Ein Widerruf muss innerhalb von 3 Sekunden nach Lesen des Hauptbestandteil des ersten jemals gelesenen Posts erfolgen
    Abs.1 Die Signatur zählt nicht zum Hauptbestandteil des Posts
    §3 Ein erfolgreicher Widerruf zwingt zu einem Besuch bei einem Hypnotiseur oder Neurochirurg, sodass der gelesene Text aus den Erinnerungen entfernt werden kann
    Abs.1 Die Kosten und Risiken sind jeweils selbst zu tragen
    Also eigentlich ist es eine sehr einfach DB. Im Moment eine Tabelle mit dem Titel "Name"

    IDName
    1Peter
    2Paul
    3Frida
    4Klaus
    5Hans

    In 5 TextBoxen möchte ich je einen Namen anzeigen. Nicht alle Namen in einer TextBox.
    Wenn das nicht geht gibt es ein Beispiel mit dem DataSet (erstellt aus einer bestehenden DB) und wie ich die Namen in die TextBoxen bekomme?
    Ich bin halt leider noch nicht so fit mit Datenbankabfragen

    Vielen Dank
    Und was passiert, wenn Du 999 Namen hast? 999 TextBoxen auf dem Formular ?(
    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.
    Aha. Also 10 feste TextBoxen. Und deren Inhalt steht für je eine Datenzeile. Wenn das so vorgegeben ist, wäre es wohl sinnvoll, die Daten in eine sinnvolle Datenstruktur (z.B. typisiertes DataSet (tDS); oder ne selbstgebaute Datenklasse (als 3. Wahl, nach dem tDS auf Platz 1 und einem tDS auf Platz 2 ;) )) zu packen und aus der dann die einzelnen Zeilen in den TextBoxen zu verteilen. Denn Du willst ja bestimmt auch die TextBox-Daten irgendwann wieder in die DB zurückschubsen, oder?
    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.
    Hast du dies so gemeint? Ich habe es einmal so versucht und so klappt es.
    Aber das mit dem Update habe ich noch nicht herausgefunden.

    VB.NET-Quellcode

    1. Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MeineDB")
    2. Dim cmd As New OleDbCommand
    3. Dim dr As OleDbDataReader
    4. Dim da As New OleDbDataAdapter
    5. Dim ds As New DataSet
    6. con.Open()
    7. Try
    8. cmd = New OleDbCommand("select * from Name", con)
    9. da = New OleDbDataAdapter(cmd)
    10. da.Fill(ds, "Name")
    11. TextBox1.Text = ds.Tables(0).Rows(0).Item(1)
    12. TextBox2.Text = ds.Tables(0).Rows(1).Item(1)
    13. MeinForm.Show()
    14. Finally
    15. con.Close()
    16. End Try



    NACHTRAG:

    Den Update habe ich auch noch gebaut, aber das kriege ich nur mit einer TextBox hin. Wie kann ich die zweite TextBox auch integrieren?

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. con.Open()
    3. cmd.CommandText = "UPDATE Name SET Vorname = '" & TextBox1.Text & "' WHERE ID = 1"
    4. Try
    5. cmd.ExecuteNonQuery()
    6. Catch ex As OleDb.OleDbException
    7. MessageBox.Show(ex.ToString)
    8. End Try
    9. con.Close()
    10. MeinForm.Close()
    11. End Sub

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

    Ist ne Möglichkeit. Wenn's klappt, ist ja schonmal was erreicht.
    Ist zwar kein typisiertes DataSet, aber es scheint ja erstmal nur als schneller Vermittler zwischen DB und CEs zu dienen.
    Ein tDS wäre so, dass Du ein DS im DataSet-Designer anlegst (geht über Projekt -> Element hinzufügen -> DataSet), dort ne DataTable reinsetzt, versehen mit ein paar sinnvollen DataColumns (Name+Datentyp der Spaltenwerte <- daher auch der Name: typisiertes DataSet) und damit werkelst. Macht die weitere Arbeit im Projekt um einiges leichter und sicherer, da Du dann nicht einfach Option Strict Off-mäßig nen String in eine Zeile mit ner Column reinhauen kannst, die nen Double-Wert erwartet.
    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.
    Sorry, aber von SQL hab ich (momentan noch) keine Ahnung.
    Spekulatius:

    VB.NET-Quellcode

    1. cmd.CommandText = $"UPDATE Name SET Vorname = '{TextBox1.Text}' WHERE ID = 1, Vorname = '{TextBox2.Text}' WHERE ID = 2, ..."

    Aber nochemal: Ich habe keinen blassen Schimmer von SQL-Commands. Geht bestimmt viel effizienter. Und v.a. mit nem tDS. Haben @VB1963 und @ErfinderDesRades einen Vorschlag? (sorry, wenn ich Euch bei tDS so gern ranhole, aber AFAIK postet Ihr am meisten sinnvolle Sachen zum Thema tDS und daher schlussfolgere ich, dass Ihr von den aktiven Forenmitgliedern mit die meiste Ahnung vom Thema habt. Sollte es zuviel werden, gebt bescheid, dann lass ich das "Anklopfen")
    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.
    Nimm unbedingt die "CommandParameter". Weil, wenn du den Text der Textbox einfach so ins SQL übernimmst, kann jeder damit Schabernack treiben. Stichwort SQL-Injektion. Zudem knallt alles weg, wenn da nen ' drin steht...
    msdn.microsoft.com/de-de/libra…parameters(v=vs.110).aspx

    2 Textboxen heißt 2 Datensätze. Also muss das SQL Update gedöns 2 x aufgerufen werden. Spätestens jetzt würde ich den DB Zugriff in eine andere Methode oder gar Klasse auslagern...

    Schreib dir de Methode, welcher du den Namen übergibst. Diese Updatet dann die DB.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

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