Verschlüsselung --> Ini!Hilfe!



  • 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 😉



  • Ja kann ich mir denken, und hast natürlich recht, geht jetzt!

    Hab die zeile mir garnich mehr angeschaut...=/!

    Naja ich glaube vor dem Wochenende reicht das erstmal....aber ich denke am Montag werd ich wieder frischen stoff haben Beliah =)!

    Danke erstmal!


Anmelden zum Antworten