![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: Zeos
Feld durch verschlüsselten Text ersetzen
Hallo,
ich würde gerne ein Feld mit sich selbst nach Entschlüsselung in einer Firebirdtabelle ersetzen. Hierzu dient die eigene Funktion Crypt, welche sich als Parameter zwei Textfelder bedient. Ich habe dies derzeit wie folgt gelöst, dauert aber bei einer großen Datenbank endlos
Code:
wie könnte ich dies über den SQL Update lösen ?
with Tabelle do
begin for i := 1 To RecordCount do begin Edit ; FieldByName('name').Value := Crypt(name, "WEDRFXEFCRTT")); Next; end; end; Update Tabelle set name = Replace( name, name Crypt(name, "WEDRFXEFCRTT")) leider gelingt es mir nicht dei Funktion einzubinden. Hat hier jemand Erfahrung ? |
AW: Feld durch verschlüsselten Text ersetzen
Guten Abend,
so ganz habe ich es nicht verstanden was Du bezwecken willst. Liegt vielleicht auch an den Bezeichnungen die Du verwendest. sqlText := 'Update Tabelle set name ='+Crypt(name, "WEDRFXEFCRTT") + 'where name = name;'; dann die sqlQuery ausführen. Grüße Klaus |
AW: Feld durch verschlüsselten Text ersetzen
Der Flaschenhals könnte auch die uns verheimlichte Funktion Crypt sein.
|
AW: Feld durch verschlüsselten Text ersetzen
Hallo,
leider funktioniert dies nicht. Im Prinzip möchte ich ein Feld, welches verschlüsselt ist entschlüsseln. Hinter Crypt verbirgd sich eine Stringverschlüsselung welche als Parameter Strings benötigt und einen String zurück gibt.. Bei vorgeschlagener Vorgenhensweise erhalte ich die Exception, dass das Feld name nicht gefunden wurde. Auch das Ersetzen durch sqlText := 'Update Tabelle set name ='+ Crypt(Tabelle.FieildbyName('name').value, "WEDRFXEFCRTT"))+ 'where name = name;'; hilt nicht |
AW: Feld durch verschlüsselten Text ersetzen
Das mag schon möglich sein, aber ein Flaschenhals ist definitiv das Update mit dem gezeigten Verfahren.
Dafür sollte man ein prepared Statement mit einem Parameter nehmen. Das geht erheblich schneller. Eine Query erstellen mit folgendem SQL-Text
Code:
Die DataSource der Abfrage-Query als MasterSource der Update-Query festlegen.
UPDATE MeineTabelle SET name = :CryptName WHERE MeineTabelle.ID = :ID
Delphi-Quellcode:
Ob der Aufruf genau so funktioniert hängt von den verwendeten Komponenten und DB ab.
UpdateQuery.Prepare;
try while not AbfrageQuery.EOF do begin UpdateQuery.ParamByName( 'CryptName' ) := Crypt( AbfrageQuery.FieldByName( 'name' ).AsString ); UpdateQuery.ExecSQL; AbfrageQuery.Next; end; finally UpdateQuery.Unprepare; end; Zitat:
Allerdings:
Code:
ist irgendwie sinnentleert, kann man dann auch gleich weglassen
UPDATE
... WHERE name = name |
AW: Feld durch verschlüsselten Text ersetzen
so..
Deine Tabelle heißt Tabelle Dein Feld heißt name Deine StringVariable die du verschlüsselst heißt auch name Da sehe mal einer durch. Grüße Klaus |
AW: Feld durch verschlüsselten Text ersetzen
Vielen Dank,
Prepare kenne ich noch nicht, werde mich einmal damit befassen. Leider funktioniert das mit Prepare nicht. Scheint wohl mit Zeos und Firebird nicht zu funktionieren. |
AW: Feld durch verschlüsselten Text ersetzen
Da google auch dein Freund sein sollte findet der "bemühte" User den Hinweis, dass die Zeos-Komponenten das Prepared wohl automatisch eingebaut haben (ich setze die Zeos-Kompos nicht ein, sind mir zu langsam).
Also dann einfach die Werte durch den Parameter-Wolf drehen lassen. Es würde ja auch helfen, die Zeiten zu messen, die du für das Verschlüsseln und für das Updaten der DB brauchst. Evtl. musst du an beiden Stellen schrauben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz