Zum Inhalt springen

Daten einer SQL Tabelle auslesen/ändern/suchen


Empfohlene Beiträge

Geschrieben

Hallo Leute!

Ich bin am verzweifeln:(

Folgenden Code hab ich:

Public Class Form1

Public Sub ConnectToSql()

Dim conn As New SqlClient.SqlConnection

Dim SCMD As SqlClient.SqlCommand

Dim SDR As SqlClient.SqlDataReader

conn.ConnectionString = "integrated security=SSPI;data source=xxxNAME;persist security info=False;initial catalog=xxx"

conn.Open()

SCMD = conn.CreateCommand

SCMD.CommandText = "SELECT * FROM dbo.kunden"

SDR = SCMD.ExecuteReader(CommandBehavior.Default)

If SDR.HasRows Then

While SDR.Read

TextBox1.Text = (SDR.Item("Kundennummer").ToString)

TextBox2.Text = (SDR.Item("Vorname").ToString)

TextBox3.Text = (SDR.Item("Nachname").ToString)

End While

End If

conn.Close()

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ausgabe.Click

ConnectToSql()

End Sub

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

End Sub

Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged

End Sub

Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged

End Sub

End Class

Das erste Problem ist, dass er mir von 3 Kunden (in SQL Tabelle Spalten: Kundennummer, Vorname, Name) lediglich nur den letzten in den Textboxen ausgibt.

Darüberhinaus habe ich leider kaum Programmierkenntnisse in SQL und würde sehr gerne wissen, ob mir jemand hinsichtlich des bearbeitens der Tabelle und dem Suchen von z.B. einer Kundennummer in dieser Tabelle, helfen könnte!

Vielen dank im voraus

Geschrieben

While SDR.Read



TextBox1.Text = (SDR.Item("Kundennummer").ToString)

TextBox2.Text = (SDR.Item("Vorname").ToString)

TextBox3.Text = (SDR.Item("Nachname").ToString)


End While

Wie drückt man das jetzt aus ....

Kennst du dieses :upps Gefühl ? ;)

Du überschreibst den Inhalt der Textboxen in der Schleife, daher steht am Schluss eben der letzte Datensatz noch drin.

Geschrieben

so wie ich das sehe lässt du die textbox auch bei jedem namen neu setzen, d.h. du überschreibst den wert der sich darin befindet. versuch mal, die namen in ne variable zu schreiben (kommasepariert oder so) und dann am ende die variable in die textbox zu schreiben.

was fürn sql? mysql, oracle, etc?

edit: da war wer schneller ;)

Geschrieben

Da würd ich dann aber schon ne arraylist oder ne Collection für nehmen.

Klar kannstes auch per Sonderzeichen als String speichern, und danach am Sonderzeichen splitten. Bringt dann aber gleich das Problem dass da auch einer nen "sonderbaren" Namen haben kann, in dem dein Seperator vorkommt.

Also wirklich sauber wär das jedenfalls nicht.

Gruß

Sven

Geschrieben

klar gibts schönere wege, um rumzutesten ist das halt m.m.n. die schnellste.

bei nem komma ist man da ziemlich auf der sicheren seite was die trennung angeht. namen mit komma sind doch recht selten will ich meinen :)

Geschrieben

Bei Kundennamen / Firmennamen kommt das schon ganz gerne mal vor.

Zum rumprobieren klar da is egal, wollt nur drauf hinweisen, dass man das so produktiv nicht machen sollte ;)

Nebenbei, was die Frage zu SQL im OP angeht, solange du uns nicht sagst, was für eine Datenbank du verwendest, was genau du bewirken möchtest mit deinem SQL Query, und wie die Datenbank aufgebaut ist (was steht in welcher tabelle, primary keys, foreign keys) können wir dir maximal ein paar tutorials an den Kopf werfen.

Gruß

Sven

Geschrieben (bearbeitet)

also ich benutze sql server management express:)

und danke für die antworten!

