Login...mitnahme von Benutzername und Passwort!
-
So jetz haben wir mein Programm aber langsam fertig.

String alt="101000000000";//Nur Beispiel Das was vorher in der Datenbank war. String user = DeinBenutzerEdit->Text;//Dein Edit für Benutzername String neu=alt; neu[7]='1'; String sql="UPDATE artikel SET MaRechte='"+neu+"' WHERE MaRechte='"+alt+"' AND username='"+user+"';"; Query1->SQL->Clear(); Query1->SQL->Add(sql); Query1->ExecSQL();
-
Manchmal tippt man sich echt nen Scheiß zusammen.
Zu meiner Entschuldigung: - alles ohne BCB -
String ur="101000000000";//Nur Beispiel Das was vorher in der Datenbank war. String user = DeinBenutzerEdit->Text;//Dein Edit für Benutzername ur[7]='1'; String sql="UPDATE artikel SET MaRechte='"+neu+"' WHERE username='"+user+"';"; Query1->SQL->Clear(); Query1->SQL->Add(sql); Query1->ExecSQL();
-
Na wenn sich einer entschuldigen muss dann wohl ich....!
So jetzt frag ich verständiss halber nochmal nach, wenn ich nur über CheckBox die MaRechte ändern will...User erstmal ausenvor gelassen:
String ur="101000000000; String ur2=ur; ur2[7]='1'; String sql="UPDATE artikel SET MaRechte='"+ur2+"'"; Query1->SQL->Clear(); Query1->SQL->Add(sql); Query1->ExecSQL();müsste ich mir das dann so vorstelln?
Ich entschuldige mich nochmal....bin im berecih SQL nen Anfänger...nur das hier muss ich eben schnell hinbekommen!

-
Hallo,
mit
String sql="UPDATE artikel SET MaRechte='"+ur2+"'";würdest du für alle Benutzer die selben Rechte setzen.
daher würde das hier besser passen.
String sql="UPDATE benutzer SET MaRechte='"+ur+"' WHERE username='"+user+"';";damit würdest du nur für einen bestimmten Benutzer die Rechte ändern.
also:UPDATE Tabellenname! SET MaRechte='Neuer Wert!' WHERE Benutzername! = 'Benutzer!';
-
Aha...und wenn ich ein komplett neues Recht anlegen will in der Tabelle Rechte?(Weil da stehen nur die Strings drin)
Also habe dann dementsprechend 12 Checkboxen (für jeden Button einen)!
Hier bleibt dann ja User wirkl ausen vor!String ur="000000000000; String ur2=ur; ur2[7]='1'; String sql="UPDATE Rechte SET MaRechte='"+ur2+"'"; Query1->SQL->Clear(); Query1->SQL->Add(sql); Query1->ExecSQL();würde das so gehen?, also wenn das die checkbox für den siebten button wäre?
-
Wofür eine Tabelle Rechte ?
Warum nimmst du die Rechte nicht mit in die "Benutzertabelle" ?
Wie ordnest du denn die Rechte in deiner "Rechtetabelle" deinen Usern zu ?
Extra wieder einen Schlüssel und eine zusätzliche Tabelle für die Zuordnung?
-
Naja ch brauch ja eine Tabelle Rechte, weil ich als Administrator auch neue rechte anlegen will..und die kann ich nicht in die Benutzertabelle schreiben!
Darum geht es mir!
Aber würde mein Beispiel so funktionieren?
-
Naja ch brauch ja eine Tabelle Rechte, weil ich als Administrator auch neue rechte anlegen will..und die kann ich nicht in die Benutzertabelle schreiben!
Du willst also so eine Art Rechtetypen erstellen und der Admin soll später diese Typen den Usern zuordnen können ?
Aber würde mein Beispiel so funktionieren?
Dann würdest du alle vorher mit INSERT eingefügten Rechte ändern.
Beim SQL Statement fehlt das WHERE MaRechte = 'alte MaRechte' bzw. Schlüsselnr.
-
Ja ich habe eine Tabelle nur mit den Rechten, da kann der Admin verändern und hinzufügen usw...diese ist mit Usertabelle verknüpft!
Und Admin kann dann User anlegen und deinen die Rechte zuordnen!
Wie wäre Code da am besten?
-
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?