VB.net Benutzeranmeldung

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von Holistiker.

    VaporiZed schrieb:


    btw: @C.O.D.E: Option Strict On nicht vergessen: s.Split(";") Split akzeptiert so keine Strings. -> s.Split(";"c)


    Okay, ich geb mich geschlagen. Ich hatte mich verguckt! Werde ich anstellen!

    Wofür steht das C?
    Liebe Grüße,
    C.O.D.E

    Testautomatisierung (TA):

    5%
    Du findest meinen Beitrag Hilfreich? :thumbup: Dann drück auf Hilfreich!
    Für: »Compiler, werte dieses in Anführungszeichen gesetzte Zeichen nicht als String wie "m" oder "Test", sondern als Char
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich bin jetzt soweit, dass mein Programm die Schleife ausgibt.

    VB.NET-Quellcode

    1. Dim d As OleDbCommand = New OleDbCommand("SELECT * FROM Benutzer WHERE Benutzername = '" & TextBox1.Text & "' AND Passwort = '" & TextBox2.Text & "'", con)
    2. Dim dd As OleDbDataReader = d.ExecuteReader
    3. Do While dd.Read()
    4. Dim CheckBoxFlagsForCurrentUser = "101010101010101"
    5. For i = 0 To CheckBoxFlagsForCurrentUser.Count - 1
    6. MessageBox.Show($"Die {i + 1}. CheckBox ist {If(CheckBoxFlagsForCurrentUser(i) = "1", "mit", "ohne")} Haken.")
    7. Next
    8. Form1.Show()
    9. Me.Hide()
    10. Loop


    Wie schaffe ich es, dass nicht nach dem Wert "101010101010101", der der Variable zugewiesen wird, geschaut wird, sondern nach dem Wert in der Access-Spalte zum passenden Benutzer?

    VB.NET-Quellcode

    1. Dim CheckBoxFlagsForCurrentUser = "101010101010101"
    Wie wird daraus der Wert der passenden Spalte zum passenden Datensatz?
    Hier ein Beispiel für eine 0;1;1;0;0;0;1 zeichfole in der CheckBoxes-Spalte:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim listCHB as new List(Of String)
    3. Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\12345678.mdb")
    4. con.Open()
    5. '1
    6. Dim d As OleDbCommand = New OleDbCommand("SELECT cheackboxspalte FROM Benutzer WHERE Benutzername = '" & TextBox1.Text & "' AND Passwort = '" & TextBox2.Text & "'", con)
    7. Dim dd As OleDbDataReader = d.ExecuteReader
    8. While dd.Read() ' keine ahnung ob die benutzernamen bei dir nur einmal auftreten können
    9. listCHB.Add(dd("checkboxspalte"))
    10. Loop
    11. ' so ermittelst du die strings aus der datenbank, splitten ist mit dem oben angegebenen code recht simple:
    12. For each str as string in listCHB
    13. dim res as String() = str.Split(";") ' mit diesem array kannst du nun die tabs öffnen
    14. End For
    15. Form4.Show()
    16. End If


    Sinnvoller fände ich es aber nur die tabs in die spalte zu schreiben die benötigt werden und die unchecked Tabs zu ignorieren
    Für die Tabs verwendest du dann einfach Ganzzahlen: 1;5;6;13

    Per String.Split() dann die einzelnen Integerwerte ermitteln und die dazugehörigen Tabs aufrufen...
    Ich mische mich ja nur ungern ein aber ich persönlich finde diesen Ansatz eher bescheiden.
    Für mich schreit das eher nach einer extra Tabelle "Benutzer_Rechte".
    Benutzername | Modul | Aktiv(Ja/Nein)

    Also grundsätzlich erstmal den Login ausführen und wenn der Erfolgreich ist, würde ich entsprechend alle Module bzw. Rechte laden
    Für die Abfrage der Rechte würde ich mir dann eine Funktion schreiben, der ich Benutzername und Modul übergebe und als Ergebnis True oder False zurück bekomme.
    Dementsprechend kann man die Module,Tabpages,Forms etc. anzeigen lassen oder nicht.

    Eine Abfrage könnte dann so lauten:

    SQL-Abfrage

    1. SELECT Aktiv FROM Benutzer_Rechte WHERE Benutzername='100' AND Modul='Page1'