[Etwas OT] Sqlite-Zugriff. dhSQLite

18/12/2010 - 11:51 von Jens Müller | Report spam
Hallo,

ich nutze die dhSQLite.dll von Olaf zum Zugriff auf SQLite Dateien. Bei
einer Datei erhalte ich nun beim Auswführen eines SELECTs die Meldung:
Cannot compile SQL-Statement: file is encrypted or is not a database

Öffnen mit Editor zeigt, dass die Inhalte keineswegs verschlüsselt sind.
Mit der Command-Line-Shell aus http://www.sqlite.org/download.html kann ich
auf die Datei aber problemlos zugreifen. Das dhSqlite-Objekt zeigt mir als
Version der Datei 3.3.17 an.
Ich habe auch versucht die Sqlite-C-DLL durch die neuste zu ersetzen, was
auch nicht half.

Danke für Ideen,
Jens
 

Lesen sie die antworten

#1 Schmidt
18/12/2010 - 14:57 | Warnen spam
"Jens Müller" schrieb im Newsbeitrag
news:4d0c9252$0$7653$

ich nutze die dhSQLite.dll von Olaf zum Zugriff auf SQLite Dateien.
Bei einer Datei erhalte ich nun beim Auswführen eines SELECTs
die Meldung:
Cannot compile SQL-Statement: file is encrypted or is not a database


Falls das beim ersten überhaupt abgefahrenen Statement
(nach Öffnen der Connection) oder auch "beim Leseversuch
auf einer bestimmten Tabelle" passiert, dann könnte das an einem
"nicht verstandenen Schema" liegen (welches mein Schema-Parser
spàtestens beim ersten Select dann erst vollstàndig scannt,
um die Recordset-Field-Properties mit entsprechenden Zusatz-
Infos wie 'DefaultValue', OriginalTableName, FieldDataType
usw. zu versorgen).

Der Schema-Parser hat inzwischen schon so ein paar BugFixes
gesehen (mehr als 3 Jahre hàngt dhSQLite.dll inzwischen
hinter dem neuen, calling-kompatiblen Wrapper in
dhRichClient3.dll her).

Also versuch mal, Dein problematisches DB-File mit
den neuesten Dll-Versionen aus:
www.datenhaus.de/Downloads/dhRichClient3.zip
zu öffnen (register.bat aufrufen und danach Deine alte
dhSQLite-Projektreferenz auf dhRichClient3 schalten).

Für "reinen SQLite-Betrieb" benötigst Du die 2 Cairo-Dlls
aus dem Zip nicht - da reicht das "3er-Set" aus:
dhRichClient3.dll
sqlite36_engine.dll
DirectCOM.dll

Die 3 Files zusammen haben inzwischen ca. 820kByte Umfang
(verglichen mit den ca. 350kByte, die die beiden Files dhSQLite.dll
und sqlite3_engine.dll früher auf die Waage brachten).

470kByte mehr für 'ne ganze Ecke mehr Stabilitàt,
Geschwindigkeit und einen Haufen anderweitig nützlicher
Klassen in dhRichClient3 (SQLite-relevant wàre z.B.
der direkt im RichClient eingelinkte AppServer, der
die Multiuser-Performance der DB-Engine, verglichen
mit "normalem Share-Zugriff" wesentlich erhöhen kann).


Ich habe auch versucht die Sqlite-C-DLL durch die neuste
zu ersetzen, was auch nicht half.


Nein, das geht schlecht zusammen - zum einen exportiert
'mein' sqlite36_engine.dll -Kompilat das SQLite-API
als StdCall (das sqlite3.dll Binary von sqlite.org is _cdecl) -
und dann sind in sqlite36_engine.dll auch noch ein paar
Zusatzmodule (z.B. verschiedene Kompressoren wie
ZLib, LZMA, FastLZ) mit eingelinkt, von denen Classen-
Funktionalitàten der dhRichClient3.dll abhàngen (z.B.
die komprimierten Übertragungen beim eingebauten
AppServer setzen diese in der "C-Dll" befindlichen
Erweiterungen voraus - und auch den Zusatz-Code für
die DB-Verschlüsselungs-Funktionen besitzt das Original
von sqlite.org nicht.

Olaf

Ähnliche fragen