Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQLite mit passwort -303 unsupported feature (https://www.delphipraxis.net/214094-sqlite-mit-passwort-303-unsupported-feature.html)

QuickAndDirty 13. Nov 2023 16:55

Datenbank: SQLite • Version: ? • Zugriff über: Firedac

SQLite mit passwort -303 unsupported feature
 
Habe ein Projekt von Delphi XE11 nach XE 12 übernommen.
Nun folgende Laufzeitfehler.

Auf Android32 kann eine SQLite Connection nicht mehr mit dem einem gesetzten 'Password' parameter erstellt werden.
Es kommt die meldung -303 unsupported feature. "-303. Funktionalität wird nicht unterstützt"
Die Datenbank ist zudem zeitpunkt noch nicht erstellt!
Mit Leerstring als 'Password' und ohne 'Password' parameter geht es.

Außerdem funktioniert unter windows
dieser Code, compiliert mit Delphi XE 12, nicht auf einer mit mit Delphi XE 11 mit passwort erstellten SQLite datenbank .
Delphi-Quellcode:
    fFDSQLiteValidate := TFDSQLiteValidate.Create(nil);
    try
      fFDSQLiteValidate.Database := aDatabase;
      fFDSQLiteValidate.Password := FPassword;
      fFDSQLiteValidate.DriverLink := FPhysSQLiteDriverLink;
      fFDSQLiteValidate.MaxErrors := 10;
      fFDSQLiteValidate.Options := [voCheckIndexes];//[voCheckIndexes]= StandardCheck or [] = QuickCheck
      fFDSQLiteValidate.OnProgress := CheckOnlyProgressEvent;
      fFDSQLiteValidate.OnError := CheckOnlyErrorEvent;
      try
        Result := fFDSQLiteValidate.CheckOnly;
      Except
        On E:Exception do
        Begin
          Result := false;
          FLastCheckOnlyErrorMessage := e.Message;
          Tlog.d(FLastCheckOnlyErrorMessage);
        End;
      end;
    finally
      fFDSQLiteValidate.free;
    end;
Wenn fPassword gesetzt ist, kommt "-303 unsupported feature"
Wenn Fpassword leerstring ist , kommt "Error: file is not a database"

Ist das Phänomen bekannt und die Lösung auch?

Uwe Raabe 13. Nov 2023 21:11

AW: SQLite mit passwort -303 unsupported feature
 
Versuch mal, irgendwo im Projekt die Unit FireDAC.Phys.SQLiteWrapper.FDEStat in die uses-Anweisung aufzunehmen.

QuickAndDirty 14. Nov 2023 09:08

AW: SQLite mit passwort -303 unsupported feature
 
Interessant.
jetzt geht es.
Kann man die magische passwort unit auch 2 mal unterbringen, damit die units die SQLite Passwörter verwenden in jedemfall funktionieren ?

Was hat sich da von XE11 auf XE12 geändert, dass ich diese unit jetzt brauche?
Edit:
Ok, also es ist einfache eine import unit für eine DynLib .
Mit Kompiler schaltern für dynamisches laden oder statisches linken.
War das was hier
FireDAC.Phys.SQLiteWrapper.FDEStat
drin ist früher in
FireDAC.Phys.SQLiteWrapper enthalten und jetzt nicht mehr?

Edit2:
FireDAC.Phys.SQLiteWrapper.FDEStat
FireDAC.Phys.SQLiteWrapper.Stat
Was ist der Unterschied?
ich habe voher FireDAC.Phys.SQLiteWrapper.Stat benutzt. Muss ich diese unit jetzt ausbauen?

Uwe Raabe 14. Nov 2023 09:49

AW: SQLite mit passwort -303 unsupported feature
 
Die Unit FireDAC.Phys.SQLiteWrapper.FDEStat muss verwendet werden um das alte Encryption-Verfahren zu verwenden. Sie muss nach FireDAC.Phys.SQLiteWrapper.Stat stehen, damit die Default-Engine auf FDE geändert wird.

Wenn du sichergehen willst, platziere einen
Delphi-Quellcode:
TPhysSWLiteDriverLink
auf ein Form und setze das
Delphi-Quellcode:
EngineLinkage
Property auf
Delphi-Quellcode:
slFDEStatic
. Damit kann dir die Default-Engine egal sein.

QuickAndDirty 14. Nov 2023 10:06

AW: SQLite mit passwort -303 unsupported feature
 
Danke.
Ich bin leicht schockiert weil ich diesen schrecklichen blog post fand. (Ich hab nur Delphi kein C++)
https://blogs.embarcadero.com/new-fi...or-sqlite-see/

Also der eigentliche Grund für das Gehampel ist, dass wir bei dem alten binary 'libsqlite.a', 'sqlite3_x86.obj' und 'libcgsqlite3.dylib' bleiben können ?
Weil die neuen Versionen dieser Dateien keine Encryption mehr unterstützen und Encryption jetzt ein Premium-Feature ist was man über einen SEETreiber nachkaufen muss?

Also Enshittyfication wie bei games?

Früher hat Firedac immer eine Login Meldung gebracht oder eine andere nervige Warnung, wenn man eine Datenbank mit leerem oder Ohne Password versucht hat zu connecten... deswegen hat die Datenbank ein Passwort.
Muss ich jetzt meine SQLite Datenbank, um zukunftsicher zu sein, von einer DB mit Passwort in eine ohne Passwort umwandeln? Und wird dann wieder eine Meldung kommen wenn die DB kein Passwort hat?

Edit: Auf Android geht es ohne passwort aber wie bekommt man Daten von der alten verschlüsselten DB in die Neue?
TFDBatchMove ??

QuickAndDirty 15. Nov 2023 15:58

AW: SQLite mit passwort -303 unsupported feature
 
Wenn ich beide Units verwende
Delphi-Quellcode:
uses
FireDac.Phys.SQLiteWrapper,
FireDAC.Phys.SQLiteWrapper.Stat, //diese
FireDAC.Phys.SQLiteWrapper.FDEStat; //und diese
bekomme ich beim linken für Android den fehler

Code:
[DCC Fehler] E2597 C:\Users\Public\Documents\Embarcadero\Studio\23.0\CatalogRepository\AndroidNDK-21-23.0.50491.5718\android-ndk-r21\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-ld.exe: error: c:\\program files (x86)\\embarcadero\\studio\\23.0\\lib\\Android\\Release/libsqlite_fde.a(sqlite3_fde.o): multiple definition of 'sqlite3_aggregate_context'
  C:\Users\Public\Documents\Embarcadero\Studio\23.0\CatalogRepository\AndroidNDK-21-23.0.50491.5718\android-ndk-r21\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-ld.exe: c:\\program files (x86)\\embarcadero\\studio\\23.0\\lib\\Android\\Release/libsqlite.a(sqlite3.o): previous definition here
  C:\Users\Public\Documents\Embarcadero\Studio\23.0\CatalogRepository\AndroidNDK-21-23.0.50491.5718\android-ndk-r21\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-ld.exe: error: c:\\program files (x86)\\embarcadero\\studio\\23.0\\lib\\Android\\Release/libsqlite_fde.a(sqlite3_fde.o): multiple definition of 'sqlite3_aggregate_count'
Also diesen fehler bekomme ich für so ziemlich jede Funktion in sqlite3_fde.o und sqlite3.o
Eine laaange list von Fehlern und dann den Linker Error
Code:
[DCC Fataler Fehler] F2588 Linker-Fehlercode: 1 ($00000001)

In windows geht es nur Android meckert.
Ich brauche beide , um Die Datebank zu konvertieren.
Muss ich den FDEStat import modifizieren?

Uwe Raabe 15. Nov 2023 16:33

AW: SQLite mit passwort -303 unsupported feature
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1529733)
Wenn ich beide Units verwende
...
bekomme ich beim linken für Android den fehler
...
In windows geht es nur Android meckert.