habs ein wenig geändert aber hab leider ein paar fehler drin, die ich mit meinen syntax kenntnissen nicht wirklich ausbügeln kann:(


Public Class Form1

    Dim knummer As New ArrayList

    Dim x As Integer

    Dim conn As New SqlClient.SqlConnection

    Dim SCMD As SqlClient.SqlCommand

    Dim SDR As SqlClient.SqlDataReader

    Dim connstr As String = "integrated security=SSPI;data source=xxxx;persist security info=False;initial catalog=xxxx"


    Public Sub ConnectToSql()



        conn.ConnectionString = connstr

        conn.Open()


        SCMD = conn.CreateCommand

        SCMD.CommandText = "SELECT * FROM dbo.kunden"


        SDR = SCMD.ExecuteReader(CommandBehavior.Default)


        ListBox1.Items.Clear()

        If SDR.HasRows Then

            While SDR.Read



                ListBox1.Items.Add(SDR.Item("Kundennummer").ToString & " - " & SDR.Item("Vorname").ToString & " " & SDR.Item("Nachname").ToString)




            End While


        End If


        conn.Close()

    End Sub

    Private Sub cmdLöschen_Click()

        Dim anzahl As Integer

        If ListBox1.Text = "" Then

            MsgBox("Bitte einen Datensatz auswählen")

            Exit Sub

        End If


        If MsgBox("Wollen Sie den ausgewählten Datensatz wirklich löschen?", MsgBoxStyle.YesNo) = MsgBoxResult.No Then

            Exit Sub

        End If


        Try

            conn.Open()

            SCMD = conn.CreateCommand

            SCMD.CommandText = "delete from dbo.kunden where kundennummer"

            MsgBox(SCMD.CommandText)

            anzahl = SCMD.ExecuteNonQuery()

            If anzahl > 0 Then

                MsgBox("Es wurde ein Datensatz gelöscht")

            End If

        Catch ex As Exception

            MsgBox(ex.Message)

        End Try

        conn.Close()


        ConnectToSql()

    End Sub

    Sub Ändern()


        Dim anzahl As Integer

        If TextBox6.Text = "" Then

            MsgBox("Bitte einen Datensatz auswählen und mindestens eine Personalnummer eintragen")

            Exit Sub

        End If


        Try

            conn.Open()

            SCMD.CommandText = _

               "update dbo.kunden set Nachname = '" & TextBox4.Text & "',Vorname = '" & TextBox5.Text & "', Kundennummer = " & TextBox6.Text & "WHERE Kundennummer = knummer(ListBox1_SelectedIndexChanged)"



            'MsgBox(cmd.CommandText) 

            anzahl = SCMD.ExecuteNonQuery()

            If anzahl > 0 Then

                MsgBox("Es wurde ein Datensatz geändert")

            End If

        Catch ex As Exception

            MsgBox(ex.Message)

        End Try

        conn.Close()


        ConnectToSql()

    End Sub


    Sub Suchen()


        conn.ConnectionString = connstr


        conn.Open()

        SCMD = conn.CreateCommand


        If TextBox4.Text & TextBox5.Text & TextBox6.Text = "" Then

            MsgBox("Bitte einen Such-Namen eintragen")

            Exit Sub

        End If


        Try

            SCMD.CommandText = "select * from dbo.kunden where Vorname like '" & TextBox4.Text & "%' or Nachname like '" & TextBox5.Text & "%' or Kundennummer like '" & TextBox6.Text & "%'"

            MsgBox(SCMD.CommandText)

            SDR = SCMD.ExecuteReader(CommandBehavior.Default)



            If SDR.HasRows Then

                While SDR.Read



                    ListBox1.Items.Add(SDR.Item("Kundennummer").ToString & " - " & SDR.Item("Vorname").ToString & " " & SDR.Item("Nachname").ToString)




                End While


            End If

        Catch ex As Exception

            MsgBox(ex.Message)

        End Try




        conn.Close()


    End Sub

    Private Sub cmdEinfügen_Click()

        Dim anzahl As Integer


        conn.ConnectionString = connstr


        If TextBox6.Text = "" Then

            MsgBox("Bitte mindestens eine Personalnummer eintragen")

            Exit Sub

        End If


        Try

            conn.Open()

            SCMD = conn.CreateCommand

            SCMD.CommandText = "insert into dbo.kunden (Kundennummer, Vorname, Nachname) values('" & TextBox6.Text & "', '" & TextBox5.Text & "', '" & TextBox4.Text & "')"


            'MsgBox(cmd.CommandText) 

            anzahl = SCMD.ExecuteNonQuery()

            If anzahl > 0 Then

                MsgBox("Es wurde " & anzahl.ToString & " Datensatz eingefügt")

            End If

        Catch ex As Exception

            MsgBox(ex.Message)

        End Try


        conn.Close()

        ConnectToSql()

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ausgabe.Click

        ConnectToSql()


    End Sub



    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)


    End Sub


    Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)


    End Sub


    Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)


    End Sub


    Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Ändern()

    End Sub


    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Suchen()


    End Sub


    Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged


    End Sub


    Private Sub TextBox5_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox5.TextChanged


    End Sub


    Private Sub TextBox6_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox6.TextChanged


    End Sub


    Private Sub ListBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseClick


    End Sub


    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged


    End Sub


    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

        cmdLöschen_Click()

    End Sub


    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        cmdEinfügen_Click()

    End Sub

End Class

Und zwar einerseits gibt er mir bei "Suche" immer alle Werte aus anstatt nur den bei dem ein Treffer vorliegt, und zum anderen bei der sub Ändern

weiß ich nicht was ich machen soll, damit in der listbox nur der "ausgewählte"

datensatz geändert wird. Es werden halt alle Datensätze dementsprechend geändert anstatt nur einer.

Weiß vielleicht jemand was zu tun ist?

Bitte Code-Tags verwenden, grueni

Bearbeitet von grueni
Geschrieben

Moin,

uii...ohne Redundanzen im Code :D

Vielleicht nutzt den einfachen Weg über Datasets / DataTables. Alle Änderungen, die in den Tabellen gemacht wurden, kann man im Anschluss mit einem Klick gegen die DB schreiben.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...