lange Lax Geschrieben 8. Juli 2010 Geschrieben 8. Juli 2010 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 Zitieren
streffin Geschrieben 8. Juli 2010 Geschrieben 8. Juli 2010 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. Zitieren
Amenos Geschrieben 8. Juli 2010 Geschrieben 8. Juli 2010 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 Zitieren
streffin Geschrieben 8. Juli 2010 Geschrieben 8. Juli 2010 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 Zitieren
Amenos Geschrieben 8. Juli 2010 Geschrieben 8. Juli 2010 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 Zitieren
streffin Geschrieben 8. Juli 2010 Geschrieben 8. Juli 2010 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 Zitieren
lange Lax Geschrieben 9. Juli 2010 Autor Geschrieben 9. Juli 2010 (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 9. Juli 2010 von grueni Zitieren
lbm1305 Geschrieben 9. Juli 2010 Geschrieben 9. Juli 2010 Moin, uii...ohne Redundanzen im Code 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. Zitieren
Empfohlene Beiträge
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.