Login...mitnahme von Benutzername und Passwort!



  • Das ur="100010001011"; war zu Testzwecken, da bei mir status für etwas anderes ist. 🙂

    So aber jetze:

    //Dein SQL Statement zum abfragen ob Benutzer mit Passwort vorhanden
    String sql="SELECT * FROM benutzer WHERE benutzername = '"+Edit1->Text+"' AND passwort = '"+MaskEdit1->Text+"';";
    Query1->SQL->Clear();
    Query1->SQL->Add(sql);
    Query1->Open();
    //Wenn ein Eintrag in Datenbank vorhanden dann Benutzerrechte aus
    //Datenbank holen
    if(Query1->RecordCount)
    {
       String ur = Query1->FieldByName("status")->AsString;
       //Variable co ist die Position im String
       int co=0;
       //Durchlaufe jede Komponente aus Form2
       //(co<ur.Length()) dient zur Absicherung
       //falls man mehr als 12 Buttons haben solltest
       for(int i=0;i<Form2->ComponentCount&&co<ur.Length();i++)
       {
          //Wenn Komponente mit Klassenname "TButton" gefunden dann
          //setze Enabled vom Button auf Wert aus ur[position co]-48
          //Beispiel position co steht auf 1. In deinem String ur steht
          //an erster Position eine 1 (entspricht Button1->Enabled = true)
          //Da im du aber mit ur[co] die ASCII Werte hast musst du 48 abziehen
          //ASCII Code für '0' = 48 und für '1' = 49
          if (Form2->Components[i]->ClassNameIs("TButton"))
          {
             dynamic_cast<TButton*>(Form2->Components[i])->Enabled = ur[++co]-48;
          }
       }
       //Benutzernamen in deiner private Variable benutzer speichern.
       Form1->benutzer = Edit1->Text;
       Form1->Hide();
       Form2->Show();
    }
    else
    {
       //Fehlermeldung wenn kein Eintrag in Datenbank
       Application->MessageBoxA("Benutzername oder Passwort ungültig.","Achtung");
    }
    Query1->Close();
    }
    


  • @Black: nein das mit dem 100011 hab ich schon verstanden!

    @fragg: langsam leuchtet mir auch dein Beispiel...aber wo kann ich denn spezielle Buttons bestimmen!

    Zum beispiel hat der mit wenigsten rechte also 1000000000000, das heißt bei ihm ist Button1 enabled!
    der mit der nächsten stufe der Rechte hat zusätzlich Button 7 enabled:

    Wäre das 100000100000?, und woher weiß deine konstruktion, das Button 7 gemeind ist?



  • dynamic_cast<TButton*>(Form2->Components[i])->Enabled = ur[++co]-48;
    

    Aktiviert oder deaktiviert den entsprechenden Button.
    Auf Array Index zugreifen: ur[++co]
    die -48 ziehe 48 von dem ergebnis ab. 😉



  • for(int i=0;i<Form2->ComponentCount&&co<ur.Length();i++)
       {
          if (Form2->Components[i]->ClassNameIs("TButton")&&Form2->Components[i]->Name!="Button1")
          {
             dynamic_cast<TButton*>(Form2->Components[i])->Enabled = ur[++co]-48;
          }
       }
    


  • Würde das bedeuten wenn mein String so aussieht: 110011100000, das er durch das ur automatisch Button 1,2,5,6,7 enabled?

    Und was würde passieren wenn ich zB keinen Button 7 habe (durch löschen oder so?), nimmt er dann anstelle der 7 den 8 Button? das wäre ja schlecht!



  • Würde das bedeuten wenn mein String so aussieht: 110011100000, das er durch das ur automatisch Button 1,2,5,6,7 enabled?

    Ja.
    110011100000

    Button1->Enabled=ursprünglicher Zustand.
    Button2->Enabled=true;
    Button3->Enabled=true;
    Button4->Enabled=false;
    Button5->Enabled=false;
    Button6->Enabled=true;
    Button7->Enabled=true;
    Button8->Enabled=true;
    Button9->Enabled=false;
    Button10->Enabled=false;
    Button11->Enabled=false;
    Button12->Enabled=false;

    Und was würde passieren wenn ich zB keinen Button 7 habe (durch löschen oder so?), nimmt er dann anstelle der 7 den 8 Button? das wäre ja schlecht!

    Ja.
    Die Ausnahmen müsstest du zwangsläufig mit if bzw switch abfangen.



  • Button1->Enabled=ursprünglicher Zustand.
    Button2->Enabled=true;
    Button3->Enabled=true;
    Button4->Enabled=false;
    Button5->Enabled=false;
    Button6->Enabled=true;
    Button7->Enabled=true;
    Button8->Enabled=true;
    Button9->Enabled=false;
    Button10->Enabled=false;
    Button11->Enabled=false;
    Button12->Enabled=false;

    bezogen auf

    for(int i=0;i<Form2->ComponentCount&&co<ur.Length();i++)
       {
          if (Form2->Components[i]->ClassNameIs("TButton")&&Form2->Components[i]->Name!="Button1")
          {
             dynamic_cast<TButton*>(Form2->Components[i])->Enabled = ur[++co]-48;
          }
       }
    

    😉



  • Den Button Nr. 7 auslassen.

    if (Form2->Components[i]->ClassNameIs("TButton")&&Form2->Components[i]->Name!="Button7")
    


  • Ok das abfangen wäre sicher kein problem!

    Ich hab nun mal das hier probiert:

    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    Form3->Query1->Close();
    Form3->Query1->SQL->Clear();
    Form3->Query1->SQL->Add("select * from Login where LName like '" +Edit1->Text+ "' AND Passwort = '"+Edit2->Text+ "';");
    Form3->Query1->Open();
    
    if (!Form3->Query1->Eof)
    {
    if (Form3->Query1->FieldByName("Rechte")->AsBoolean==true)
    {
    //ShowMessage ("Gut");
    Form4->Show();
     String str = Form3->Query1->FieldByName("MARechte")->AsString;
     Form4->Button1->Enabled = (str[0]  == "1") ? true : false;
     Form4->Button2->Enabled = (str[1]  == "1") ? true : false;
     Form4->Button3->Enabled = (str[2]  == "1") ? true : false;
     Form4->Button4->Enabled = (str[3]  == "1") ? true : false;
     Form4->Button5->Enabled = (str[4]  == "1") ? true : false;
     Form4->Button6->Enabled = (str[5]  == "1") ? true : false;
     Form4->Button7->Enabled = (str[6]  == "1") ? true : false;
     Form4->Button8->Enabled = (str[7]  == "1") ? true : false;
     Form4->Button9->Enabled = (str[8]  == "1") ? true : false;
     Form4->Button10->Enabled = (str[9]  == "1") ? true : false;
     Form4->Button11->Enabled = (str[10]  == "1") ? true : false;
     Form4->Button12->Enabled = (str[11]  == "1") ? true : false;
    
    Form1->DestroyWnd();
    //Form3->Table2->Open();
    }
    
    }
    else
    {
    ShowMessage ("Falscher Benutzername oder falsches Passwort");
    Edit1->SetFocus();
    }
    }
    

    Und da kommt Fehler: Konvertierung von Char nach Char nicht möglich?!

    Hab ich was übersehen?



  • Form4->Button1->Enabled = (str[0]  == '1') ? true : false; 
    etc.
    


  • ich zitiere mich mal selbst... 😉

    Linnea schrieb:

    DJ BlackEagle schrieb:

    PS: li... ein Array fängt immer mit 0 an, nicht mit 1.

    Strings sind 1 basiert ...

    also lieber bei

    Form4->Button1->Enabled = (str[1]  == '1') ? true : false;
    

    beginnen



  • Für AnsiString

    str[1]
    

    für std::string

    str[0]
    

    😉



  • Danke ihr beiden....das funktioniert jetzt!

    Werde dann mal das andere Beispiel von Fragg testen...weil das für weitere Komponenten anscheinend eleganter ist!



  • Und da hab ich gleich noch eine Frage:

    Da ich ja als Admin im Prog auch rechte anlegen will und ändern...also wie kann ich zB an bestimmte positionen in den string schreiben?

    Beispiel:

    Ich hab für jeden Button eine Checkbox...und ich möchte Button7 aktivieren..wie müsste also das OnCklick Ereigniss der Checkbox aussehen, das er mir eben an die siebte stelle eine 1 schreibt...bzw von 0 auf 1 ändert?



  • Eins verstehe ich nicht ganz. Wieso macht ihr das hier

    Form4->Button1->Enabled = (str[1]  == '1') ? true : false;
    

    so kompliziert.
    Das hier

    Form4->Button1->Enabled = (str[1]  == '1');
    

    reicht doch auch;
    Desweiteren könnte man doch die Nummern der Buttons auch in deren Tag schreiben. Da bräuchtet ihr keine Namen abzufragen.



  • String ur="000000000000";// String Aus Datenbank
    ur[7]='1';
    //... In Datenbank schreiben
    


  • also müsste ich es so machen:

    if (CheckBox->Checked)
     {
     Form3->Query1->??? und jetzt?? Ein FieldByName(""), oder wie bekomm ich den String per Syntax rein?
     }
    

    Oder wo muss ich das ur[7]='1' hinschreiben?



  • Am besten unterhält man sich mit einer Datenbank in einer Sprache die sie versteht.(SQL)

    Für ändern UPDATE ...
    Für löschen DELETE ...

    http://dev.mysql.com/doc/mysql/de/UPDATE.html



  • Ja schon klar...

    könntest mir bitte mal ein beispiel geben bitte...wie ich in den String reinschreiben kann...den syntax weiß ich nich!

    Also einfach mal ein Codebeispiel?!




Anmelden zum Antworten