Login...mitnahme von Benutzername und Passwort!
-
Form4->Button1->Enabled = (str[0] == "1") ? true : false;Das sind die gewissen if-short-conditional.
Das was da steht würde ausgeschrieben so aussehen:
if(str[0] == "1") { Form4->Button1->Enabled = true; } else { Form4->Button1->Enabled = false; }Ist halt nur kürzer.

Warum "1"?
Linnea schrieb:
Bsp:
Rechte --- in Datenbank steht
1 ________ 100000100000
2 ________ 110000100000
3 ________ 110000100010
4 ________ 111000100010Die 1 steht für Aktiv..
Wenn die Variable str[0] den Inhalt 1 hat, soll er den Button aktivieren. wenn 0 ist, dann button deaktivieren.
100000100000 das würde dann in der DB drin stehen..
Da wäre hier Button 1 Aktiv. und noch ein Button...Aber wie du das machst, würde ich dir eher empfehlen, weil du ja nen totaler Anfänger bist (sagst du ja selbst).
Aber jeder fängt klein an.
-
DJ BlackEagle schrieb:
PS: li... ein Array fängt immer mit 0 an, nicht mit 1.
Strings sind 1 basiert ...
@Kamill
zur Nutzung des Debuggers gibst einen FAQ-Beitrag, ohne Debugger kann man eigentlich nicht programmieren, da man nie weiss wo genau der Fehler ist
-
naja,nach der beschreibun hab ich schon verstanden...also so der anfänger bin ich nich...und eure beispiele leuchten mir auch ein!
Nur die sache mit dem debugger!...Kann mir wer ein link zum tut geben?
-
Sorry, bin erst jetzt zurück.
Eine Möglichkeit:if(str[0] == "1") { Form4->Button1->Enabled = true; } else { Form4->Button1->Enabled = false; }Dachte aber eher an sowas:
//Deine Zugriffsrechte aus Datenbank //Alternativ ein Integer und dann nach Bin (IntToBin()) String ur="101010"; // und dann anstatt von unendlich vielen if oder case Monstern sowas for(int i=0;i<Form1->ComponentCount;i++) { if (Form1->Components[i]->ClassNameIs("TButton")) { dynamic_cast<TButton*>(Form1->Components[i])->Enabled = StrToBool(ur.SubString(i+1,1)); } }
-
Oder aber besser so:
//Deine Zugriffsrechte aus Datenbank //Alternativ ein Integer und dann nach Bin (IntToBin()) String ur="101010"; // und dann anstatt von unendlich vielen if oder case Monstern sowas int co=0; for(int i=0;i<Form1->ComponentCount;i++) { if (Form1->Components[i]->ClassNameIs("TButton")) { dynamic_cast<TButton*>(Form1->Components[i])->Enabled = ur[++co]-48; } } }
-
Registrieren ist glaube ich manchmal doch besser:

String ur="0101010"; int co=0; for(int i=0;i<Form1->ComponentCount&&co<ur.Length();i++) { if (Form1->Components[i]->ClassNameIs("TButton")) { dynamic_cast<TButton*>(Form1->Components[i])->Enabled = ur[++co]-48; } }
-
@fragg: hallo erstmal

So nun fang ich mal an:
Kamill schrieb:
naja,nach der beschreibun hab ich schon verstanden...also so der anfänger bin ich nich...und eure beispiele leuchten mir auch ein!
Nur die sache mit dem debugger!...Kann mir wer ein link zum tut geben?
Ich hab geschrieben das ich nich so der anfänger bin...aber dein 2tes beispiel fragg hab ich wirklich nich verstanden...kannst mir das etwas genauer erklären?
Mir geht daraus nich hervor wie ich da meine 12 oder mehr Buttons einzel freischalten kann!
Was in DB stehen muss (wohl auch ein String ähnlich diesem: 100010001011?)!Würd mich freuen das etwas erläutert zu bekommen!

-
100010001011 => 1 0 0 0 1 0 0 0 1 0 1 1 b1 aktiv b2 inaktiv b3 inaktiv......Die Zahlenfolge ergibt deine Buttons...
erst zahl => Button 1
2. Zahl => Button 2Der Wert 1 bedeutet er hat das Recht (true).
Der Wert 0 bedeutet er hat nicht das Recht (false).
Umd das zu erleutern...
Falls du das nicht verstanden hast.
-
//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; ur="100010001011"; //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();
-
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.
110011100000Button1->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