[Gambas-user] Retrieving jpegs from a MySQL database

Benoit Minisini gambas at ...1...
Thu Apr 3 01:21:41 CEST 2008


On jeudi 3 avril 2008, Lee McPherson wrote:
> 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
>

You must use the LONGBLOB datatype if you want Gambas to see your field as a 
blob. For an explanation, see: http://gambasdoc.org/help/doc/db-type-mapping

Regards,

-- 
Benoit Minisini




More information about the User mailing list