Buttons auf Form Sperren über Berechtigungs Tabelle.

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von HenryV.

    Buttons auf Form Sperren über Berechtigungs Tabelle.

    Hallo Froum gemeinde,

    zuvor ich bin mit VB noch nicht wirklich gut vertraut und auch neu hier, ich komme ehr aus dem Schwapp VBA.
    Aber jeder hat ja mal klein angefangen oder wie war das :)
    Ich hab eine Access FE/ BE Anwendung in der ich ein eigenes berechtigungs system nutze.
    Ich hab angefangen dieses FE in VB umzubauen

    Mein Problem / Fragestellung.

    Aus einer Tabelle vom SQL Server durchlaufe ich per Loop ein DataTable und lese die DataRow aus,
    in der die Informationen wie:

    User (str)|From (str)| Button (Nav kontroll etc.) (Str) | Zugriff (Int) auslese.

    In VBA würde ich jetzt innerhalb der Loop anweisung mir die Information aus der Spalte Form in eine Variant packen und Button auch.
    Zusammen gesetzt würde das dann in so aussehn.

    Quellcode

    1. 'Snipped
    2. If Not rs.EOF Then rs.MoveFirst
    3. Do While Not rs.EOF
    4. A1 = rs!strUSE
    5. A2 = rs!strFOR
    6. A3 = rs!strBUT
    7. A4 = rs!intAlo
    8. rs.MoveNext
    9. Dim A As Variant
    10. Dim B As Variant
    11. Dim C As Variant
    12. 'A = strUSE
    13. B = strFOR
    14. C = strBUT
    15. Forms!Frm_MAIN!FokusField.SetFocus 'Fokus Verschieben da AC keine Aktiven Controlls Deaktivieren kann...
    16. 'Button Aktivieren
    17. If A4 = 1 Then
    18. Forms(B)(C).Enabled = True
    19. End if
    20. Loop


    Nur das jetzt In VB umsetzen mach mich leich ?( ist es denn soviel komplexer das in VB zu machen?
    Das was ich berreits schon an VB Code zustande bekommen habe ist:

    VB.NET-Quellcode

    1. Sub RightSetting()
    2. On Error GoTo ErrLine
    3. Dim A1, A2 As String
    4. Dim A3 As Integer
    5. Dim CON As New SqlConnection(My.Settings.DatabaseConection)
    6. Dim COM As New SqlCommand("SELECT * FROM TabelsUSerSet_Testing_VB", CON)
    7. Dim ADA As New SqlDataAdapter(COM)
    8. Dim TAB As New DataTable
    9. Dim r As DataRow
    10. ADA.Fill(TAB)
    11. For Each r In TAB.Rows
    12. A1 = r("FORNAM")
    13. A2 = r("FORBUT")
    14. A3 = r("FORALLOW")
    15. If A3 = 0 Then
    16. A1.A2.Enabled = True
    17. End If
    18. Next
    19. Exit Sub
    20. ErrLine:
    21. ErrCatching()
    22. End Sub


    Innerhalb der If hab ich abslout keine Ahnung mehr, was ich da noch machen soll.
    Hoffe hie kann mir wer Helfen ^^


    Mit Freundlichen Grüßen
    Hallo
    - Wo/Wann rufst du diese Prozedur auf? (Bei Programmstart, beim Öffnen eines Formulars)

    IMHO wäre es am einfachsten, man macht es beim Laden/Öffnen des Formulars.
    Da kannst du deine SQL-Abfrage mit dem Namen des Users und Name des Formulars filtern und mit der Schleife Me.Controls.Find(CStr(r("FORBUT")), True).First.Enabled = CBool(r("FORALLOW")) setzten.

    [EDIT]Fehler in Code korrigiert[\EDIT]

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „HenryV“ ()

    nerfox schrieb:

    Nur das jetzt In VB umsetzen mach mich leich ist es denn soviel komplexer das in VB zu machen?
    Jo, isses.
    Erstmal muss man total umdenken - du kannst dir garnet vorstellen wie anders alles in vb.net ist.
    Und dann muss man schon recht gut programmieren können, um eine datenbank-Client-Anwendung einigermassen nach Stand der Technik auf die Füsse stellen zu können.
    Wenn mans dann kann, findet mans leicht und logisch, effizienter, und man wundert sich nur noch über die Verrenkungen, die man in vb6 oder vba vollführt hat - aber bis dahin ein nicht so ganz kurzer Weg.

    Meine Empfehlung ist immer, die Anwendung erstmal ohne Datenbank zu programmieren - nur mit einem typisierten Dataset, das ist eine Art kleine Datenbank, die kann sich selbst auf Platte schreiben und laden.
    Für Einzel-User, und bis 20000 Datensätze reicht das völlig aus, und wäre sogar unwirtschaftlich,k für so "Kinkerlitzchen" richtige DatenbankProvider nehmen zu wollen.

    Aber deswegen empfehle ich das garnet, sondern weil in .Net Datenverarbeitung vorzugsweise databinding-getrieben programmiert werden sollte.
    Databinding ist also ein ganz wichtiges LernThema, und man sollte es lernen, ohne dass man sich gleichzeitig mit dem Datenbanken-Hickhack belastet.
    Und man sollte es vorher lernen, weil wenn man das Datenbank-Hickhack falsch anfängt - etwa wie in deinen Snippets zu sehen - dann verbaut man sich alle Möglichkeiten, Databinding anzuwenden.

    Also bei Interesse guck ma Daten laden und speichern

    HenryV schrieb:

    IMHO wäre es am einfachsten, man macht es beim Laden/Öffnen des Formulars.


    Hallo HenryV, vielen Dank das hat mir geholfen.

    Die Prozedur ist Aktuell noch beim Start, ich war von der Idee es beim Form_Open zu machen auch schon angekommen, ich hab das mal so umgebaut. Wenn ich also nach dem Login nun das Form Starte klappt das Prima. So ganz hab ich den Code auch noch nicht verstanden.Also bis Me.Controls.Find(CStr(r("FORBUT")), True).First.Enabled denke ich verstehe ich das so das er Das Control suchen soll und Aktivieren soll?bei CBool(r("FORBUT")) meintest du sicher CBool(r("FORALLOW")). So Funktionerit zumindest das mit den Buttons.Scheinbar unterscheidet sich hier aber alles, somit hat er Probleme sofern in der Tabelle auch was anderes ist als Buttons.ich versuche ein MenueStripe zu ändern, dann bekomme ich den Fehler "5 Die Sequenz enthält keine Elemente." Kann nur nicht im Code erkennen wo das Festgelegt sein soll.

    ErfinderDesRades schrieb:

    Jo, isses.Erstmal muss man total umdenken - du kannst dir garnet vorstellen wie anders alles in vb.net ist.


    Hallo ErfinderDesRades,

    danke erstmal für dein Rat und die Weise kalte wareit Ich konnte es mir nicht vorstellen, die Wahrheit kann ernüchtern oftmals seien.Okay also stell ich mich auf viel Umdenken schon mal ein.Ich glaube ich muss dann aber deine Tuts etc. hier mal Stalken Ich guck mir das Typisierte DataSet Thema auf jedenfall an, werde es dann sicher auch erstmal zukünftig so nutzen.Für Jetzt hab ich mir nur gedacht da das DB Gerüst schon steht vollständigund auch eine Entwicklungsumgebung sowie Test Umgebung, da ist nutze ich die einfach.

    *Vollzitate entfernt* ~NoFear23m

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Nofear23m“ ()

    Scheint so, dass das mit MenuItem nicht funktioniert, da diese scheinbar keine Controls sind sondern Components.
    Was funktioniert ist das Ansprechen über das MenuStrip-Control.
    menuStrip1.Items.Find(CStr(r("FORBUT"), True).First.Enabled = CBool(r("FORALLOW"))

    Why Controls.Find doesn't work with ToolStripMenuItem?
    How to find toolstripmenuItem with name