SQL-Datenbank Bilder verwalten

Startseite Foren Deutsches LiveCode-Forum SQL-Datenbank Bilder verwalten

Ansicht von 4 Antwort-Themen
  • Autor
    Beiträge
    • #47969
      Herby
      Teilnehmer

        Hallo,

        ich möchte Bilder (.png) in einer SQl-Datenbank speichern und laden. Hierfür habe ich mir eine einfache SQL-Datenbank angelegt mit den Feldern Tag und Monat (Integer), Text (Text) und Bild( Blob).
        Ich habe es geschafft einen SQL-Datensatz zu erstellen mit:

        put revOpenDatabase(„sqlite“,dpfd,,,,) into xsql
        put „INSERT INTO Kalender(Tag,Monat,VText,RText,Bild) VALUES (:1, :2, :3, :4, :5)“ into sql
        revExecuteSQL xsql,sql,“xtag“,“xmonat“,“xvtext“,“xrtext“,“tImageData“
        revCloseDatabase xsql

        Anscheinend wurde das Bild (oder irgendetwas) auch im Feld Bild gespeichert, was ich mit meinem SQL-Browser feststellen konnte.
        Den Text kann ich laden und anzeigen. Das Bildchen will einfach nicht geladen werden.

        put revOpenDatabase(sqlite,dpfd,,,,) into dbid
        put „SELECT Bild from Kalender WHERE Tag = 14“ into xsel
        put revQueryDatabase (dbid,xsel) into tImageData
        put revDatabaseColumnNamed(tImageData, „Bild“, theImage)
        set the text of image „iwse“ of card WSE to theImage
        revCloseDatabase dbid

        Schon einmal Danke im Voraus
        Herby

      • #47977
        Klaus Major
        Administrator

          Ich denke „imagedata“ und „text of image…“ sind zwei verschiedene Paar Schuh!
          Und es sieht so aus, als würdest Du „imagedata“ eines Bildes speichern, aber später
          „the text of image …“ setzen.

          Probiere es mal durchgängig mit einer Variante.
          Hinweis: Wenn Du „imagedata“ verwendest, MÜSSEN beide Bilder (das gespeicherte und das
          später wieder mit den Daten angezeigte Bild) DIE SELBEN Abmessungen haben in Breite und Höhe,
          oder es funktioniert nicht oder gibt komische Ergebnisse.

          Lies Dir auch mal den Eintrag zu „revQueryDatabase“ im Dictionary durch, den Teil über „blob“.
          Eventuell ist das auch von Bedeutung beim speichern der Bilddaten in der DB.

        • #47978
          Herby
          Teilnehmer

            Danke Klaus,

            eigentlich brauche ich nur ca.100 Bilder in einer Android-App und ich habe noch nicht den richtigen Plan hierfür. Mit Texten in einer SQL-Datei habe ich schon einmal programmiert. Ich habe nun gesehen, dass bei den StandaloneApplication Settings (Copy Files) auch ein Verzeichnis auswählbar ist. Wenn die Bilder damit in die App kommen, dann wäre das sogar einfacher als BLOB-Dateien zu speichern.
            Könnte dies funktionieren und wie sieht dies im Programm aus ?

            put specialFolderPath(„Resources“) & „/daten.db“ into xpfd
            put specialFolderPath(„Documents“) & „/daten.db“ into dpfd
            put url(„binfile:“ & xpfd) into url(„binfile:“ & dpfd) —> muss das binfile heißen ?

            Damit ist die SQL-Datei mit den Texten in der App und und im Register ‚Copy Files‘ wähle ich das Verzeichnis der Bilder aus. Genügt dies vielleicht ? Probiere ich aus, aber vielleicht übersehe ich etwas.

            Beste Grüße aus Bergkirchen
            Herby

          • #47979
            Klaus Major
            Administrator

              Wenn die Bilder nciht bearbeit werden, reicht es, alle Bilder in ein Verzeichnis zu packen und im Stack den relativen Pfad zur Anzeige verwenden.

              „relativ“ heisst hier, relativ zum Stack:
              Angenommen, Du hast alle Bilder im Ornder „bilder“ im Ordner mit dem Stack auf Deiner Platte
              Dann kannst Du bei „Filename“ der Bilder im Stack/IDE Folgendes schreiben: bilder/bild1.jpg
              Also ohne den kompletten Pfad!
              Den Ordner fügst Du über „Copy files“ der Runtime hinzu.

              In der Runtime wird der relative Pfad automatisch in specialfolderpath(„resources“) übersetzt,
              so daß alle Bilder auch so korrekt angezeigt werden.

              Bei Datenbanken ist das ein andere Sache, schön das Öffnen wird als „write“ angesehen und das
              funktioniert nicht in specialfolderpath(„resources“)

              Dafür musst Du die DB zuerst in den Dokumenten Ornder kopieren und dort öffnen und speichern.
              Daher musst Du sowas schreiben:

              on openstack
              
                ## Die Namen der spezialordner bitte KLEINschreiben, da Android und auch iOS
                ## CASE SENSITIVE Dateisysteme sind!
                put specialFolderPath("resources") & "/daten.db" into xpfd
                put specialFolderPath("documents“) & "/daten.db" into dpfd
              
                ## Erst checken, ob wir das nicht schon getan haben!
              
                ## Allererster App-Start:
                if there is NO file dpfd then
                 put url("binfile:" & xpfd) into url("binfile:" & dpfd)
                 ## Ja, alles was kein reiner TEXT ist,. muss als BINFILE behandelt werden!
                end if
              
                ## Weitere Anweisungen...
                ## Jetzt kann die DB im Dokumenten Ordner geöffnet/benutzt werden...
              end openstack

              Gruß
              Klaus

            • #47980
              Herby
              Teilnehmer

                Lieber Klaus,

                es hat funktioniert.

                Vielen Dank
                Herby

            Ansicht von 4 Antwort-Themen
            • Du musst angemeldet sein, um auf dieses Thema antworten zu können.