Newsgroup: it.comp.lang.vo-clipper
Titolo: Immagini nei blob

Sto utilizzando MySQl ... con enorme soddisfazione.
Ora però mi ritrovo al solito problema ...la necessità di salvare immagini
nei blob e poi leggerle per la visualizzazione nelle window.
Sto cercando di documentarmi ...ma per ora nulla di un vero aiuto.
Chiunque possa aiutarmi con delle dritte o dei semplici esempi per
indirizzarmi nella strada giusta.
Grazie anticipatamente

 ha scritto nel messaggio
news:2y0ac.119088$z23.5...@news3.tin.it...

Il campo Blob conterrà di fatto una stringa che corrisponde al file immagine
o altro.
Se l'iimagine è sulla stessa macchina del server puoi usare la funzione
LOAD_FILE(file_name) se viene caricata da un client devi prima leggere il
file in una stringa, es con FRead() e poi trattarla per modificare i
caratteri di escape (vedi manule di mysql 6.1.1.1) se usi l'accesso diretto
e non gli ODBC utilizza la funzione Mysql_escape_string().
Quindi un normale fieldput(#Campoblob,stringa_lavorata).
Per la lettura: stringa := fieldget()
poi o scrivi una stringa su file e carichi il file in un gestore di
immagini, o utilizzi DibcreatefromPtr() e poi DIBStretchDraw() (la seconda è
la strada migliore più pulita e veloce).
Nella nostra DLL (DevoXMysql) abbiamo dovuto lavorare un pò per gestire
tutto questo.
Spero di esserti stato di aiuto.
Danilo Giuliani
www.softdevo.com
in...@softdevo.com
sup...@softdevo.com

Io, grazie naturalmente alla collaborazione di Danilo, ho risolto il
proiblema in altro modo. Ho una applicazione che mi peremtte di
scannerizzare dei documenti. Ho due tabelle La prima con una serie di campi
che identificano il documento (numero, data ecc...) ed una seconda, legata
dal numero doc., che contiene un campo blob con l'immagine della pagina
scansita. La scansione produce un file .Tif  (sempre con lo stesso nome)
che, tramite una funzione, viene memorizzato nel campo blob. Quando
viceversa devo vedere un'immagine dal campo blob, ho una funzione che mi
estrae il contenuto dal campo blob e ricrea un file .tif (sempre con lo
stesso nome) il quale viene visualizzato. Sembra farraginoso ma è molto
semplice e velocissimo (ormai lo stanno verificando su 12.000 record e non
fa una grinza).
                                    Prende il contenuto dal blob
FUNCTION GetBlob(cCampo,cFile)
 LOCAL cBuffer AS STRING
 LOCAL ptrHandle AS PTR
 LOCAL nLen AS DWORD
 nLen := Len(cCampo)
 ptrHandle := FCreate(cFile, FC_NORMAL)
 IF FError() != 0
  RETURN ""
 ELSE
   cBuffer := cCampo
   FWrite(ptrHandle, cBuffer, nLen)
   FClose(ptrHandle)
 ENDIF
RETURN AddSlash(cBuffer)   // questa è una funzione delle librerie di
Giuliani
esempio :  GetBlob(SELF:Server:FIELDGET(#immagine),WorkDir()+"OutProt.tif")
------------------------------------------------------------------
FUNCTION UpdateBlob(cFile)
 LOCAL cBuffer AS STRING
 LOCAL ptrHandle AS PTR
 LOCAL dwBytes AS FLOAT
 LOCAL nLen AS DWORD
 ptrHandle := FOpen2(cFile, FO_READ)
 IF FError() != 0
  RETURN ""
 ELSE
  FFirst(cFile, FC_NORMAL)
  nLen := FSize() //   1048576 N.B. :Ho voluto mettere un limite ai campi,
ma
      file://non è obbligatorio //
  IF nLen > 1048576
   FClose(ptrHandle)
   RETURN " "
  ENDIF
  cBuffer := Space(nLen)
  dwBytes := FRead(ptrHandle, @cBuffer, nLen)
  FClose(ptrHandle)
ENDIF
RETURN AddSlash(cBuffer)   // funzione delle librerie di Giuliani
esempio :   SELF::Server:FIELDPUT(#IMMAGINE,
UpdateBlob(WorkDir()+"InProt.tif"))

 ha scritto nel messaggio
news:_u9ac.119993$z23.5...@news3.tin.it...
