[Gambas-user] Retrieving jpegs from a MySQL database

Lee McPherson leemcpherson at ...626...
Thu Apr 3 01:13:28 CEST 2008


Benoit Minisini wrote:
> On mercredi 2 avril 2008, Lee McPherson wrote:
>   
>> I've been looking at the examples supplied with Gambas and I've tried to
>> copy some of the code from the PictureDatabase example.  I know that my
>> database is setup correctly and that the field names are correct.  I
>> have some jpegs stored as BLOBs and they display correctly using the
>> MySQL Query browser.
>>
>> However, this code will give me the error "Not an object" and I'm at a
>> loss as to what I'm doing wrong.  Below is some of my code.  Basically I
>> have two tables so far.  One contains all the ID3v2 info from an MP3
>> with album names represented by numbers.  These numbers are referenced
>> to the album name and album cover art in jpeg format as a BLOB in a
>> second table.  I click on the file I want in my gridview table and it is
>> supposed to display the album cover in a PictureBox next to it.  The
>> selection works and I can get it to reference the actual album's name,
>> but it stops at the tempPicture = $result["Pic"].Data line.
>>
>> PUBLIC SUB GridView1_Change()
>>   DIM sQuery AS String
>>   DIM curRow AS Integer
>>   DIM tempFile AS String
>>   DIM tempPicture AS String
>>
>>   tempFile = Temp() & ".jpg"
>>   IF gridView1.Row <> -1
>>     modDb.Connect()
>>     curRow = gridView1.Row
>>     DEBUG curRow
>>     DEBUG gridView1[curRow, 4].Text
>>     $result = modDb.$Con.Exec("SELECT * FROM Albums WHERE ID = '" &
>> gridView1[curRow, 4].Text & "'")
>>     
>
> Don't do that, but: 
>
> $result = modDb.$Con.Exec("SELECT * FROM Albums WHERE ID = &1", 
> gridView[curRow, 4].Text)
>
>   
>>     DEBUG $result["AlbumName"]
>>     tempPicture = $result["Pic"].Data
>>     IF tempPicture THEN
>>       File.Save(tempf, tempPicture)
>>       PictureBox1.Picture = Picture.Load(tempF)
>>       PictureBox1.Resize(PictureBox1.Picture.Width,
>> PictureBox1.Picture.Height)
>>     ELSE
>>        PictureBox1.Picture = NULL
>>     END IF
>>     IF Exist(tempFile) THEN KILL tempFile
>> '      PictureBox1.picture = $result!Pic
>>   ENDIF
>>
>> END
>>
>>     
>
> Did you create the database with the database manager? Are you sure that 
> $result["pic"] returns a blob object? You know that with: 
>
> PRINT $result.Fields["pic"].Type
>
>   
I added that line of code and it returned type 9... which seems like 
it's reading it as a type String (or text for MySQL).  The db.blob 
constant is -2.  I'm not sure what to do about this, as that field (Pic) 
in the table Albums is configured to be of type BLOB in the MySQL 
administrator app. 

Any clues?  I'm far from proficient using MySQL but it seems like 
everything is correct.

-Lee




More information about the User mailing list