Verschlüsselung --> Ini!Hilfe!
-
und wenn du, wie ich oben beschrieben hab, CloseKey() benutzt?
-
Jahhaaaaaaa
bis jetzt gehtz!
Ich könnt dich knutschen!
da hab ich aber direkt noch eine frage!:
Wenn ich in einer Datenbank eine zahl stehen habe....und ich die über ein Edit vergleiche!
Also ich geb eine Zahl in ein Editfeld, und diese soll mit einer Zahl in Datenbank abgeglichen werden, kann ich das da auch so machen, das ich das 3fache der Zahl eingebe, und er es als richtig erkennt! Quasi auch eine kleine verschlüsselung!
Beispiel:
In Datenbank steht 1234
das ich eben 2468 eingeben muss damit er es akzeptiert...
geht das irgendwie so:
Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer like '" +Edit1->Text+ "';")*2;
Und ja ich weis, eine Frage pro Thread, ein Thread pro Frage, aber wir sind grad so schön im Gespräch....
-
Sensitive schrieb:
geht das irgendwie so:
Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer like '" +Edit1->Text+ "';")*2;
so wäre das oben richtig:
Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer like '" + AnsiString(Edit1->Text.ToIntDef(-1) * 2) + "';");
wenn ich das richtig verstehe, soll aber die eingabe durch 2(3,4,5 oder was weis ich) geteilt werden,also wäre das besser:
Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer like '" + AnsiString(Edit1->Text.ToIntDef(-1) / 2) + "';");
ps.: das ToIntDef(-1) gibt -1 zurück falls im Editfeld was steht was nicht in eine Zahl umgewandelt werden kann(z.B. normaler Text)
-
Klasse,klappt bis jetzt alles!
Auch wenns nich ganz einfach war...aber bis jetzt gehtz...=)!
Vielleicht fällt mir noch was ein,dann frag ich hier drin wieder!
-
Lol, noch ein kleines Problem...dann bin ich vorerst schlau genug!
Das mit dem durch 2 teilen bei der Editeingabe und vergleich mit datanbank funkt schonmal
Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer like '" + AnsiString(Edit1->Text.ToIntDef(-1) / 2) + "';");
allerdings nur für den ersten wert der drin steht in DB!
Wie kann ich es machen das auch die anderen akzeptiert werden!
Mit table hab ich das so gemacht:Form3->Database1->Open(); Form3->Table1->Open(); Form3->Table1->SetKey(); Form3->Table1->Fields->Fields[0]->AsString = Edit1->Text; if (!Form3->Table1->GotoKey()) { } else { }
weil ich anders nicht weiß wies geht!
Er findet zwar jeden wert der tabelle bei der Editeingabe:
try { //Ini1->WriteInteger("Login","Uses",a); Form3->Query4->Close(); Form3->Query4->SQL->Clear(); Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer like '" + AnsiString(Edit1->Text.ToIntDef(-1) / 2) + "';"); Form3->Query4->Open(); if (!Form3->Query4->Eof) { ShowMessage ("Akzeptiert!Starten Sie das Programm neu um Aktivierung abzuschließen!");
da bringt er dann eben "Akzeptiert!Starten Sie das...."
Aber beim vergleich dann:
oid __fastcall TForm11::FormShow(TObject *Sender) { Form3->Query4->Close(); Form3->Query4->SQL->Clear(); Form3->Query4->SQL->Add("select * from Seriennummer"); Form3->Query4->Open(); R->RootKey = HKEY_CURRENT_USER; R->OpenKey(szRegKey, true); static int n = Ini3->ReadInteger("Registration","Reg-Number",n)/2; static int l = R->ReadInteger("Activation","Serial",-l)/3; static int m = Form3->Query4->FieldByName("Seriennummer")->AsInteger; Label2->Caption = Ini3->ReadInteger("Registration","Reg-Number",n)/2; Label3->Caption = R->ReadInteger("Activation","Serial",-l)/3; R->CloseKey(); { Ini3->WriteInteger("Registration","Reg-Number",n); } if (n==m && l==n) { ShowMessage ("Bereits Registriert"); Form1->ShowModal(); } else ShowMessage ("Bitte geben Sie eine korrekte Seriennummer ein!"); }
da sagt er das ich korrekte nummer eingeben soll.....
-
PS: Wenn ich den Wert der in der Tabelle als erstes steht eingebe, geht alles!
Nur bei darunterstehenden nicht...
-
wenn ich das richtig verstehe sind in der datenbank die korrekten nummer.
wieso machste das bei der start-abfrage das nicht so wie bei der eingabe?[quote=sensitive]
Form3->Query4->Close(); Form3->Query4->SQL->Clear(); Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer like '" + AnsiString(Edit1->Text.ToIntDef(-1) / 2) + "';"); Form3->Query4->Open();
[/quote]
aber so:
Form3->Query4->Close(); Form3->Query4->SQL->Clear(); Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer = '" + AnsiString(n) + "';"); Form3->Query4->Open();
und fragst dann über Form3->Query4->RecordCount ab ob ein datensatz gefunden wurde?
-
Weil ich erst angefangen habe mit Datenbanken...
wie müsste das dann aussehn?
if (Form3->Query->RecordCount == ?)
{
mach was?
}oder wie?
-
genau, wenn mindestens 1 Datensatz gefunden wurde(RecordCount >= 1, obwohl größer unwahrscheinlich ist) dann ist die nummer korrekt und wenn keiner gefunden wurde(RecordCount == 0) dann ist sie falsch.
-
Also das ist jetzt der angeänderte Code mit RecordCount:
void __fastcall TForm11::Button1Click(TObject *Sender) { try { //Ini1->WriteInteger("Login","Uses",a); Form3->Query4->Close(); Form3->Query4->SQL->Clear(); Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer like '" + AnsiString(Edit1->Text.ToIntDef(-1) / 2) + "';"); Form3->Query4->Open(); if (!Form3->Query4->Eof) { static int n; n = StrToInt(Edit1->Text); Form3->Query4->Close(); Form3->Query4->SQL->Clear(); Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer = '" + AnsiString(n) + "';"); Form3->Query4->Open(); Form3->Query4->RecordCount; if (Form3->Query4->RecordCount == 1) { ShowMessage ("Akzeptiert!Starten Sie das Programm neu um Aktivierung abzuschließen!"); Ini3->WriteInteger("Registration","Reg-Number",n); Form11->Close(); int l; l = StrToInt(Edit1->Text); R->RootKey = HKEY_CURRENT_USER; R->OpenKey(szRegKey, true); R->WriteInteger("Activation","Serial",l*1.5); R->Free(); } } else { ShowMessage ("Sie haben eine falsche Seriennummer eingegeben"); } //delete Ini1; } catch(...) { } } //---------------------------------------------------------------------------
Leider passiert nun garnix mehr!
Und wenn ich Programm im Builder starte kommt ein EDB Engine Error!
Allgemeiner SQL Fehler
Datentypen in Kriterienausdruck unverträglich!Was hab ich denn jetzt wieder falsch gemacht?
-
Tja... ich würde mal sagen, die SQL-Engine will dir mitteilen, dass Datentypen nicht übereinstimmen.
Willst du nicht mal den Debugger anwerfen und schauen, wo der Fehler auftritt?
-
eigentlich meinte ich auch bei der anderen überprüfung, wenn du aus der registrierung liest, da war doch das problem , oder?
-
@ Beliah:
nein das Problem liegt hier:static int n = Ini3->ReadInteger("Registration","Reg-Number",n)/2; static int l = R->ReadInteger("Activation","Serial",-l)/3; static int m = Form3->Query4->FieldByName("Seriennummer")->AsInteger; Label2->Caption = Ini3->ReadInteger("Registration","Reg-Number",n)/2; Label3->Caption = R->ReadInteger("Activation","Serial",-l)/3; R->CloseKey(); { Ini3->WriteInteger("Registration","Reg-Number",n); } if (n==m && l==n) { ShowMessage ("Bereits Registriert"); Form1->ShowModal(); } else ShowMessage ("Bitte geben Sie eine korrekte Seriennummer ein!");
Beim vergleich n==m schaut er in der datenbank nur den ersten wert an!
Andere Werte interessieren nicht....und da sagt er das ich korrekte Nummer eingeben soll, obwohl sie in Datenbank steht!Beim schreiben (also wenn ich in Editfeld eingebe,mit Datenbank abgleiche, und wenn richtig in Reg und Ini schrieben),das funktioniert!
-
die stelle meinte ich ja auch, da muss nach dem einlesen der nummer in n die überprüfung druch die select-anweisung und record count erfolgen anstatt n==m
also so:
... static int n = Ini3->ReadInteger("Registration","Reg-Number",n)/2; static int l = R->ReadInteger("Activation","Serial",-l)/3; Label2->Caption = Ini3->ReadInteger("Registration","Reg-Number",n)/2; Label3->Caption = R->ReadInteger("Activation","Serial",-l)/3; R->CloseKey(); Form3->Query4->Close(); Form3->Query4->SQL->Clear(); Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer = '" + AnsiString(n) + "'"); Form3->Query4->Open(); { Ini3->WriteInteger("Registration","Reg-Number",n); } if (Form3->Query4->RecordCount >= 1 && l==n) { ShowMessage ("Bereits Registriert"); Form1->ShowModal(); } else ShowMessage ("Bitte geben Sie eine korrekte Seriennummer ein!"); ...
-
Und wenn du mir noch sagst welche datentypen unverträglich sind...dann bin ich fast zufrieden...
Bringt nämlich exception...!
-
wann kommt der fehler?
welchen datentyp hat Seriennummer in der Datenbank?
-
Seriennummer is long integer!
Fehler kommt nach linken vor Programmstart!
Das heißt das OnCreate Event:möglicherweise das:
static int n = Ini3->ReadInteger("Registration","Reg-Number",n)/2; static int l = R->ReadInteger("Activation","Serial",-l)/3; Label2->Caption = Ini3->ReadInteger("Registration","Reg-Number",n)/2; Label3->Caption = R->ReadInteger("Activation","Serial",-l)/3; R->CloseKey(); Form3->Query4->Close(); Form3->Query4->SQL->Clear(); Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer = '" + AnsiString(n) + "'"); Form3->Query4->Open();
Hier wird ja n erst als static int und unten AnsiString(n)!!
Oder was könnte es noch sein?
-
dann versuch mal anstatt:
Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer = '" + AnsiString(n) + "'");
das:
Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer = " + AnsiString(n));
denn soweit ich weis sollte bei zahlenwerten das "'" nicht angegeben werden sonst meckert die datenbank(Oracle macht es auf jedenfall, bei anderen weis ichs net)
[EDIT]ps.: wieso sind die int variablen überhaupt static deklariert? das ist imo nur notwendig wenn die funktion später nochma aufgerufen wird und die gespeicherten werte gebraucht werden[/EDIT]
-
Ich werd verrrückt langsam!
Also vergleichen macht er jetzt...auch mit den anderen werten, danke dafür schonmal!
Aber im Zuge dessen gleich mal ein anderes problem wider....
Und zwar:
Wenn ich Nummer eingebe und sie ist richtig schließt er ja das Programm und schreibt in INI und Reg! Das funkt!
Beim neustart fragt er INI und REG ab und vergelicht...das funkt auch...allerdings nur bei einem neustart....
Beim 2ten will er wieder Seriennummer haben....wieso nur?
ich schreib mal kompletten Code der Form...
//--------------------------------------------------------------------------- #include <vcl.h> #include <vcl\registry.hpp> #pragma hdrstop #include "Aktivierung.h" #include "Unit1.h" #include "Query.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" #include <inifiles.hpp> TForm11 *Form11; //TIniFile *Ini1 = new TIniFile ("c:\\programming\\The_Manager\\Testmodule2\\Login\\INI\\login.ini"); TIniFile *Ini3 = new TIniFile ("C:\\programming\\The_Manager\\Testmodule2\\Login\\INI\\serial.ini"); const char * szRegKey = "Software\\Serial\\Login"; TRegIniFile *R = new TRegIniFile (""); //--------------------------------------------------------------------------- __fastcall TForm11::TForm11(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm11::Button1Click(TObject *Sender) { //static int a = Ini1->ReadInteger("Login","Uses",a); try { //Ini1->WriteInteger("Login","Uses",a); Form3->Query4->Close(); Form3->Query4->SQL->Clear(); Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer like '" + AnsiString(Edit1->Text.ToIntDef(-1) / 2) + "';"); Form3->Query4->Open(); if (!Form3->Query4->Eof) { ShowMessage ("Akzeptiert!Starten Sie das Programm neu um Aktivierung abzuschließen!"); static int n; n = StrToInt(Edit1->Text); Ini3->WriteInteger("Registration","Reg-Number",n); Form11->Close(); int l; l = StrToInt(Edit1->Text); R->RootKey = HKEY_CURRENT_USER; R->OpenKey(szRegKey, true); R->WriteInteger("Activation","Serial",l*1.5); R->Free(); } else { ShowMessage ("Sie haben eine falsche Seriennummer eingegeben"); } //delete Ini1; } catch(...) { } } //--------------------------------------------------------------------------- void __fastcall TForm11::FormShow(TObject *Sender) { Form3->Query4->Close(); Form3->Query4->SQL->Clear(); Form3->Query4->SQL->Add("select * from Seriennummer"); Form3->Query4->Open(); R->RootKey = HKEY_CURRENT_USER; R->OpenKey(szRegKey, true); static int n = Ini3->ReadInteger("Registration","Reg-Number",n)/2; static int l = R->ReadInteger("Activation","Serial",-l)/3; Label2->Caption = Ini3->ReadInteger("Registration","Reg-Number",n)/2; Label3->Caption = R->ReadInteger("Activation","Serial",-l)/3; R->CloseKey(); Form3->Query4->Close(); Form3->Query4->SQL->Clear(); Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer = " + AnsiString(n)); Form3->Query4->Open(); { Ini3->WriteInteger("Registration","Reg-Number",n); } if (Form3->Query4->RecordCount >= 1 && l==n) { ShowMessage ("Bereits Registriert"); Form1->ShowModal(); } else ShowMessage ("Bitte geben Sie eine korrekte Seriennummer ein!"); }
sorry wenns bissl komisch aussieht alles, aber is durchs viele probieren...is ja auch nur ne form zum testen!
Aber wo liegt wohl der fehler?
Achso, und noch den Code der Form die bei erfolgreichen vergleich geöffnet wird: könnte ja sein das Fehler auch hier liegt, da diese ja geöffnet wird..
//--------------------------------------------------------------------------- #include <vcl.h> #include <IniFiles.hpp> #pragma hdrstop #include "Unit1.h" #include "pwaendern.h" #include "DBArray.h" #include "Query.h" #include "DBKompos.h" #include "Aktivierung.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" #include <Inifiles.hpp> TForm1 *Form1; AnsiString AppText; TIniFile *Ini2 = new TIniFile ("C:\\programming\\The_Manager\\Testmodule\\Login\\opt.ini"); //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { AppText = "Dies ist der Anmeldebildschirm, geben Sie Name und Passwort ein"; AppText = AppText + " *** "; Caption = AppText; Application->Title = AppText; Timer1->Interval = 100; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { //Form3->Database1->AliasName = "test"; //Form3->Database1->DatabaseName = "test"; //Form3->Database1->Params->Values["user name"] = ""; //Form3->Database1->Params->Values["password"] = ""; //Form3->Table1->Open(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { if (ColorDialog1->Execute()) { Color = ColorDialog1->Color; } } //--------------------------------------------------------------------------- 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(); if (Form3->Query1->FieldByName("Masterrechte")->AsString == "1") { Form4->Button1->Enabled=true; Form4->Button7->Enabled=true; } if (Form3->Query1->FieldByName("Masterrechte")->AsString == "2") { Form4->Button1->Enabled=true; Form4->Button2->Enabled=true; Form4->Button7->Enabled=true; } if (Form3->Query1->FieldByName("Masterrechte")->AsString == "3") { Form4->Button1->Enabled=true; Form4->Button2->Enabled=true; Form4->Button11->Enabled=true; Form4->Button7->Enabled=true; } if (Form3->Query1->FieldByName("Masterrechte")->AsString == "4") { Form4->Button1->Enabled=true; Form4->Button2->Enabled=true; Form4->Button11->Enabled=true; Form4->Button3->Enabled=true; Form4->Button7->Enabled=true; } if (Form3->Query1->FieldByName("Masterrechte")->AsString == "5") { Form4->Button1->Enabled=true; Form4->Button2->Enabled=true; Form4->Button11->Enabled=true; Form4->Button3->Enabled=true; Form4->Button4->Enabled=true; Form4->Button7->Enabled=true; } if (Form3->Query1->FieldByName("Masterrechte")->AsString == "6") { Form4->Button1->Enabled=true; Form4->Button2->Enabled=true; Form4->Button11->Enabled=true; Form4->Button3->Enabled=true; Form4->Button4->Enabled=true; Form4->Button5->Enabled=true; Form4->Button7->Enabled=true; } if (Form3->Query1->FieldByName("Masterrechte")->AsString == "7") { Form4->Button1->Enabled=true; Form4->Button2->Enabled=true; Form4->Button11->Enabled=true; Form4->Button3->Enabled=true; Form4->Button4->Enabled=true; Form4->Button5->Enabled=true; Form4->Button10->Enabled=true; Form4->Button7->Enabled=true; } if (Form3->Query1->FieldByName("Masterrechte")->AsString == "8") { Form4->Button1->Enabled=true; Form4->Button2->Enabled=true; Form4->Button11->Enabled=true; Form4->Button3->Enabled=true; Form4->Button4->Enabled=true; Form4->Button5->Enabled=true; Form4->Button10->Enabled=true; Form4->Button6->Enabled=true; Form4->Button7->Enabled=true; } if (Form3->Query1->FieldByName("Masterrechte")->AsString == "9") { Form4->Button1->Enabled=true; Form4->Button2->Enabled=true; Form4->Button11->Enabled=true; Form4->Button3->Enabled=true; Form4->Button4->Enabled=true; Form4->Button5->Enabled=true; Form4->Button10->Enabled=true; Form4->Button6->Enabled=true; Form4->Button7->Enabled=true; Form4->Button12->Enabled=true; } if (Form3->Query1->FieldByName("Masterrechte")->AsString == "10") { Form4->Button1->Enabled=true; Form4->Button2->Enabled=true; Form4->Button11->Enabled=true; Form4->Button3->Enabled=true; Form4->Button4->Enabled=true; Form4->Button5->Enabled=true; Form4->Button10->Enabled=true; Form4->Button6->Enabled=true; Form4->Button7->Enabled=true; Form4->Button12->Enabled=true; Form4->Button8->Enabled=true; } Form1->DestroyWnd(); //Form3->Table2->Open(); } } else { ShowMessage ("Falscher Benutzername oder falsches Passwort"); Edit1->SetFocus(); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit1Exit(TObject *Sender) { Form3->Database1->Open(); Form3->Table1->Open(); Form3->Table1->SetKey(); Form3->Table1->Fields->Fields[0]->AsString = Edit1->Text; if (!Form3->Table1->GotoKey()) { } else { } } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { AnsiString first = AppText.SubString(1,1); AppText.Delete(1,1); AppText = AppText + first; Application->Title = AppText; Caption = AppText; Button4->Caption=AppText; Label3->Caption=AppText; Label4->Caption = Time(); for (int i = 0;i<50;i++) { Application->ProcessMessages(); //Sleep(); //Application->ProcessMessages(); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button5Click(TObject *Sender) { Application->Terminate(); } //---------------------------------------------------------------------------
danke schonmal wieder...
-
kommentier mal bei:
... Form3->Query4->Close(); Form3->Query4->SQL->Clear(); Form3->Query4->SQL->Add("select * from Seriennummer where Seriennummer = " + AnsiString(n)); Form3->Query4->Open(); { Ini3->WriteInteger("Registration","Reg-Number",n); } if (Form3->Query4->RecordCount >= 1 && l==n) { ShowMessage ("Bereits Registriert"); Form1->ShowModal(); } else ShowMessage ("Bitte geben Sie eine korrekte Seriennummer ein!"); ...
folgendes aus:
... { Ini3->WriteInteger("Registration","Reg-Number",n); } ...
erklärung:
aus der registrierung wird ein wert eingelsen und durch 2 geteilt dann wird der wert n zugewiesen. d.h. in n steht der eingelesee wert durch 2.Dann schreibste n wieder in die registrierung...den rest kannste dir wohl denken