Verschlüsselung --> Ini!Hilfe!
-
Auch wenn ich das +4 und /4 weglasse, kommt nur 0!
Aber nur bei static int!
Wenn ich normal int nehme, dann bekomme ich utopische werte!
-
Sensitive schrieb:
@Beliah: ich mach das nur das eine mal wo es oben im code steht,also nur wo die Reg geschrieben wird...warum?
weil die variable ja wissen muss wo sie suchen soll.
-
Und wo soll ich das jetzt im Quellcode nochmal hinsetzten deines erachtens?
Danke schonmal wieder für antwort....
-
vor dem einlesen, bzw. falls die Variable in der ganzen Form verfügbar ist(also die deklaration in der klassendefinition der form steht), im Konstruktor der Form, dann könnteste auch das vor dem schreiben löschen, bzw. besser erstma auskommentieren und testen obs dann noch funktioniert.
ist aber keine garantie das es so funktioniert...
-
Also hab das grad mal vorm lesen reingeschrieben:
R->RootKey = HKEY_CURRENT_USER; R->OpenKey(szRegKey, true); static int n = Ini3->ReadInteger("Registration","Reg-Number",n); static int l = R->ReadInteger("Activation","Serial",l/4); static int m = Form3->Query4->FieldByName("Seriennummer")->AsInteger; Label2->Caption = Ini3->ReadInteger("Registration","Reg-Number",n); Label3->Caption = R->ReadInteger("Activation","Serial",l);
eingefügt...dann funktiniert es wenn schon was drin steht in der registry!
Wenn ich allerdings die einträge in der registry lösche schreibt er sie an die falsche stelle!
Rictig wäre hier:
HKEY_CURRENT_USER -> Software -> Sen -> Login -> Activierung
Er schreibt es aber hier:
HKEY_CURRENT_USER -> Software -> Sen -> Login -> Software -> Sen -> Login -> Activierung!
Also er schreibt in den sSchlüsseö den Schlüssel nochmal rein!
Also irgendwie komisch!
-
klappt es wenn du die zeile:
R->OpenKey(szRegKey, true);
vor dem schreiben auskommentierst?
[EDIT]
wenn nicht dann versuch mal:R->CloseKey();
nach dem einlesen.
schau dazu auch mal in der BCB-Hilfe zu TRegistry.
ich geh mal davon aus das du TRegistrybenutzt da dies die einzige für Ini/Registry 'zuständige' klasse ist die OpenKey als methode hat(bzw. die einzige die ich gefunden hab
)
[/EDIT]
-
Wenn ich das auskommentiere, schreibt er weider an die richtige stelle, ließt es aber wieder nicht!
und wenn ich
R->RootKey = HKEY_CURRENT_USER;
auskommentiere, ließt er, aber schreibt wieder an falsche stelle...
-
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!