Das steht so auch in der Doku:
Zitat:

For Android, Linux, and iOS platforms, only one static linkage unit may be included in a project simultaneously. In other words, you can use either FireDAC.Phys.SQLiteWrapper.Stat or FireDAC.Phys.SQLiteWrapper.FDEStat, but you cannot use both in the same project. If you do, the linker will generate errors because of duplicate symbols.

Sinspin 15. Nov 2023 17:25

AW: SQLite mit passwort -303 unsupported feature
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1529668)
Also der eigentliche Grund für das Gehampel ist, dass wir bei dem alten binary 'libsqlite.a', 'sqlite3_x86.obj' und 'libcgsqlite3.dylib' bleiben können ?
Weil die neuen Versionen dieser Dateien keine Encryption mehr unterstützen und Encryption jetzt ein Premium-Feature ist was man über einen SEETreiber nachkaufen muss?

:evil:
Das erfordert ein bisschen Ausdauer, aber das ist offensichtlich eine gute Methode um Steinreich zu werden:
- Bring eine Software für Lau auf den Markt
- Warte bis die Software "überall" verwendet wird
- Entferne ein wesentliches Feature der Software und verkaufe es gegen Lizenzen die so abartig teuer sind dass dich jeder dafür hasst.

mytbo 15. Nov 2023 17:56

