Problem mit GetDatabaseBlob (gelöst)
Verfasst: 08.10.2012 22:34
Hallo zusammen,
zu meinem Problem, Ich kann zwar problemlos ein Bild in die SQLite DB schreiben, dieses aber nicht mehr auslesen. Zwar zeigt mir der Returnwert von GetDatabaseBlob() eine 1 an, aber Buffer und Size sind 0.
Der Vollständigkeit halber:
PureBasic Version 4.6
Hier mal der Code zum Schreiben des Bildes:
Und jetzt wollte ich wieder wie folgt auslesen:
Beim prüfen der intTMP variablen gibt diese eine 1 aus, also wurde der BLOB erfolgreich erkannt (geladen?)
Etikett\Buffer = 0
Etikett\Size = 0 (wohl doch nicht erfolgreich geladen !?)
Im Moment sehe ich nicht wo ich etwas falsch gemacht haben könnte.
Hat jemand eine Idee ?
Vielen Dank schon einmal für hilfreiche Kommentare
zu meinem Problem, Ich kann zwar problemlos ein Bild in die SQLite DB schreiben, dieses aber nicht mehr auslesen. Zwar zeigt mir der Returnwert von GetDatabaseBlob() eine 1 an, aber Buffer und Size sind 0.
Der Vollständigkeit halber:
PureBasic Version 4.6
Code: Alles auswählen
Structure BildDaten
\Buffer.l
\Size.l
EndStructure
Etikett.BildDaten
Code: Alles auswählen
strTMP.s = OpenFileRequester("Lade Etikett 1","*.jpg","Bild Dateien|*.jpg;*.png;*.tif",0) ;Bild Datei laden
ReadFile(#Etikett,strTMP.s) ; Bildinformation lesen
Etikett\Size = Lof(#Etikett) ; Bildgröße ermitteln
Etikett\Buffer = AllocateMemory(Etikett\Size) ; Speicher reservieren
ReadData(#Etikett,Etikett\Buffer,Etikett\Size) ; Daten in den Speicher schreiben
CloseFile(#Etikett) ; Bild Datei schließen
CatchImage(#EtikettImage,Etikett\Buffer) ; Bild vom Speicher lesen
IWidth = ImageWidth(#EtikettImage) ; Bildbreite ermitteln
IHeight = ImageHeight(#EtikettImage) ; Bildhöhe ermitteln
Ratio.f = IWidth/IHeight ; Seitenverhältnis ermitteln
ResizeImage(#EtikettImage,295,295/Ratio) ; Bild mit korrektem Seitenverältnis darstellen
SetGadgetState(#Image_Etikett,ImageID(#EtikettImage)) ; Bild in ImageGadget schreiben
SetDatabaseBlob(#Database,0,Etikett\Buffer,Etikett\Size) ; Blob Information schreiben
DatabaseQuery(#Database,"UPDATE Produkte SET Etikett1=? WHERE ID=1") ; Blob in Datenbank schreiben
FreeMemory(Etikett\Buffer) ; Speicher wieder freigeben.
Code: Alles auswählen
DatabaseQuery(#Database,"SELECT * FROM Produkte WHERE ProdID=1") ;Richtigen Datensatz herausfischen
NextDatabaseRow(#Database)
With Etikett ; etwas für Schreibfaule
intTMP = GetDatabaseBlob(#Database,39,\Buffer,\Size) ; Blob aus DB auslesen
If intTMP > 0 And \Buffer > 0 And \Size > 0 ; Nur wenn erfolgreich gelesen weiter
CatchImage(#EtikettImage,\Buffer) ; Bild aus Speicher lesen
IWidth = ImageWidth(#EtikettImage) ; Bildbreite ermitteln
IHeight = ImageHeight(#EtikettImage) ; Bildhöhe ermitteln
Ratio.f = IWidth/IHeight ; Seitenverhältnis ermitteln
ResizeImage(#EtikettImage,295,295/Ratio) ; Bild im korrekten Seitenverhältnis darstellen
SetGadgetState(#Image_Etikett,ImageID(#EtikettImage)) ; Bild ins Image Gadget schreiben
FreeMemory(\Buffer) ; Speicher wieder freigeben
EndIf
EndWith
Etikett\Buffer = 0
Etikett\Size = 0 (wohl doch nicht erfolgreich geladen !?)
Im Moment sehe ich nicht wo ich etwas falsch gemacht haben könnte.
Hat jemand eine Idee ?
Vielen Dank schon einmal für hilfreiche Kommentare