Verschlüsselte Datensätze entschlüsselt in DBGrid anzeigen



  • Christian meinte sicher OnDrawDataCell. Dort bekommst du direkt einen Zeiger auf das aktuelle Datensatz-Feld, das kannst du dann mit AsString etc. auslesen.



  • @Jansen:
    Laut Hilfe ist OnDrawDataCell veraltet und man sollte statt dessen OnDrawColumnCell benutzen. (BCB6)

    @grandmasterb10:
    Tue Dir selbst einen Gefallen: kein quick'n'dirty. Das macht nur mehr Arbeit. Wenn Du von Anfang an sauber planst und schreibst, ist alles einfacher. Von Fehlersuche über Wartung über irgendwann mal das Geschriebene nachvollziehen ... und Du sparst Dir hinterher das "Entdrecken".



  • Christian: Gut aufgepasst! 😉

    Also Column->Field->AsString etc.



  • Könnt Ihr mir nochmals eben helfen. Ich komme damit nicht klar.
    Ich habe jetzt in dem Grid in das Ereignis OnDrawColumnCell reingeschrieben:

    Column->Field->AsString=decrypten(Column->Field->AsString,"12345");
    

    Beim Ausführen bekomme ich die Fehlermeldung, dass die Datenmenge nicht im Editier- oder Einfügemodus wäre.



  • Dein Code versucht, den entschlüsselten Text in die Datenbank zu schreiben.

    Mach dich erstmal mit den OnDraw-Methoden vertraut, ein entsprechendes StringGrid-Beispiel findest du z.B. in der FAQ hier.



  • Ich habe jetzt alle StringGrid Beiträge aus der Faq mir angesehen, aber ich kann nicht erkennen, dass dort ein Zusammenhang mit meinem Problem beschrieben ist. Was ich dort eben finde, ist, wie ich auf einen Zustand reagiere und die Zellen einfärbe.
    Ich kann nichts finden, dass mir etwas anderes angezeigt wird, wie in der Datenbank steht. Auch eine Suche durch andere Foren (Delphi) blieben erfolglos.

    Bitte nochmals um ein wenig Hilfe

    Gruss Carsten



  • Hallo

    Das Prinzip ist, das du den OnDraw..-Event des DBGrids dafür benutzen kannst um abhängig von einem Rohwert eine ganz eigene Ausgabe zu machen. In deinem Fall must du im Event überprüfen was für ein Feld gerade dran ist, bei einem verschlüsseltem Feld noch aus dem Rohwert den entschlüsselten Wert berechnen und danach den Ausgabewert normal manuell anzeigen lassen.

    Allerdings muß ich sagen das ich manuell verschlüsselte Feldwerte für schlecht halte (außer gehashte Passwörter). Für die Übertragungssicherheit muß eine verschlüsselte Verbindung sowie Login/Password verwendet werden. Verschlüsselte Feldwerte hingegen verhindern nur das Sortieren, Suchen und Indizierung durch die Datenbank sowie verringert die Geschwindigkeit.

    bis bald
    akari



  • @akari:
    Danke für die schnelle Antwort.

    ...und danach den Ausgabewert normal manuell anzeigen lassen.

    das ist ja mein Problem. Wie kann ich den errechneten Wert mir manuell anzeigen lassen?

    Allerdings muß ich sagen das ich manuell verschlüsselte Feldwerte für schlecht halte (außer gehashte Passwörter). Für die Übertragungssicherheit muß eine verschlüsselte Verbindung sowie Login/Password verwendet werden. Verschlüsselte Feldwerte hingegen verhindern nur das Sortieren, Suchen und Indizierung durch die Datenbank sowie verringert die Geschwindigkeit.

    Ich finde die ganze Angelegenheit auch nicht so toll, habe aber keine andere Möglichkeit gefunden. Hintergrund ist, dass es eine Anwendung ist, die lokal auf Clients läuft, und für unterschiedliche Username/Passworte bei der Anmeldung unterschieldiche Daten zur Verfügung stehen. Es soll aber verhindert werden, dass jemand die Möglichkeit hat, auf den kompletten Datenbesatnd zuzugreifen. Ich hatte mich da für eine Access Datenbank entschieden, da sie wenigstens durch ein Passwort gesichert (im Gegensatz zu Firebird embedded und Co.) Ich wüsste nicht, wie ich es sonst hinbekäme, dass nicht jemand mit ein wenig Erfahrung durch ein wenig spielerei an alle Daten heran käme.

    Gruss Carsten



  • grandmasterb10 schrieb:

    Was ich dort eben finde, ist, wie ich auf einen Zustand reagiere und die Zellen einfärbe.

    Und dass dort neben der Farbe auch der Text "von Hand" gezeichnet wird, ist dir nicht aufgefallen!?

    void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender,
          const TRect &Rect, int DataCol, TColumn *Column,
          TGridDrawState State)
    {
      ...
    
      DrawText(DBGrid1->Canvas->Handle, decrypt(Column->Field->AsString),
        -1, &Rect, DT_SINGLELINE | DT_VCENTER | 0);
    }
    


  • danke für Eure Hilfe.
    Jetzt funktioniert es.
    Habe eine andere Möglichkeit gewählt, da ich mit dem Ergebnis von

    DrawText(DBGrid1->Canvas->Handle, decrypt(Column->Field->AsString),
        -1, &Rect, DT_SINGLELINE | DT_VCENTER | 0);
    

    nicht so zufrieden war (Text wurde über das eigentliche Feld gezeichnet und schaute hier und da noch raus.....)
    Ich habe es jetzt über

    DBGrid1->Canvas->TextRect(Rect,Rect.Left,Rect.Top,decrypt(Column->Field->AsString,aes_key));
    

    gemacht, und habe das gewünschte Ergebnis. Mit Sicherheit funktioniert das geschriebene von Jansen auch, aber bevor ich mich hier noch mehr als Newbie oute....

    Danke nochmals 👍

    Gruss Carsten


Anmelden zum Antworten