Fragen zum Thema Datenbank / Join / Generelle DB Fragen

  • Allgemein

Es gibt 35 Antworten in diesem Thema. Der letzte Beitrag () ist von chenjung.

    Fragen zum Thema Datenbank / Join / Generelle DB Fragen

    Hallo ihr lieben,

    ich weiß, meine Fragen sind lästig *g*

    Aber da ich zur Zeit noch an meiner Idee arbeite, (also das Thema Kartenausgabe und Doku darüber) Vb.net in Visual Studio Ultimate wird das ganze erstellt.

    Meine Idee ist nun, dass ich mehrere User (+Login) in der Datenbank speichern möchte. Diese sind soweit schon vorhanden. Ich habe in der Access DB die Tabelle "Datenbank.mdb".

    Dort sind Tabellen:
    Abgleich (Kundendaten)
    de (für gelöschte Mitarbeiter, welches als Archiv genutzt wird)
    und jetzt neu:
    useres (dort sollen nur die Mitarbeiter der Abteilung drin stehen, sodass diese sich in das Programm einloggen). Geht auch soweit, mit Username + Passwort. (Welches in der Datenbank.mdb in der Tabelle users gespeichert sind.

    Ich möchte mit den Werten in der Tabelle users erreichen, dass gewisse Leute zb. den Button Backup nicht sehen (und später auch andere Optionen), aber andere wiederum schon.

    Die Tabelle users sieht so aus:

    ID | benutzer | passwort | nachname | vorname | backup | loeschen | useradd | userloeschen
    ---------------------------------------------------------------------------------------------------------------------
    1 | mwegner | xxxxxx | test | test | True | True | True | True

    Die Werte True kommen von den Checkboxen (ch1,ch2,ch3,ch4)



    Mehr benötigt man ja auch nicht, um Werte wie ja/nein zu vergeben.

    Ist meine Idee so umsetzbar? Sinnvoll? Was meint ihr?

    Die Checkboxen werden beim erstellen des Accounts ausgewählt und in die Datenbank geschrieben :)

    Danke für euren Tipps / Ideen.
    Ihr sucht Webspace für eure Projekte? Dann sagt bescheid - kostenfrei und ohne Werbung!

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

    Ich hab das bei mir auch so gelöst. Nur das ich die Berechtigungen in einer eigenen Tabelle an die NutzerID knüpfe.
    Der Nachteil bei der Lösung ist, wenn es eine weitere Berechtigung gibt, muss die Tabelle und gegebenenfalls der Code angepasst werden.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Hi,

    ja das habe ich mir auch gedacht, allerdings denke ich, ist das ja kein weiteres Problem. Den Code jeweils anpassen, sollte kein Problem sein :D

    Ich habe zur Zeit nur das Problem, wie kann ich denn dem jeweiligen User den Wert zuweisen? Ich denke wohl mit Select / Vaule / dann den jeweiligen Button. Oder sehe ich das jetzt total falsch?
    Ihr sucht Webspace für eure Projekte? Dann sagt bescheid - kostenfrei und ohne Werbung!

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

    Ich würde die Berechtigungen über eine Klasse User steuern.
    Die Werte liest du einfach aus der Datenbank aus und speicherst sie in den Properties der Klasse.
    Auf eine .mdb kannst du einfach mit OLEDB zugreifen. Das wäre dann ein CommandText "SELECT * FROM Berechtung WHERE UserID = @UserID"
    Mit Parameter @UserID = 1
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Also ich nutze fuer solche Einstellungen Bits. Hier sinds 4 Einstellungen, passt in 1 Byte. Im Beispiel habe ich es mit Integer gemacht(mit einem Byte gehts ja genau so), Byte wuerde ja schon reichen, aber so hast du Luft nach oben fuer bis zu 32 Einstellungen. Also so brauchst du nur ein Feld in der Tabelle anstatt fuer jede Berechtigung eins.

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. <Flags()>
    4. Public Enum Privileges As Integer
    5. BackUp = 1
    6. Delete = 2
    7. AddUser = 4
    8. DelUser = 8
    9. End Enum
    10. Private UserPrivilege As Integer
    11. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    12. UserPrivilege = 0 ' absolut keine rechte, da kein Bit gesetzt ist.
    13. End Sub
    14. Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
    15. If CheckBox1.Checked Then
    16. UserPrivilege = UserPrivilege Or Privileges.BackUp
    17. Else
    18. UserPrivilege = UserPrivilege And Not Privileges.BackUp
    19. End If
    20. End Sub
    21. Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged
    22. If CheckBox2.Checked Then
    23. UserPrivilege = UserPrivilege Or Privileges.Delete
    24. Else
    25. UserPrivilege = UserPrivilege And Not Privileges.Delete
    26. End If
    27. End Sub
    28. Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged
    29. If CheckBox3.Checked Then
    30. UserPrivilege = UserPrivilege Or Privileges.AddUser
    31. Else
    32. UserPrivilege = UserPrivilege And Not Privileges.AddUser
    33. End If
    34. End Sub
    35. Private Sub CheckBox4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox4.CheckedChanged
    36. If CheckBox4.Checked Then
    37. UserPrivilege = UserPrivilege Or Privileges.DelUser
    38. Else
    39. UserPrivilege = UserPrivilege And Not Privileges.DelUser
    40. End If
    41. End Sub
    42. Sub DebugOut()
    43. Debug.WriteLine("BACKUP " & CBool(UserPrivilege And (1 << 0)))
    44. Debug.WriteLine("DELETE " & CBool(UserPrivilege And (1 << 1)))
    45. Debug.WriteLine("ADDUSER " & CBool(UserPrivilege And (1 << 2)))
    46. Debug.WriteLine("DELUSER " & CBool(UserPrivilege And (1 << 3)))
    47. Debug.WriteLine("")
    48. End Sub
    49. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    50. DebugOut()
    51. End Sub
    52. End Class

    And i think to myself... what a wonderfuL World!

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

    Also lohnen tut sich das auf jeden Fall, schliesslich hast du so nur ein Feld in der Tabelle, anstatt unzaehlige fuer Rechte, was die erweiterbarkeit ganz easy macht.

    Hier noch ein nuetzlicher Link in Sachen "BitwiseOperations", ist zwar nicht VB, aber es leasst sich ableiten.
    catonmat.net/blog/low-level-bi…you-absolutely-must-know/
    And i think to myself... what a wonderfuL World!
    @Eddy: Vielen dank für deine Mühe + Link. Das werde ich mir ansehen :)

    @Schamash: Meinst du mit @userid und Berechtigung, dass ich eine weitere Tabelle anlegen sollte?

    In berechtigung dann jeweils true / false machen sollte?
    Ihr sucht Webspace für eure Projekte? Dann sagt bescheid - kostenfrei und ohne Werbung!

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

    @Eddy Besten Dank, ich habe gerade meine Berechtigungsverwaltung umgestellt. Byte reicht mir leider nicht daher ist es auch ein Integer geworden aber der Rest passt!

    Nur für mein Verständniss:
    CBool(255 And (1 << 7)) ist TRUE was macht das genau.
    Es prüft ob an das 7. Bit 1 ist, aber warum? Ich kenne den Befehl so nicht. (bzw. wie nennt sich die Operation, dann lese ich die MSDN :) )
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Ich nehme zur erklaerung nun nur ein Byte, ist kuerzer zu schreiben.

    255 = 11111111
    1<<7 = 10000000 = 128
    255 And 128 = 10000000
    In DEZIMAL 128 also nicht 0, somit ist das Bit gesetzt.


    Edit @Schamash
    Das nennt sich Bitwise-Operations

    Evtl. Schaust du auch mal hier rein, habe ich oben schon verlinkt ;)
    catonmat.net/blog/low-level-bi…you-absolutely-must-know/
    And i think to myself... what a wonderfuL World!

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

    Ahh OK!

    << is bitwise shift left ... die Info hat mit gefehlt!
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Jetzt muss ich mal doof fragen.

    Wo werden denn die Einstellungen gespeichert?

    Privileges <- müsste in dem Fall die Bedingungen für 0-4 haben, oder? Also in der Access DB?

    Bzw. ließe sich überhaupt mit meiner 1. Methode, also mit ch1-4 und in der Tabelle die spalten backup,useradd usw. darüber die Buttons ansteuern / bzw. ausbelden / anzeigen lassen?
    Ihr sucht Webspace für eure Projekte? Dann sagt bescheid - kostenfrei und ohne Werbung!

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

    Du speicherst einfach den Wert von UserPrivilege in deinem Datensatz. Du koenntest eine Klasse anlegen in welcher du eine Variable fuer diesen Wert hast und Properties reinmachen.
    Beispiel:

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class PrivilegeManager
    3. <Flags()>
    4. Public Enum Privileges
    5. CanEditPost = 1024
    6. End Enum
    7. Public Privilege As Integer = 0
    8. '10. Bit = CanEditPosts
    9. 'lohnt sich zu notieren, sonst verliert man den ueberblick auch wenn man es anner Enum Privileges schon sehen koennte.
    10. Public _CanEditPosts As Boolean
    11. Public Property CanEditPosts() As Boolean
    12. Get
    13. Return CBool(Privilege And (1 << 10))
    14. End Get
    15. Set(ByVal value As Boolean)
    16. If value Then
    17. Privilege = Privilege Or Privileges.CanEditPost
    18. Else
    19. Privilege = Privilege And Not Privileges.CanEditPost
    20. End If
    21. End Set
    22. End Property
    23. End Class


    Also einfach nur den Wert in die DB, mit ein wenig fleissarbeit, hat man dann schoenen Code.


    Edit: @chenjung

    Du musst also den Wert aus der DB hohlen, dann preufen was enabled oder visible ist und anhand dessen die Properties der Controls setzen.
    And i think to myself... what a wonderfuL World!

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Eddy“ ()

    Ich bastel noch an dem Login.

    Der Login an sich geht, also mit Username + Passwort.

    Spoiler anzeigen
    Dim cmd As OleDbCommand = New OleDbCommand("SELECT benutzer, passwort, backup FROM [users] WHERE [benutzer] = '" & username.Text & "' AND [passwort] = '" & password.Text & "'", myConnection)


    Kann ich denn in dieser Abfrage schon Prüfen lassen, ob der Wert "backup" True ist und dann sagen, button10 ausblenden?

    Als Gerüst wollte ich das nehmen:
    Spoiler anzeigen
    If userFound = True Then

    Form1.Show()

    Me.Close()

    Form1.iduser.Text = "" & FirstName & " " & LastName

    Else


    (Nach dem Login wird hier der Namen auf der Form1 angezeigt.) Dies wollte ich dann abändern um eben den Button ausblenden zu lassen. Was meint ihr?
    Ihr sucht Webspace für eure Projekte? Dann sagt bescheid - kostenfrei und ohne Werbung!
    Also ich wuerde ein Form machen, wo der User seine Accountdaten eintragen kann, dann schauen ob in der DB dieser User mit diesem Passwort(am besten gehashed sichern) existiert(Die rechte mit raushohlen, den Integer-Wert), falls ja, die rechte anhand des Integer-Wertes ermitteln und dann die Control-Properties setzen. Ist doch nicht so schwer....

    Was ist denn jetzt bei dir "backup" in der Tabelle? Ein einzelner Boolean? Waere doch die schlechtere variante!
    And i think to myself... what a wonderfuL World!

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

    Hi,

    also mein Gedanke ist, zwar mit mehr Feldern, wobei diese sich nur auf 4 beschränken werden. In der Tabelle "users" sind ja die Felder, username, Password, Name, Vorname und eben bis jetzt erst, backup.

    Dort in der Spalte backup, ist das Vaule True. Es soll ja nur False oder True sein (also laut meiner Idee).

    Die Loginform ist ja schon da, die Abfrage nach Username + Passwort auch. Daher auch der Gedanke, da schon die Werte True / False abzufragen. Ich hänge zur Zeit nur an der Sache mit dem Wert aus der Spalte backup. *g*

    Ich bin kein Profi *g* eher mehr Anfänger was das alles angeht, ist auch mehr oder weniger aus der Situation entstanden. Also die Idee mit der Software. Daher probiere ich zur Zeit viel aus, lernen durch machen. Aber manchmal hänge ich da bisschen fest *g* Nicht böse sein.

    Habe mal die Screenshots mitangehängt.

    Login:


    User erstellen + Bearbeiten oder Löschen:


    Tabelle:

    Ihr sucht Webspace für eure Projekte? Dann sagt bescheid - kostenfrei und ohne Werbung!