dhRichClient dump wegen Malformed database Schema

21/12/2012 - 21:48 von hermie.weber | Report spam
Hallo!

Ich möchte gerne versuchen, eine Datenbank zu dumpen, weil ich gelesen habe, dass das manchmal gegen den Fehler "Malformed database schema (?)" hilft.

Ich kann meine Datenbank noch über

Dim c As New dhRichClient3.cConnection
c.OpenDB "c:\sqlite\user.db"
c.CheckIntegrity

öffnen, aber bei .CheckIntegrity sagt er mir "Malformed database schema (?)".

Geht das Dumpen mit dhRichClient?

Dankeschön.

Hermann
 

Lesen sie die antworten

#1 Schmidt
22/12/2012 - 14:38 | Warnen spam
Am 21.12.2012 21:48, schrieb :

Ich möchte gerne versuchen, eine Datenbank zu dumpen, weil ich gelesen habe, dass das manchmal gegen den Fehler "Malformed database schema (?)" hilft.

Ich kann meine Datenbank noch über

Dim c As New dhRichClient3.cConnection
c.OpenDB "c:\sqlite\user.db"
c.CheckIntegrity

öffnen, aber bei .CheckIntegrity sagt er mir "Malformed database schema (?)".



Der RichClient-SQLite-Wrapper àndert ja nichts am
eigentlichen SQLite-DB-Format - das ist immer universell
lesbar von jedem SQLite-wrapper bzw. -Tool.

Das "normale Dumpen" von SQLite-DBs ginge also über das
SQLite Commandline-Tool, welches man sich von der SQLite-
WebSite downloaden kann.
Wie man das benutzt, kann man googlen.

Geht das Dumpen mit dhRichClient?


Ginge auch - hatte mir auch mal eine DB zerschossen, die weder
mit dem SQLite-Backup-API (welches Page-basiert arbeitet), noch
mit "normalem CommandLine-Dumping-Tool" zu retten war...
Aber àhnlich wie bei Dir, ging die Connection zumindest noch soweit
"auf", dass Cnn.CheckIntegrity aufrufbar war (mit entspr. Fehlermeldung)
aber was ebenfalls noch klappte war, dass normale "Select * From Table"
gegen zumindest 90% der enthaltenen Tabellen-Definitionen noch
Daten in ein Recordset auslieferten.

Das müsstest Du mal ausprobieren, und checken inwieweit:

Dim c As New dhRichClient3.cConnection
c.OpenDB "c:\sqlite\user.db"

Dim Tbl As cTable, B() As Byte, Rs As cRecordset
On Error Resume Next
For Each Tbl In c.DataBases(1).Tables

Set Rs = c.OpenRecordset("Select * From " & Tbl.NameInBrackets)
If Err Then
Debug.Print "Error on: "; Tbl.Name, Err.Description
Err.Clear

Else 'Table-To-Rs-Dump war erfolgreich
Debug.Print "Success on: "; Tbl.Name, Rs.RecordCount

''auskommentiertes Hinüber-Retten in eine neue, frische DB (CnnDst)
''B = Rs.Content '<- serialisieren des Rs in ein ByteArray
'CnnDst.CreateTableFromRsContent B
End If

Next Tbl

...gegen Deine DB noch funktioniert.

Wie gesagt, bei mir klappte das gegen die meisten der enthaltenen
Tabellen - also der Großteil der "reinen Daten" war noch zu retten -
nur meine selbst-definierten Indexe und Views musste ich
danach (in der neuen DB) nochmal neu anlegen.

Olaf

Ähnliche fragen