vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 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 ....




Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?????
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel