![]() |
AW: SQLite mit passwort -303 unsupported feature
Zitat:
Ist es in den libraries? Also darf ich generell nicht libraries einbinden in denen sich die namen überschneiden? Oder ist das "SYMBOL" der delphi Functions name in den import units? Weil dann könnte ich den import modifizieren und einen modifizierten wrapper erstellen und es würde gehen oder? |
AW: SQLite mit passwort -303 unsupported feature
Zitat:
Oder du verkaufst ein Schiff von einem Luxusauto weit teurer als manchens Einfamilienhaus und dann muss der Käufer ein Abbo für vollständige Hinterradlenkung abschließen. :thumb: Oder du Programmierst ein Spiel aber alle models sehen langweilig und seelenlos aus und die Kinder müssen teure Skins kaufen um auf dem Schulhof nicht als "Default" gemobbt zu werden. SQLite fühlt sich so ein bisschen wie MYSQL an oder wie der Tag als oracle Sun gekauft hat und das freie Java auf einmal unfrei wurde und Elison von SAP und Google kohle eingefordert hat. Ich will einfach auf einer Installierten app durch ein einziges Update die Datenbank der App von Verschlüsselt auf Unverschlüsselt umstellen. Also muss ich beide binaries haben. Eine zum umstellen, die andere um mit dem umsonst model auf der DB zu arbeiten. Für die Zukunftsfähigkeit. Es ist so traurig, dass genau das wieder nicht funzt wo die programme in Sandboxes eingesperrt sind. Muss ich jetzt die DB hochladen auf einen unsere Windows Server die dann umwandelt und wieder zurück auf das smartphone sendet? Das kann es doch nicht sein. |
AW: SQLite mit passwort -303 unsupported feature
Zitat:
Zitat:
|
AW: SQLite mit passwort -303 unsupported feature
So hätte die Konveriterung von "SQLITE gut" nach "SQLITE schlecht aber umsonst" aussehen können.
Delphi-Quellcode:
Die Datenbank hätte danach einen Neuen Namen und ein neues passwort und die App könnte durchstarten und sich auf die Neue Passwortfreie unverschlüsselte SQLITE DB verbinden... und das funktioniert auch in Windows...
procedure TDbHealth.ConvertOldDBToNewDB(aDestpassword:String; aDestDBFilename:String= '');
var fFDSQLiteBackup:TFDSQLiteBackup; begin TSync.DB_CS.Acquire; try FPhysSQLiteDriverLink.EngineLinkage := slFDEStatic; fFDSQLiteBackup := TFDSQLiteBackup.Create(nil); try fFDSQLiteBackup.Database := FDatabase; fFDSQLiteBackup.Password := FPassword; fFDSQLiteBackup.DriverLink := FPhysSQLiteDriverLink; fFDSQLiteBackup.DestDatabase := aDestDBFilename; fFDSQLiteBackup.DestPassword := aDestpassword; fFDSQLitebackup.WaitForLocks := true; fFDSQLiteBackup.DestMode := smCreate;// smCreate, smReadWrite, smReadOnly fFDSQLiteBackup.Backup; finally fFDSQLiteBackup.Free; end; FPhysSQLiteDriverLink.EngineLinkage := slDefault; tFile.Delete(FDatabase); FDatabase := aDestDBFilename; fPassword := aDestpassword; finally TSync.DB_CS.Release; end; end; Ist die Frage ob man die Imports und Wrapper passend modifizieren kann, das der Linker die in Andoird und IOS mitnimmt. |
AW: SQLite mit passwort -303 unsupported feature
Ich habe nun auch ein Windowsprogramm auf D12 umstellen wollen. Dann habe ich auch "-303xxx" bekommen. Daraufhin die o.g Unit eingebunden und schon lief das Progamm erst einmal. Dann wollte ich mir die Datenbank mit dem Programm "DB Browser for SQLite" anschauen. Da kam die Meldung, "Datenbankdatei konnte nicht geöffnet werden. Grund: file is not a database.
Zum Test habe ich dann das gleiche Programm unter D11 compiliert. Dann wieder versucht, die Daten mit dem DB Browser anzeigen zu lassen. Das ging dann auch nicht mehr. Nun habe ich mir einmal eine ältere Datei angeschaut. Da konnte ich sehen, dass am Anfang der Datei "SQLite format 3" drinsteht bei den neu erzeugten Dateien kann ich keinen Text erkennen. Was läuft da schief? Habe eigentlich am D11 nichts geändert und nun geht es da auch nicht mehr. |
AW: SQLite mit passwort -303 unsupported feature
Ich führe diesen Code noch vor dem Backup und Reorg der Sqlite Datenbank, beim start der App aus. Damit geht es.
Es befreit die Alte datenbank von dem Passwort und neue Datenbanken haben ja eh keins.
Delphi-Quellcode:
Function TDBHealth.CheckAndRemoveEncryption:Boolean;
Begin Result := False; TSync.DB_CS.Acquire; try var SQLiteSec := TFDSQLiteSecurity.Create(nil); try SQLiteSec.Database := FDatabase; SQLiteSec.Password := ''; SQLiteSec.DriverLink := FPhysSQLiteDriverLink; var EncryptionStatus := SQliteSec.CheckEncryption; if EncryptionStatus = '<unencrypted>' then Begin Result := true; TLog.d('TDBHealth.CheckAndRemoveEncryption: DB is unencrypted'); End else if EncryptionStatus = '<encrypted>' then Begin TLog.d('TDBHealth.CheckAndRemoveEncryption: Encrypted DB or corrupt file'); TLog.d('TDBHealth.CheckAndRemoveEncryption: Check old DB-password start'); SQLiteSec.Database := FDatabase; SQLiteSec.Password := TDBConstants.DBPASSWORD_OLD; EncryptionStatus := SQLiteSec.CheckEncryption; TLog.d('TDBHealth.CheckAndRemoveEncryption: Check old DB-password finish'); if (EncryptionStatus <> '<unencrypted>') and (EncryptionStatus <> '<encrypted>') and (EncryptionStatus <> '') then Begin TLog.d('TDBHealth.CheckAndRemoveEncryption: DB is encrypted with old DB-password'); TLog.d('TDBHealth.CheckAndRemoveEncryption: Decrypt DB start'); try SQLiteSec.Database := FDatabase; SQLiteSec.Password := TDBConstants.DBPASSWORD_OLD; SQLiteSec.RemovePassword; Result := True; Except On E:Exception do Begin fCheckDBhealthError := 'Beim entschlüsseln der Datenbank ist folgender Fehler aufgetretetn:' + sLinebreak + e.message + slinebreak+ 'Die Datenbank ist vermutlich defekt.' ; TLog.d('TDBHealth.CheckAndRemoveEncryption: Decrypt DB Error:' + e.message); End; end; TLog.d('TDBHealth.CheckAndRemoveEncryption: Decrypt DB finish'); End else Begin //Fehler; fCheckDBhealthError := 'Beim Login in die SQLite Datenbank ist folgender Fehler aufgetretetn:' + sLinebreak + EncryptionStatus + slinebreak+ 'Die Datenbank ist vermutlich defekt.' ; TLog.d('TDBHealth.CheckAndRemoveEncryption: Error checking for encryption with old password returned:'+EncryptionStatus); End; End else if EncryptionStatus = '' then Begin //Fehler;// Sollte man es dann nochmal mit passwort versuchen? fCheckDBhealthError := 'Unknown error checking for unencrypted access. The DB is probably corrupt.'; TLog.d('TDBHealth.CheckAndRemoveEncryption: Unknown error checking for unencrypted access. The DB is probably corrupt.'); End; finally SQLiteSec.Free; end; finally TSync.DB_CS.Release; end; End; |
AW: SQLite mit passwort -303 unsupported feature
Hallo Andreas,
danke für die Funktion. Das klappt erst einmal in einem Beispielprojekt und wäre eine Möglichkeit, dies in mein Projekt einzubauen. Bei neuen Projekten lösche ich einfach das Passwort. Dann geht es unter Windows. |
AW: SQLite mit passwort -303 unsupported feature
Guten Morgen.
Ich habe leider das selbe Problem wir Ihr, nur habe ich noch eine Verständnisfrage: Warum kann ich das Passwort beim App-Start löschen und wenn ich das später machen möchte geht es nicht mehr. Kann mir da jemand eine Antwort geben? |
AW: SQLite mit passwort -303 unsupported feature
Soweit wie ich das verstanden habe, kann das neue Delphi keine kostenlose Verschlüsselung mehr. Daher habe ich beim Anlegen einer Datenbank das Passwort ='' gesetzt. Damit funktioniert es bei mir.
Bei einer Datenbank mit Passwort habe ich die Funktion weiter oben genutzt. Damit konnte ich dann auch weiterarbeiten. |
AW: SQLite mit passwort -303 unsupported feature
1000 Dank an Euch.
Ihr habt mir Weihnachten gerettet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:15 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