Login...mitnahme von Benutzername und Passwort!



  • Also hab mal was probiert...geht zwar nich...bringt aber auch keine Fehler...viell seht ihrs ja gleich!:

    Also um per CheckBox einen Button zu aktivieren (also eine 1 in den String an bestimmte stelle schreiben)

    void __fastcall TForm14::Button1Click(TObject *Sender)
    {
    if (CheckBox1->Checked)
     {
      String ur = Form3->Query1->FieldByName("MARechte")->AsString;
      String ur2=ur;
      ur2[7]='1';
      String sql ="UPDATE Login SET MARechte ='"+ur2+"' WHERE MARechte ='"+ur+"'";
      Form3->Query1->SQL->Clear();
      Form3->Query1->SQL->Add(sql);
      Form3->Query1->ExecSQL();
     }
    else
     {
     String ur = Form3->Query1->FieldByName("MARechte")->AsString;
      String ur2=ur;
      ur2[7]='1';
      String sql ="UPDATE Login SET MARechte ='"+ur2+"' WHERE MARechte ='"+ur+"'";
      Form3->Query1->SQL->Clear();
      Form3->Query1->SQL->Add(sql);
      Form3->Query1->ExecSQL();
     }
    

    So also er ändert nix...wieso?

    und dann um auszulesen wo eine 1 und 0 steht...und wenn 1 steht Checkbox checked...sonst nicht checked!
    Da ich das zu ändernde Recht aus Tabelle auswählen kann...und jedes Recht ja schon Buttons 1 oder 0 hat...sollen die Checkboxen eben anzeigen welche Buttons aktiv und welche nicht aktiv sind...

    void __fastcall TForm14::FormActivate(TObject *Sender)
    {
    Form3->Query1->SQL->Clear();
     Form3->Query1->SQL->Add("select * from Login");
     Form3->Query1->Open();
     String str = Form3->Query1->FieldByName("MARechte")->AsString;
     if (str[1] == '1')
     CheckBox1->Checked=true;
     else
     CheckBox1->Checked=false;
     if (str[2] == '1')
     CheckBox2->Checked=true;
     else
     CheckBox2->Checked=false;
     if (str[3] == '1')
     CheckBox3->Checked=true;
     else
     CheckBox3->Checked=false;
     if (str[4] == '1')
    .....
    

    da hat er das erst mal die Hacken richtig gesetzt, und jetzt stehen sie bei jedem start wie beim ersten mal!

    Also woran kanns liegen?



  • Habs auch mal so getestet:

    void __fastcall TForm14::FormActivate(TObject *Sender)
    {
    String ur = Form3->Query1->FieldByName("MARechte")->AsString;
      int co=0;
      for (int i=0;i<ComponentCount&&co<ur.Length();i++)
       {
        if (Components[i]->ClassNameIs("TCheckBox"))
         {
          dynamic_cast<TCheckBox*>(Components[i])->Checked = ur[++co]-48;
         }
        }
    }
    

    da verändern sich die CheckBoxen auch nich... 😡



  • Hallo

    also ich hab nicht alles durchgelesen, aber das ist irgendwie sinnlos :

    if (CheckBox1->Checked) 
     { 
      ...
      ur2[7]='1'; 
      ...
     } 
    else 
     { 
      ...
      ur2[7]='1'; 
      ...
      }
    

    im else-Teil sollte doch eine 0 eingetragen werden oder?

    bis bald
    akari



  • Kamill schrieb:

    da verändern sich die CheckBoxen auch nich... 😡

    Das liegt daran, das im Feld MaRechte anscheinend nicht das drinsteht was du erwartest.
    Setz doch mal einen Debugger-Haltepunkt hinter der Zuweisung von dem String ur und schau dir an was im String drinsteht.



  • @akari: war copy and paste...aber egal...da es ja eh nich funzt!

    @fragg:eigentlich steht das da schon drin...du meinst jetzt doch in der Datenbank oder?



  • @fragg:eigentlich steht das da schon drin...du meinst jetzt doch in der Datenbank oder?

    ????
    Was heisst eigentlich ?

    void __fastcall TForm14::FormActivate(TObject *Sender)
    {
    String ur = Form3->Query1->FieldByName("MARechte")->AsString; 
    //Hier Debugger Haltepunkt setzen 
    int co=0;
      for (int i=0;i<ComponentCount&&co<ur.Length();i++)
       {
        if (Components[i]->ClassNameIs("TCheckBox"))
         {
          dynamic_cast<TCheckBox*>(Components[i])->Checked = ur[++co]-48;
         }
        }
    }
    

    funktioniert für alle TCheckbox in deiner Form14.
    Was steht in ur wenn du dort den Haltepunkt setzt ?



  • Eigentlich bedeutet das ich nicht genau sagen kann was drin steht...weil ich übers WE nich an mein Prog ran komme...gehe ja nich extra auf arbeit!

    Ich schau aber gleich montag und geb dann bescheid..!



  • Ok, also er ließt immer 111111111111111 aus, egal welches recht ich anklicke!
    bei ur::00D80070 "1111111111111111"

    er behält praktisch das recht bei auf welches ich zuerst geklickt habe...denn wenn ich das erste mal auf ändern gehe->dann ein recht anklicke zeigt er mir die checkboxen richtig...nur danach nicht mehr....(also beim ersten programmstart nach Quellcode geschrieben),wenn ich dann prgramm neu starte behält er auch immer 111111111111111 bei!

    Also woran kanns liegen?



  • Ich versteh nur nicht warum es hier bei der Anmeldung funktioniert....hier sind es ja nur TButtons!

    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    String sql ="SELECT * FROM Login WHERE LName = '"+Edit1->Text+"' AND Passwort = '"+Edit2->Text+"'";
    Form3->Query1->SQL->Clear();
    Form3->Query1->SQL->Add(sql);
    Form3->Query1->Open();
    
    if (Form3->Query1->RecordCount)
     {
      String ur = Form3->Query1->FieldByName("MARechte")->AsString;
      int co=0;
      for (int i=0;i<Form4->ComponentCount&&co<ur.Length();i++)
       {
        if (Form4->Components[i]->ClassNameIs("TButton"))
         {
          dynamic_cast<TButton*>(Form4->Components[i])->Enabled= ur[++co]-48;
         }
       }
      Form1->Close();
      Form4->ShowModal();
     }
    else
     {
     ShowMessage ("Benutzername oder Passwort ungültig");
     }
    Form3->Query1->Close();
      }
    

    das geht einwandfrei!



  • mal ein hinweis, könnte etwas mit dem aktuellen problem zu tun haben.
    Du benutzt immer noch den inkorrekten SQL-Befehl:

    String sql ="UPDATE Login SET MARechte ='"+ur2+"' WHERE MARechte ='"+ur+"'";
    

    fragg hat schon einen, imo besseren , Befehl in diesen Thread geschrieben.



  • @Beliah: ja aber da müsste er ja wenigstens alle ändern...er ändert aber gar nix..!

    Und wieso setzt er nun die checkboxen nicht?



  • Also das mit den auslesen des Strings und den Checkboxen setzten hab ich jetzt glaub ich...er hatte die falsche Tabelle genommen!

    Aber mit dem schreiben weiß ich immernoch nich!



  • Also kann mir jemand das mit dem schreiben mal erklären bitte!



  • Ich mal wieder....also das mit dem schrieben...das wenn ich eine CheckBox anklicke, und er mir dafür eine 1 an die richtige stelle schreibst hab ich immernoch nciht...kann mir das mal jemand erklären?!



  • wow, nach einem Monat hast du es immernoch nicht geschafft die Funktion einfach umzudrehen 👍

    mal ein Tip:
    frag alle CheckBoxen ab, mach daraus den ur2 und nutz dann die update-funktion



  • naja ich probiere das nicht seit einem monat!
    War paar wochen urlaub etc...

    kannst du mir das etwas genauer erklären...weil ich das richtig verstehen möchte,und nach der zeit is man nicht mehr so drin! (somal das auch nciht ganz so leicht ist 😉 )



  • hallo Linnea hast mich vergessen??

    Also nochmal zum auffrischen:

    ich möchte, wenn ich zB CheckBox3->Checked setze, das dann in der Datenbank die Position für 3 Button, also da: 110 auf 111 gesetzt wird...



  • String sql="UPDATE Login SET MARechte='"+neuRechte+"' WHERE username='"+username+"'";
    


  • das problem is ja nur...das der string zb (Button 3 deaktiviert, sonst restlichen 9 buttons aktiviert) 1101111111 so aussieht!

    UZnd das wenn ich CheckBox3->Checked setze, das der dann eben so aussehen muss: 1111111111!!!



  • Kamill schrieb:

    das problem is ja nur...das der string zb (Button 3 deaktiviert, sonst restlichen 9 buttons aktiviert) 1101111111 so aussieht!

    UZnd das wenn ich CheckBox3->Checked setze, das der dann eben so aussehen muss: 1111111111!!!

    was hast du denn schon versucht um den String dahingehend zu ändern?
    wie liest du denn die einzelnen Positionen des Strings aus?
    kann man das vielleicht umkehren, um den String zu ändern?

    und nein, ich werde dir kein Beispiel geben, da alles was du brauchst schon da ist, und du ja schließßlich selbst was lernen willst


Anmelden zum Antworten