Bild in SQLite DB speichern

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Bild in SQLite DB speichern

Beitrag von Pelagio »

Hallo Leute,

ich arbeite des öfteren mit DB, allerdings meistens mit Access. Jetzt wollte ich mich etwas weiterbilden und eine SQLite DB aufbauen und hier auch gleich ein Bild mit abspeichern. Irgendwie bin ich aus dem Trott gekommen und komme einfach nicht weiter. Ich hoffe Ihr könnt helfen. :praise:
Die Daten für das Bild habe ich so ermittelt

Code: Alles auswählen

pValue = OpenFileRequester("Cover Laden", "*.jpg", "Image (*.jpg)|*.jpg", 0)
         If pValue
            If ReadFile(#mainFile, pValue)
               With Cover
                  \Size   = Lof(#mainFile)
                  \Buffer = AllocateMemory(\size)
                  ReadData   (#mainFile, \Buffer, \size)
                  CloseFile  (#mainFile)
                  CatchImage (#areaImage, \Buffer)
                  ResizeImage(#areaImage, 270, (GadgetHeight(#mainArea)-200))
                  SetGadgetState(#areaCoverPic, ImageID(#areaImage))
               EndWith
            EndIf
         EndIf
Die Erstellung der Datenbank sieht so aus:

Code: Alles auswählen

Procedure Database_Create()
   Protected pValue.s, pFile.s = #BaseFileName + ".sqlite"
   
   If CreateFile(#mainFile, pFile)
      CloseFile(#mainFile)
      If OpenDatabase(#mainDB, pFile, #NULL$, #NULL$, #PB_Database_SQLite)
         pValue = "CREATE TABLE Movie (ID INTEGER, Format TEXT(10), Anzahl NUMERIC, "
         pValue + "Titel TEXT(255), Sparte TEXT(10), Jahrgang TEXT(4), Del NUMERIC, Cover BLOB);"
         If DatabaseUpdate(#mainDB, pValue)
            MessageRequester("InfoBox", "Datenbankdatei wurde erstellt.", #MB_ICONINFORMATION)
         Else
            Debug pFile
         EndIf
         CloseDatabase(#mainDB)
      EndIf
   EndIf
EndProcedure
Die Procedure die nicht klappt, um das Bild mit abzuspeichern sieht so aus:

Code: Alles auswählen

Procedure Database_DSAdd()
   Protected pSQL.s  = "INSERT INTO [Movie] VALUES("
   Protected pFile.s = #BaseFileName + ".sqlite"
   
   If OpenDatabase(#mainDB, pFile, #NULL$, #NULL$, #PB_Database_SQLite)
      SetDatabaseBlob(#mainDB, 0, Cover\Buffer, Cover\Size)
      pSQL +       GetGadgetText(#areaID)     + ","
      pSQL + "'" + GetGadgetText(#areaFormat) + "',"
      pSQL +       GetGadgetText(#areaSize)   + ","
      pSQL + "'" + GetGadgetText(#areaTitle)  + "',"
      pSQL + "'" + GetGadgetText(#areaSparte) + "',"
      pSQL + "0, ?);"
      If Not DatabaseUpdate(#mainDB, pSQL)
         MessageRequester("InfoBox", "Daten konnten nicht gespeichert werden.", #MB_ICONERROR)
      EndIf
      CloseDatabase(#mainDB)
   EndIf
EndProcedure
Allerdings habe ich hier mein Problem: Daten konnten nicht gespeichert werden.
Wo liegt mein gedanklicher Fehler?
(Statt Cover\Buffer hatte ich es auch schon mit ?Cover\Buffer probiert.)
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS]. :allright:
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Bild in SQLite DB speichern

Beitrag von STARGÅTE »

Cover\Buffer ist schon richtig,

allerdings verstehe ich nicht, wieso du den Tabellennamen in [] schreibst ?
bei deinem Insert, das ist meiner Meinung nach n Syntaxfehler.

DatabaseError() würde hier nähere Infos geben ^^
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Re: Bild in SQLite DB speichern

Beitrag von Pelagio »

Danke STARGÅTE,

ich habe den Fehler gefunden, ganz einfach: Ich habe 8 Spaten erstellt aber nur 7 Spalten übergeben, das war der ganze Fehler, ich hatte ein Brett vorm Kopf. >_<
Den Tabellenname schreibe ich schon seid Urzeiten in [], ich weiß gar nicht mehr warum aber er hilft mir auf den ersten Blick zu erkennen wo der Tabellenname steht. Ganz früher habe ich alles (Tabellenname, Spaltenname) in [] gesetzt um diese noch besser im Blick zu haben.
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS]. :allright:
Antworten