Eu uso assim no Mysql.
Espero ter ajudado.
Criar a tabela:
ExecutaMySQL( "CREATE TABLE `pdf_ficheiros` ( "+;
" `ID` SMALLINT(6) NOT NULL AUTO_INCREMENT, "+;
" `NOME` VARCHAR(50) NOT NULL, "+;
" `FICHEIRO` MEDIUMBLOB NOT NULL, "+;
" UNIQUE INDEX `ID` (`ID`) "+;
") "+;
"COLLATE='utf8_general_ci' "+;
"ENGINE=InnoDB "+;
";" )
Gravar o ficheiro na base de dados:
PROCEDURE GRAVAR_BLOB( XCAMINHO, XFILE )
LOCAL h1, tamanho, h4
h1 := FOpen(XCAMINHO+XFILE) // abre o arquivo de imagem para leitura
tamanho := FSeek(h1, 0, 2) // move o ponteiro pelo arquivo até o fim para pegar o tamanho
FSeek(h1, 0, 0) // volta para o inÃcio
h4 := Space(tamanho) // declara variável para receber o conteúdo do arquivo
FRead(h1, @h4, tamanho) // faz a leitura do conteúdo do arquivo jogando-a na variável de memória
FClose(h1) // fecha o arquivo
h4 := hb_base64Encode(h4, tamanho) // converte o conteúdo do arquivo em base64
ExecutaMySQL( "INSERT INTO pdf_ficheiros(NOME,FICHEIRO) "+;
"SELECT '"+XFILE+"','"+h4+"'" )
RETURN
Gravar o ficheiro no disco:
PROCEDURE LER_BLOB(XID)
oRsxB := ExecutaMySQL( "SELECT NOME,FICHEIRO "+;
"FROM pdf_ficheiros "+;
"WHERE ID="+ALLSTR(XID) )
XiJPG := oRsxB:Fields( 1 ):Value
iJPG := Array( 1, 1 )
iJPG[1, 1] := XiJPG
sJPG := hb_base64Decode( iJPG[1, 1] ) // decodifica o conteúdo do campo blob (iJPG[1,1] é o resultado da sentença SQL)
hJPG := FCreate("C:\TEMP\"+oRsxB:Fields( 0 ):Value, 0) // cria um arquivo
oRsxB:Close()
FWrite(hJPG, sJPG) // carrega o conteúdo do campo no arquivo
FClose(hJPG)
RETURN