Abfrage Datenbank

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Fonsi.

    Abfrage Datenbank

    Hallo Gemeinde,

    ich hab sonst in VB6 programmiert und waage mich nun an VB 10 heran. Nach langem habe ich es geschafft eine Datenbank einzubinden und mir alle Pflanzen in eine Listbox anzeigen zu lassen.

    Nun meine Frage: Wie frage ich jetzt den aktuellen Datensatz ab und zeige diesen in verschiedene einzelne Labels an?

    Ich hoffe man versteht was ich meinte ;)



    Gruss Heiko
    Du musst nochmal eine Verbindung zur Datenbank aufbauen.
    im CommandText schreibst du dann

    VB.NET-Quellcode

    1. cmd.commandtext = "SELECT * FROM Tabelle WHERE Pflanze = '" & ListBox1.SelectedItem.ToString & "'"

    dann musst du nur noch mit einem DataReader

    VB.NET-Quellcode

    1. Public reader As DataReader

    Die entsprechenden Einträge auslesen und einem Label zuordnen.

    VB.NET-Quellcode

    1. reader = cmd.executereader
    2. reader.read
    3. Pflanzen_Name.Text = reader("PName").tostring
    4. reader.close


    dann hast du im Label den Pflanzennamen stehen.

    PS: Du musste die ganzen Namen der Controls, Tabellenname anpassen sonst geht da nichts
    Hallöchen,

    und wie funktioniert eine Datenbankabfrage über mehrere Tabellen?

    TABELLE1 : PFLANZEN ....... Index, Name, Herkunft, usw..
    TABELLE2 : LEVEL ..... Index, Pflanze, LevelAb, usw...

    Das Ergebnis Tabelle1 ist klar nur wie frage ich den Level gleichzeitig ab, oder muss ich dafür eine "verschachtelte" Abfrage machen?



    Gruss Heiko
    Hallöchen Fonsi,

    dein Tip ist zwar gut aber selbst "Google" hilft mir nicht wirklich bei SQL weiter. Zugegeben wenn man nicht weis wo man anfangen soll zu suchen ist das schwierig.

    Wie bekomme ich den aus einer ACCESS - DB zum Beispiel die Anzahl der Datensätze?

    VB.NET-Quellcode

    1. cqd1.CommandText = "SELECT COUNT(*) FROM PFLANZEN"

    das müsse so fast richtig sein, aber wo steht das Ergebnis? ?(
    Bei meiner Suche danach bin ich oft auf MySQL gestossen, was zwar ähnlich aber eben nicht gleich ist.
    Ich hoffe ich bekomm das dann auch irgendwie hin mit dem Löschen oder änden eines Datensatzes ?( ?(
    Ich danke euch für eure Hilfe und Geduld.
    Gruss Heiko
    Deklaration:

    VB.NET-Quellcode

    1. Dim con As New OleDb.OleDbConnection
    2. Dim cmd As New OleDb.OleDbCommand
    3. Dim reader As OleDb.OleDbDataReader
    4. Dim Liste1 As New List(Of String)
    5. con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=datenbank.mdb"
    6. cmd.Connection = con


    Lesen:

    VB.NET-Quellcode

    1. Try
    2. con.Open()
    3. cmd.CommandText = "Select * from Tabelle"
    4. reader = cmd.ExecuteReader()
    5. Do While reader.Read
    6. Liste1.Add(reader("pflanze"))
    7. Loop
    8. reader.Close()
    9. Catch ex As Exception
    10. MsgBox(ex.Message)
    11. End Try
    12. con.Close()


    Datensätze zählen:

    VB.NET-Quellcode

    1. anzahl = Liste1.count


    Schreiben:

    VB.NET-Quellcode

    1. Try
    2. con.Open()
    3. cmd.CommandText = "insert into tabelle " & _
    4. "(spalte1, spalte2, spalte3) " & _
    5. "values ('" & _
    6. txtName.Text & "', 'Text', 12345)"
    7. Anzahl = cmd.ExecuteNonQuery()
    8. If anzahl > 0 Then MsgBox("Erfolgreich") Else MsgBox("Aktion fehlgeschlagen")
    9. Catch ex As Exception
    10. MsgBox(ex.Message)
    11. End Try
    12. con.Close()


    Update:

    VB.NET-Quellcode

    1. con.Open()
    2. cmd.CommandText = "update tabelle set spalte = "Text""
    3. anzahl = cmd.ExecuteNonQuery()
    4. con.Close()


    Löschen:
    selbes Schema mit Delete
    Hi Homer,
    danke für diese Ausf+hrliche Hilfe - 100 Punkte :D.
    Die Anzahl der Datensätze, hätte ich aber als Wert ohne ein List-Element, dannach habe ich heute gesucht. Aber so scheint es auch zu funktionieren.

    Nochmals Danke.

    Gruss Heiko

    Homer schrieb:

    Deklaration:
    Datensätze zählen:

    VB.NET-Quellcode

    1. anzahl = Liste1.count



    Das würd ich so nicht machen. Wenn man nur die Anzahl braucht, schreibt man ja nicht erst alle Datensätze der Tabelle in ne Liste rein, das wär unsinnig.

    SQL-Abfrage

    1. SELECT COUNT(*) AS Anzahl FROM t_pflanzen

    Dann kannst du mit

    VB.NET-Quellcode

    1. DBreader("Anzahl")
    drauf zugreifen und das Ganze läuft performanter auf der Datenbank.
    hi,

    irendwie steh ich auf den Schlauch


    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. '---------------------------------------------------------
    3. 'Hier müssen die aktuellen Counter Daten eingelesen werden
    4. 'Datenbankname: .......... mff.accdb
    5. 'Datenbanktabelle: ....... PFLANZE
    6. '---------------------------------------------------------
    7. Dim con As New OleDb.OleDbConnection
    8. Dim cmd As New OleDb.OleDbCommand
    9. Dim reader As OleDb.OleDbDataReader
    10. Dim anzDS As Integer
    11. 'Dim anzahl As Integer 'Warnung Nicht verwendete lokale Variable: "anzahl"
    12. con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = C:\Users\Heiko\Documents\mff.accdb;"
    13. cmd.Connection = con
    14. 'Anzahl Datensätze
    15. con.Open()cmd.CommandText = "SELECT COUNT(*) AS Anzahl FROM PFLANZE"
    16. reader = cmd.ExecuteReader()
    17. anzDS = reader("Anzahl")
    18. Label2.Text = anzDS
    19. reader.Close()
    20. con.Close()
    21. End Sub



    In Label2.Text steht immer Label2 - Der Verweis auf die DB ist aber richtig weil das auslesen funktioniert.


    Gruss Heiko


    Kleiner Tipp: Es gibt n Überwachungsfenster, wo du Variablen einträgst und du bei jedem Einzelschritt den Wert der Variablen dann verfolgen kannst.

    Du hast

    VB.NET-Quellcode

    1. reader.Read()
    vergessen ;).

    VB.NET-Quellcode

    1. 'Anzahl Datensätze
    2. con.Open()
    3. cmd.CommandText = "SELECT COUNT(*) AS Anzahl FROM PFLANZE"
    4. reader = cmd.ExecuteReader()
    5. reader.Read()
    6. anzDS = reader("Anzahl")
    7. Label2.Text = anzDS
    8. reader.Close()
    9. con.Close()