Inserting images as BLOBs - any way to avoid using base64encode?

Devin Asay devin_asay at byu.edu
Mon Aug 6 20:04:55 EDT 2007


On Aug 6, 2007, at 5:38 PM, Terry Judd wrote:

> Hi Jan - I'm already doing something along these lines except with the
> base64encode/decode routines thrown in. Getting the image into the  
> database
> without encoding seems? to work ok but when I pull it out I can  
> only get
> hold of the first few characters, typically something like 'âPNG'  
> and a
> couple of returns.

Terry,

I just had a very similar problem that I finally solved after much  
hair pulling. Maybe what I discovered will be of use to you.

I was trying to download audio files (MP3) from a database, and used  
the approach that Jan outlined. But oddly enough, one of my  
revDatabaseColumnNamed function calls would always fail, while  
another, almost identical one, worked. I would get data very similar  
to what you are describing--four characters and nothing else. I  
finally discovered that the function fails consistently, *unless* you  
access the contents of the variable later. So I was doing something  
like this:
(watch for line wraps)

##
put "SELECT audio1,audio2 FROM my_db" into tQuery
put revDatabaseQueryBLOB(gConnection, tQuery) into tCursor
if tCursor is not a number then
   answer error tCursor
else
   put revDatabaseColumnNamed(tCursor,"audio1","tBinData1")
   put revDatabaseColumnNamed(tCursor,"audio2","tBinData2")

   ## then, a few lines later...

   put tBinData1 into ("binfile:" & specialFolderPath("Temporary") &  
"/myfile1.mp3"
   put tAnotherVariable into ("binfile:" & specialFolderPath 
("Temporary") & "/myfile2.mp3"
   revCloseCursor tCursor
end if
##

In other words, I inadvertently was using the incorrect variable when  
trying to save out the audio2 data. It was only after I noticed that  
and changed tAnotherVariable to tBinData2 that the  
revDatabaseColumnNamed function began to work properly. The lesson I  
took from this--and maybe it's the wrong one--is that when using  
revDatabaseColumnNamed to retrieve binary data from a query cursor,  
the variable you're loading it into *must* be accessed later in  
another statement, otherwise the download fails. It's almost like the  
variable doesn't become a valid variable unless it's accessed later.

HTH

Devin


Devin Asay
Humanities Technology and Research Support Center
Brigham Young University




More information about the use-livecode mailing list