AutoIt-SQLite to HTML

  • Peter S. Taler

    Vielen Dank für Dein Skript. Und ja, das sieht so einfach aus. In der Vergangenheit bin ich jedoch oft dem Trugschluß aufgesessen, daß man so'n Problem mal schnell lösen kann. Dabei stellte sich dann heraus, daß "der Teufel im Detail" sitzt ...

    water

    Ja, Du hast Recht. mit meinem Linux-PC geht es .Es lag an der nicht vollkommenden Internet-Funktion meines Arbeits-PC. Da wird die "Erweitert" unter "Thema bearbeiten" nicht aufgerufen ...

    Noch ein Hinweis:

    Bei der "händischen" Transformation der Daten ist mir aufgefallen, daß in der Datenbank-Datei einzelne Datensätze mehrfach vorkommen, teilweise auch unvollständig. Man muß da sehr aufpassen den richtigen zu kopieren und dann kommt noch dazu, daß sie nicht in der Reihenfolge der "LfdNr" abgelegt sind. Ebenfalls müssen noch alle Umlaute etc. editiert werden ... es ist doch arbeitsintensiver, als angenommen.

    Nur für den Fall, daß das auch mal jemand so machen will/muß ...

    Grüsse aus Berlin

    PSblnkd

    3 Mal editiert, zuletzt von PSblnkd (10. November 2023 um 16:29)

  • ist mir aufgefallen, daß in der Datenbank-Datei einzelne Datensätze mehrfach vorkommen, teilweise auch unvollständig.

    Kann man mit entsprechenden Constraints verhindern, dass solche Datensätze überhaupt eingetragen werden dürfen.

    dann kommt noch dazu, daß sie nicht in der Reihenfolge der "LfdNr" abgelegt sind.

    Man kann natürlich sortiert abfragen.

    Ebenfalls müssen noch alle Umlaute etc. editiert werden ... es ist doch arbeitsintensiver, als angtenommen.

    Die Umlaute selbst muss man eigentlich nicht anpassen. Man muss beim Zugriff im Grunde nur das richtige Encoding setzen.


    Wie gesagt: Wenn du die DB zeigst, können wir dir entsprechend helfen.

  • Nach all den Diskussionen habe ich mich nun doch entschlossen die Menü-Struktur des Mediathek-Programms mit einen neuen Punkt zu erweitern:

    "HTML-Export"

    Dazu will ich den Code-Ansatz von Peter S. Thaler verwenden - vielen Dank nochmal dafür.

    Wenn es soweit ist und das Skript läuft, werde ich wieder berichten.

    Allerdings ist gleich ein Problem aufgetreten:

    Ich habe hier auf einem USB-Stick die Sicherheitskopie des Skripts, des fertigen Programms (Mediathek.exe) und der eigentlichen Datenbank. Da diese nun auf dem Mediatheks-PC laufend aktualisiert wird, ist die Datenbank-Datei auf dem Stick natürlich nicht mehr der letzte Stand.
    Wenn ich diese nun anstelle der ursprünglichen vom Stick aus mit dem Programm starten will, funktioniert das nicht, obwohl die beiden Datenbank-Datein regelrecht ausgetauscht wurden.

    Ich hoffe mich diesmal verständlich genug ausgedrückt zu haben ...

    Grüsse aus Berlin

    PSblnkd

  • Gibt es ev. eine Index Datei oder eine andere "zugehörige" Datei die dabei nicht ausgetauscht wird?

    LG

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Peter S. Taler vom 03.11.2023

    Vielen Dank für Deine Anteilnahme. Eine Zusatzdatei "Index" o.ä. gibt es nicht.

    Nachdem ich gestern vom Mediatheks-PC nochmal eine aktuelle Kopie aller 3 relevanten Datein

    - Mediathek ISS.exe,

    - Mediathek.dbf,

    - Mediathek ISS.au3

    auf den USB-Stick gezogen habe und die Lauffähigkeit sowohl vom USB-Stick dort. wie auch hier zu Hause auf dem WinXP-Rechner gegeben ist, bin ich nun doch etwas ratlos. Obwohl beide Datei-Versionen (Mediathek ISS.exe, Mediathek ISS.au3) in ihrer Größe gleich sind, gibt es nur im Datum der exe einen Unterschied, d.h. die Version auf dem Mediatheks-PC ist um 1 Std. älter als die damalige Sicherheitskopie. Auch die Quell-Datein sind 20min älter als die damalige Sicherheitskopie der exe.

    Wenn man das Skript der alten Sicherheitskopie, aber mit der neuen Datenbank-Version im SciTE über "Go" (Interpreter-Funktion) laufen läßt, kommt zwar die GUI, aber ohne Inhalt des ListView-Fensters. Erst nach Schließen der GUI steht unter dem Skript ein Hinweis auf eine Fehlermeldung:

    ! SQLite.au3 Error

    --> Function: _SQLite_Query

    --> Query: SELECT * From DbTab ORDER BY CAST(LfdNr as integer)

    --> Error: file is encrypted or is not a database

    Im Fall der neuen Sicherheitskopie (wo ich keinen Unterschied zur alten erkennen kann) funktioniert es auch mit mit der neuen Datenbank-Version - sehr merkwürdig ...

    Hier noch ein Ausschnitt des betreffenden Skript-Teils:

    Wenn ich mit meinen Untersuchungen weiter gekommen bin, werde ich wieder berichten.

    Grüsse aus Berlin

    PSblnkd

  • du startest es auf dem usb stick ?

    und deine Datenbank ist im selben Verzeichnis wie das Skript ?


    Vielleicht hat er ein Problem wenn es vom usbstick gestartet wird die db zu finden versuche mal den genauen Pfad anzugeben wie im Beispiel :

  • Also das mit dem USB Stick sehe ich auch so... Pfade können da zum Problem werden...

    Empfehlung USB NLM da bekommen Sticks immer den gleichen Laufwerksbuchstaben u.v.m. Benutze ich seit gefühlten 20 Jahren...

    USB Drive Letter Manager - USBDLM

    ----

    Bei Deiner Fehlermeldung "Error: file is encrypted or is not a databasenot an Integer".... habe ich irgendwie ein déjà vu.. aber ich bekomme es nicht auf den Punkt. Ich würde steif und fest behaupten es war etwas mit Zeichensätzen oder/und Umlauten - prüf das doch mal. Ach ja da gäbe es noch die Pfade zu Deinen Dateien. Stelle mal folgendes sicher: Keine Leerzeichen, keine Umlaute im Pfad und keine "Pfadnamensteile" länger als 8 Zeichen. Im Zweifel ganz kurze Pfade wie D:\Test. Bitte nicht lachen, das ist ernstgemeint - hatte ich erst vor kurzem.

    Für derartige Vergleiche / Fehlersuchen sollte mann immer sorge tragen, dass identische Pfade vorliegen!

    LG

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

    Einmal editiert, zuletzt von Peter S. Taler (11. November 2023 um 08:06)

  • @MojoeB vom Freitag, 16:58

    Danke für Deinen Hinweis nebst Code, Das habe ich dann auch gleich mal versucht - leider vergeblich. Auch damit funktioniert es nicht.

    @Peter S. Taler vom Freitag, 18:14Danke auch für Deine Hinweise.

    Die Umbenennung von Mediathek ISS.exe -> Mediathek_ISS.exe war erfolgreich. Das nützt mir aber nicht wirklich. weil bei der nicht lauffähigen Version der Quelldatei Mediathek ISS.au3 .> Mediathek_ISS.au3 kein Erfolg zu sehen war.

    Ich habe mir nochmal die Fehlermeldung genau angesehen. Da steht ja nicht, daß die Datenbank nicht gefunden wurde, sondern daß es ein Problem bei der Funktion _SQLite_Query( ... ) in der include-Datei SQLite.au3 gegeben hat - nur welches? -

    In den Quellcode von SQLite.au3 reingeschaut - aber so richtig schlau werde ich da adhoc auch nicht.

    In der AutoIt-Hilfe steht zur Parameterangabe für _SQLite_Query( ... ) , daß man dort eine "-1" für den ersten Parameter einsetzen soll, wenn es sich um eine bereits geöffnete Datenbank handelt, was ja hier der Fall ist (mit _SQLite_Open( ... ). Auch das habe ich versucht - erfolglos.

    Mit WinHex habe ich nun die genaue Dateigröße ermittelt - in beiden Fällen genau 22982 Bytes, Auch ein Vergleich ergab: Identisch, allerdings mit einer Merkwürdigkeit:

    Während in der lauffähigen Version das Datum der Erzeugung und letzter Änderung plausible sind (09.11.2014 und 15.04.2015) ist das bei der anderen nicht der Fall: - Erzeugung 4.11.2023 und letzte Änderung 15.04.2015 ! -

    In einem weiteren Versuch (entspr. o.g. Fehlermeldung) habe ich den Rückgabewert von _SQLite_Query( ... ) ermittelt -> 26 ! - Diesen finde ich nicht in den $SQLITE_*Konstanten, sollte nach AutoIt-Hilfe aber so sein ...

    So, das ist z.Zt. der Stand.

    Vielleicht habt Ihr noch ein paar Ideen ...

    Grüsse aus Berlin

    PSblnkd

  • Ich nochmal:

    AutoIt
        $Db = _SQLite_Open("Mediathek.dbf", $SQLITE_OPEN_READWRITE + $SQLITE_OPEN_CREATE)         ; versuche die Mediathek-Datenbank zu öffnen

    Diese Anweisung wird nur äußerst selten einen Fehler zurückgeben, weil $SQLITE_OPEN_CREATE eine neue leere Datei erstellt, falls er für den Dateinamen keine findet.

  • Schau mal nach ob ein leerer Datensatz in der db steht. Ev ein "angefresener" Datensatz. Ab un an bringt das Ärger. Hast Du die Datenbank schon mal "gepackt", verdichtet oder einfach nur neu abgespeichert? Auch ein Export/Import kann hilfreich sein. Danach mit der "neuen" Datenbank weiterarbeiten. Die "alte" als Daten Si behalten.

    LG

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Moin,

    es gibt sicher unendlich viele Möglichkeiten, warum das nicht klappt. Der Fehler 26 sollte aber bereits bei _SQLite_Open() kommen, wenn die Datei korrupt ist. Ich vermute eher, dass der hier gezeigte Code nicht dem Code entspricht, der die Fehlermeldung erzeugt.

  • Hallo!


    So zu was konstruktiven.

    Da du allen helfenden nicht gerade mit Informationen, bzw. mit Beispielen überhäufst, habe ich mal aus deinem Bild von deiner Homepage, die Datenbank nachgestellt (eine zum Testen erstellt).

    Damit das Beispiel funktioniert braucht man die sqlite3.exe im Scriptordner und ein paar MP3 files in einem Ordner. Als Alternative man kann auch den Filter anpassen von _FileListToArray.

    Den Ordner in Zeile 12 muss man ohnehin anpassen, damit es funktioniert.
    Wenn das Array leer ist wirds einen Fehler geben.

    In der _Create_Databasefile Funktion verwende ich oft den unique index um doppelte Einträge in die Datenbank zu verhindern.

    In diesem Beispiel habe ich ihn auf "MEDIENART" und "TITEL" gelegt. Das muss man sich halt überlegen.

    Wenn es vorkommt, dass man ein Video (MEDIENART) hat mit dem gleichen Namen (TITEL), dann könnte man diesen nicht mehr in der Datenbank speichern.

    Ist dies der Fall, dann würde ich den unique index um den Speicherort erweitern (auf dieses Beispiel bezogen).

    Code
    _Create_Databasefile($sDatabaseFileName, '"LFDNR" INT, "MEDIENART" TEXT, "TITEL" TEXT, "INHALT" TEXT, "LAUFZEIT_UMFANG" TEXT, "SPEICHERORDNER" TEXT', "", '"MEDIENART", "TITEL", "SPEICHERORDNER"')


    If not :?: then ?( else :thumbup:

    Einmal editiert, zuletzt von Oscar (18. November 2023 um 15:08)

  • Aber, aber Leute - warum muß das immer gleich in's Persönliche ausarten!
    Warum ich immer noch WinXP habe - für wichtige sicherheitsrelevante Aufagen über's Internet auch noch einen Linux-PC - will ich an dieser Stelle nicht erläutern, da würde den Rahmen hier sprengen und gehört auch nicht zum Thema.

    Es gibt aber Wichtigeres - ich habe die Ursache für das Nichtfunktionieren der Mediatheks-Datenbank gefunden!

    In meinem Entwicklungsbericht steht nun Folgendes (ich schreibe immer alles, jeden Schritt auf!);

    "Noch mal ein Test mit der Original Mediathek ISS.au3 vom Ordner Mediathek_aktuell:

    • lauffähig mit der Datenbank Mediathek.dbf vom 09.04.2015 (111kB),
    • lauffähig mit der Datenbank Mediathek.dbf vom 19.07.2023 (195kB),
    • nicht lauffähig mit der Datenbank Mediathek.dbf vom 16.09.2023 (195kB)!

    Es scheint also wirklich mit der neuesten Version der Datenbank ein Problem zu geben und nicht mit dem Programm. Obwohl beide Datenbanken augenscheinlich die gleiche Größe haben, kann es im Detail Unterschiede geben.

    Beide Versionen wurden deshalb auch mit WinHex untersucht.

    Beide Dateien haben gleiche Byte-Anzahl: 199680, aber in der Version Mediathek.dbf vom 16.09.2023 sind in den ersten 8 Byte:

    - 53 7B 09 10 06 00 00 00 = S{ ,

    hingegen in der Version Mediathek.dbf vom 19.07.2023:

    - 53 51 4C 69 74 65 20 66 = SQLite F

    Offensichtlich ist die Kennung SQLite Format 3 beschädigt worden.

    Es wird deshalb mit der Version Mediathek.dbf vom 19.07.2023 weitergearbeitet.

    Erfolg!!

    Es lag wirklich an der “korrupten“ Datenbank-Version. Mit den beiden lauffähigen Versionen (s.o.) ist es auch egal, an welchem Ort sich die beiden Dateien – Mediathek_ISS.exe, oder Mediathek ISS.exe , oder nur Mediathek.exe und Mediathek.dbf befinden – nur müssen sie beide im selben Ordner sein."

    Warum es zu dieser Datei-Beschädigung bei der letzten Datenbank-Version gekommen ist, kann ich nur vermuten. Beim Einsetzen des USB-Sticks gab's Kontaktprobleme ...

    Damit ist das Problem gelöst - na ja, noch nicht die Eingliederungen des neuen Menüpunktes "Datenbank-Export HTML" und dessen Funktionalität. Aber das werde ich auch noch lösen - dank den wertvollen Code-Ansätzen von Peter S. Taler und concara. Vielen dank nochmal dafür!

    Grüsse aus Berlin

    PSblnkd