AW: SQLite mit passwort -303 unsupported feature
 
Zitat:

Zitat von Sinspin (Beitrag 1529737)
Zitat:

Zitat von QuickAndDirty (Beitrag 1529668)
Also der eigentliche Grund für das Gehampel ist, dass wir bei dem alten binary 'libsqlite.a', 'sqlite3_x86.obj' und 'libcgsqlite3.dylib' bleiben können ?
Weil die neuen Versionen dieser Dateien keine Encryption mehr unterstützen und Encryption jetzt ein Premium-Feature ist was man über einen SEETreiber nachkaufen muss?

:evil:
Das erfordert ein bisschen Ausdauer, aber das ist offensichtlich eine gute Methode um Steinreich zu werden:
- Bring eine Software für Lau auf den Markt
- Warte bis die Software "überall" verwendet wird
- Entferne ein wesentliches Feature der Software und verkaufe es gegen Lizenzen die so abartig teuer sind dass dich jeder dafür hasst.

Nein, das ist nicht der Grund. Im Repro steht: "Simplify the code by removing the unsupported and undocumented...". Den offiziellen Weg mag nur nicht jeder gehen. mORMot geht ihn:
Code:
After a lot of painful debugging and adaptation in plain C, we just updated SQLite3 to latest 3.32.2 revision
- switched to VFS pattern for encryption
- sqlite3 cross-compilation is now done from Linux scripts
Den Bremsklotz für eine Umsetzung bei Embarcadero deutet vermutlich das Wort "painful" an.

Bis bald...
Thomas

Sinspin 16. Nov 2023 07:43

AW: SQLite mit passwort -303 unsupported feature
 
Es geht nicht um Emba. Ich kann verstehen wenn man sich da lieber an Funktionen hält die zuverlässig funktionieren. Es fällt sonst auf Emba zurück wenn der Kram nicht ordentlich geht.

Sqllite.org : SEE (Sqllite Encryption Extension) :
Product To Purchase: SEE Source Code License Only ($2000 USD)
Das meine ich!

<OT>
Btw, ich bekomme keinen einzigen Blog Post von Emba auf. Ich sehe die Hauptseite.
Ein Cclick auf einen Post zeigt mir nur immer wieder die Hautpseite an, auch wenn sich die Adresszeile ändert als würde in einen Beitrag gewechselt. Browser : Chrome.latest.
<OT>


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:01 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz