Problem mit GetDatabaseBlob (gelöst)

Anfängerfragen zum Programmieren mit PureBasic.
MenschMarkus
Beiträge: 227
Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS

Problem mit GetDatabaseBlob (gelöst)

Beitrag von MenschMarkus »

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

Code: Alles auswählen

Structure BildDaten
   \Buffer.l
   \Size.l
EndStructure
Etikett.BildDaten
Hier mal der Code zum Schreiben des Bildes:

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.
Und jetzt wollte ich wieder wie folgt auslesen:

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
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
Zuletzt geändert von MenschMarkus am 08.10.2012 22:54, insgesamt 2-mal geändert.
Wissen schadet nur dem, der es nicht hat !
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Problem mit GetDatabaseBlob

Beitrag von ts-soft »

Ich denke mal, Du hast den Buffer nicht allokiert.
Ansonsten siehe hier: http://www.purebasic.fr/german/viewtopi ... 89#p293989

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
MenschMarkus
Beiträge: 227
Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS

Re: Problem mit GetDatabaseBlob

Beitrag von MenschMarkus »

Hallo Thomas,

in der Tat, habe gemäß Deinem Link den Speicher allokiert und schon geht's.

Danke für die schnelle Hilfe

Gruß Markus

P.S Man sollte öfter mal ne Pause einlegen. Irgendwan ist man Blind.
Wissen schadet nur dem, der es nicht hat !
Antworten