| |
VB.NET - Ein- und UmsteigerRe: Combobox-auswahl und SQL Abfrage | | | Autor: Manfred X | Datum: 08.10.13 13:51 |
| Was ich nicht verstehe ...
Wieso lädst Du die Spalten der Tabelle nicht per DataAdapter/Fill-Methode
in ein Dataset und bindest die Combobox (Datasource) und die Textboxen
(DataBindings.Add) an die Tabelle (DataTable oder zusätzlich eine Bindingsource).
Dann hast Du nur einen DB-Zugriff, viel weniger Code und alles funktioniert
reibungslos.
Beispiele dafür findest Du massenhaft ....
| |
Combobox-auswahl und SQL Abfrage | | | Autor: MichaelBr | Datum: 05.10.13 09:10 |
| Morgen alle zusammen,
habe da folgendes was ich nicht so ganz gelöst bekomme.
Ich habe eine Combobox, die mit Benutzernamen gefüllt ist. Sobald ich mir einen Benutzernamen aussuche, sollen andere Textboxen mit den Daten des Benutzers gefüllt werden.
Habe auch mal gegoogelt aber naja......
Private Sub cbo_SelectUser_SelectedValueChanged(sender As Object, e As _
EventArgs) Handles cbo_SelectUser.SelectedValueChanged
cbo_SelectUser.Text.ToString() ' Gefüllte Combobox mit übergabe
DB_SQL = "SELECT UserName(" & _
"cbo_SelectUser.Text.ToString),Kuerzel,Pass,SysRoll FROM user" 'SQL
' Abfrage nach user Auswahl
DB_Command.CommandText = DB_SQL
DB_Conn_Open()
DB_Command.ExecuteReader()
While (DB_Reader.Read())
txb_Username.Text = (DB_Reader("UserName")) 'Benutzername
txb_Kuerzel.Text = (DB_Reader("Kuerzel")) 'Benutzerkürzel
txb_Password.Text = (DB_Reader("Pass")) 'Passwort
cbo_Sysroll.Text = (DB_Reader("SysRoll"))'Systemrolle
End While
DB_Conn_Close()
End Sub es wäre super, wenn jemand ne Idee hätte.
Danke euch schonmal. | |
Re: Combobox-auswahl und SQL Abfrage | | | Autor: effeff | Datum: 05.10.13 13:28 |
| Erstelle eine DataTable mit den Daten aus Deiner Datenbank und binde die Steuerelemente daran.
EALA FREYA FRESENA | |
Re: Combobox-auswahl und SQL Abfrage | | | Autor: Angelus19 | Datum: 07.10.13 16:08 |
| Hallo MichaelBR,
ich glaube dein SQL-Select ist falsch.
Das sollte SELECT UserName,Kuerzel,Pass,SysRoll FROM user
WHERE UserName = " & cbo_SelectUser.Text & " lauten.
Dann müsste das auch laufen.
PS: Sicherer wäre es natürlich das SQL-Select als SQL.Command zu definieren und den Combowert als Parameter zu übergeben --> siehe Thema SQL-Injection
Und dei Variante von effeff wäre effizienter als deine Lösung.
Mit freundlichen Grüßen
Angelus19 | |
Re: Combobox-auswahl und SQL Abfrage | | | Autor: MichaelBr | Datum: 08.10.13 06:59 |
| Danke für die Hilfe Angelus19!
Aber, er spricht meinen
DB_Command.ExecuteReader() nicht an.
Der muss ja meine restlichen Textboxen füllen.
langsam verzewifele ich | |
Re: Combobox-auswahl und SQL Abfrage | | | Autor: Angelus19 | Datum: 08.10.13 12:04 |
| Hallo MichaelBr,
versuch mal folgendes:
Private Sub cbo_SelectUser_SelectedValueChanged(sender As Object, e As _
EventArgs) Handles cbo_SelectUser.SelectedValueChanged
Dim objDR As SqlClient.SqlDataReader
Dim ConnectionString As String = "DEIN CONNECTION STRING"
Dim objConnection As SqlClient.SqlConnection
objConnection = New SqlClient.SqlConnection(ConnectionString)
Dim objCmd As New SqlClient.SqlCommand("SELECT" & _
"UserName,Kuerzel,Pass,SysRoll FROM user
WHERE UserName = @User", objConnection)
objcmd.Parameters.AddWithValue("@User", cbo_SelectUser.Text)
If objConnection.State <> ConnectionState.Open Then
objConnection.Open()
End If
objDR = objCommand.ExecuteReader(CommandBehavior.CloseConnection)
objCommand = Nothing
If objDR.HasRows Then
While objDR.Read()
txb_Username.Text = (objDR("UserName")) 'Benutzername
txb_Kuerzel.Text = (objDR("Kuerzel")) 'Benutzerkürzel
txb_Password.Text = (objDR("Pass")) 'Passwort
cbo_Sysroll.Text = (objDR("SysRoll"))'Systemrolle
End While
End If
objDR.Close()
objDR = Nothing
end sub Die Frage ist, welche Datenbank du benutzt. Also musst du evtl. anstelle von SQLDataReader evtl. SQLCEDataReader oder OleDBDataReader verwenden. Genauso bei Connection und Command! Wichtig ist auch dass dein Connection String passt.
Das ganze lässt sich auch etwas kürzer und effizienter schreiben, aber so ist es, glaub ich, besser verständlich.
MFG
Angelus19
Beitrag wurde zuletzt am 08.10.13 um 12:12:22 editiert. | |
Re: Combobox-auswahl und SQL Abfrage | | | Autor: MichaelBr | Datum: 08.10.13 12:40 |
| Ich nutze MySQL bzw. die bessere Alternative MariaDB.
ich werde es gleich mal versuchen.
Danke | |
Re: Combobox-auswahl und SQL Abfrage | | | Autor: MichaelBr | Datum: 08.10.13 13:20 |
| Hallo Angelus19,
habe es jetzt folgendermaßen geändert und es funktioniert "endlich"
Dim DB_Reader As MySqlDataReader
DB_SQL = String.Format("SELECT UserName,Kuerzel,Pass,SysRoll FROM user" & _
"WHERE UserName = @User")
DB_Command.Parameters.AddWithValue("@User", cbo_SelectUser.Text)
DB_Command.CommandText = DB_SQL
If DB_Connection.State <> ConnectionState.Open Then
DB_Conn_Open() 'Ist im Modul -> database schon fertig.
End If
DB_Reader = DB_Command.ExecuteReader(CommandBehavior.CloseConnection)
If DB_Reader.HasRows = True Then
While DB_Reader.Read()
txb_Username.Text = (DB_Reader("UserName"))
txb_Kuerzel.Text = (DB_Reader("Kuerzel"))
txb_Password.Text = (DB_Reader("Pass"))
cbo_Sysroll.Text = (DB_Reader("SysRoll"))
End While
End If
DB_Conn_Close()'Ist im Modul -> database schon fertig. Ich danke dir. ABer du kennst dich doch nicht zufällig mit DGV's aus oder | |
Re: Combobox-auswahl und SQL Abfrage | | | Autor: MichaelBr | Datum: 08.10.13 13:33 |
| Naja.... geht nicht wikrlich
Sobald ich einen anderen User auswähle, kommt
[u]Parameter '@User' has already been defined.
und er zeigt mir auf
DB_Command.Parameters.AddWithValue("@User", cbo_SelectUser.Text) | |
Re: Combobox-auswahl und SQL Abfrage | | | Autor: Manfred X | Datum: 08.10.13 13:36 |
| Klassen-Instanzen lokal (in der Routine) erstellen,
die Verbindung dort auch öffnen / schließen.
| |
Re: Combobox-auswahl und SQL Abfrage | | | Autor: MichaelBr | Datum: 08.10.13 13:43 |
| Hallo,
Problem gelöst. Aber er schreibt mir bei der User auswahl nichts in meine texboxen.
Also bei der erstauswahl macht er es. sobald ich einen anderen User auswähle, tut sich nichts mehr.
Obwohl er es ja beim erstenmal auch macht.
Im Debugger, übersrpingt er den teil
DB_Reader = DB_Command.ExecuteReader(CommandBehavior.CloseConnection)
If DB_Reader.HasRows = True Then
While DB_Reader.Read()
txb_Username.Text = (DB_Reader("UserName"))
txb_Kuerzel.Text = (DB_Reader("Kuerzel"))
txb_Password.Text = (DB_Reader("Pass"))
cbo_Sysroll.Text = (DB_Reader("SysRoll"))
End While
End If jetzt versteh ich nix mehr | |
Re: Combobox-auswahl und SQL Abfrage | | | Autor: Angelus19 | Datum: 08.10.13 15:14 |
| Hallo MichaelBr,
das Problem liegt, wie Manfred schon sagt, darin dass du die Klasse nicht lokal in der Sub verwendeset sondern global.
PS: Ich hoffe du willst kein DGV mittels DataReader befüllen?
Dafür sind DataSets gedacht. Da führt dann auch kein (sinnvoler) Weg daran vorbei.
Beispiel:
Dim mSQL As String = "SELECT DISTINCT (Auftragsnummer), (Kunde) FROM" & _
"[Auftraege];"
Dim oDS_AftrNr As DataSet = New DataSet()
Dim TempAdapter = New MySqlDataAdapter(mSQL, ConnString)
TempAdapter.Fill(oDS_AftrNr)
DeinDGV.DataSource = oDS_AftrNr.Tables(0) MFG
Angelus19 | |
Re: Combobox-auswahl und SQL Abfrage | | | Autor: MichaelBr | Datum: 08.10.13 15:24 |
| Hallo Angelus19,
Angelus19 schrieb:
Zitat: | |
Ich hoffe du willst kein DGV mittels DataReader befüllen?
| |
NEIN das ist mir auch schon klar
Ich bin da mit den Spaltenüberschriften dran. aber das kommt später.
ALso soll ich meine gesamten Connection Parameter (die in einem Modul liegen) jeweils in die Form's implementieren?
So habe ich das jetzt verstanden. Korrekt????? | |
Re: Combobox-auswahl und SQL Abfrage | | | Autor: Angelus19 | Datum: 08.10.13 15:47 |
| Also 'Modul' wäre auch Mist.
Wenn dan sollte das eine Klasse sein.
Berücksichtigst du die Tipps von effeff oder Manfred mit dem 'Binding' dan ist eine globale Klasse für deinen Datenbankzugriff schon sinnvoll. (Aber auch am Anspruchvollsten)
Reicht dir die Version mit dem DataReader in der Sub, kann das alles dort rein. Wie schon geschrieben.
Der ConnectionString ist das einzigste was du innerhalb der Form plazieren kannst. Weil du den ja auch in anderen Funktionen benötigen wirst.
MFG
Angelus19 | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere Infos
|