Newsgroup: it.comp.lang.vo-clipper
Titolo: Img in campo blob mysql

Croce e delizia di mysql.....i blob!
Mi succede una cosa strana, se inserisco in un campo blob un immagine jpg o
bmp mi vengono salvato solo 64k e non l'immagine completa, come mai? Ho dato
un occhiata alle variabili ma sembra che sia tutto a posto.
Per inserirla uso questo codice:
LOCAL cBuffer AS STRING
LOCAL ptrHandle AS PTR
LOCAL dwBytes AS FLOAT
LOCAL nLen AS DWORD
LOCAL cFile AS STRING
LOCAL cQuery AS STRING
cFile :=  "c:\temp\prova.jpg"
ptrHandle := FOpen2(cFile, FO_READ)
 FFirst(PSZ(_CAST,  cFile), FC_NORMAL)
 nLen := FSize()
 cBuffer := Space(nLen)
 dwBytes := FRead(ptrHandle, @cBuffer, nLen)
 FClose(ptrHandle)
cQuery := "insert into scansioni set " + ;
       "immagine = " + Apici(cBuffer)
myQuery(cQuery)
Dove la funzione Apici() richiama mysql_realescape_string() .
Oltre a ciò ancora non sono riuscito ad estrarre il contenuto del blob se
non con un escamotage usando select immagine into dumpfile  ma non è che sia
molto elegante........
Qualche dritta?
Ciao a tutti.
                                                        Francesco Leo

 ha scritto nel messaggio 
news:asZ%d.686140$b5.31...@news3.tin.it...


In effetti il problema delle dimensioni del file era legato al campo che era 
solo BLOB ed era troppo piccolo. Grazie per il suggerimento, sei un  grande, 
come sempre. In effetti ricordo la tua applicazione vista alla riunione e 
andava molto bene.
Resta sempre il problema dell'estrazione dell'immagine dal campo.
Ho fatto cosě:
LOCAL cRes AS STRING
LOCAL ptrImage AS PTR
LOCAL nLen AS DWORD
cRes := SELF:leggi_img() //leggo il valore del campo blob
nLen := Len(cRes)
ptrImage := MemAlloc(nLen)
MemCopy(ptrImage, String2Psz(cRes), nLen)
DIBCreateFromPTR(ptrImage, PtrLen(ptrImage))
Se non filtro la stringa cRes mi viene dato un errore: decoder error: JPG 
datastream contains no image. Se invece pulisco la stringa mi dice che il 
tipo di immagine č sconosciuta!
Ho sbagliato qualcosa? Sicuramente si, ma cosa?
Grazie ancora.
                                                        Francesco Leo 


***************************************************
Poi ricorda
****************************************************
  MemFree(ptrImage)
*****************************************************


  MemFree(ptrImage)
Certo, non l'ho messo per la fretta di vedere se funzionava,grazie. 

Prova con questo codice:
Danilo Giuliani
******************************************************************************
FUNCTION ShowImage(oServer)
LOCAL cImage AS USUAL
LOCAL oWin AS WFoto
cImage  :=  oServer:FIELDGET(nCampoImage)
IF IsString(cImage)
 oWin := WFoto{SysObject(),NIL,NIL,cImage}
 oWin:Show()
ENDIF
**********************************************************************
CLASS WFoto INHERIT DATAWINDOW
 PROTECT oDCMedia AS IMGFIXEDTEXT
// Un controllo FixedText che eredita da ImgFixedText //
  //{{%UC%}} USER CODE STARTS HERE (do NOT remove this line)
  EXPORT cImage AS STRING
**************************************************************
METHOD PreInit(oWindow,iCtlID,oServer,uExtra) CLASS WFoto
 //NOTA BENE //
 InitializeCAPaint()
//////////////////////////////////////////////
 SELF:cImage := uExtra
 RETURN NIL
*****************************************************************
METHOD Expose(oExposeEvent) CLASS WFoto
LOCAL oBoundingBox AS BoundingBox
oBoundingBox := IIf(oExposeEvent == NULL_OBJECT, NULL_OBJECT, 
oExposeEvent:ExposedArea)
SUPER:Expose(oExposeEvent)
SELF:oDCmedia:Expose(oExposeEvent)
RETURN NIL
******************************************************************
METHOD Resize(oResizeEvent) CLASS WFoto
IF SELF:IsVisible()
 SELF:oDCMedia:RedrawPict()
ENDIF
SUPER:Resize(oResizeEvent)
//Put your changes here
RETURN NIL
*******************************************************************
METHOD Init(oOwner,nID,oPoint,oDimension,cText) CLASS ImgFixedText
SUPER:Init(oOwner,nID,oPoint,oDimension,cText)
SELF:Background := Brush{BRUSHCLEAR}
RETURN SELF
*****************************************************************
METHOD DibDestroy( ) CLASS ImgFixedText
IF ( SELF:pDib != NULL_PTR )
 DIBDelete( SELF:pDib )
 SELF:pDIB := NULL_PTR
ENDIF
RETURN NIL
********************************************************************
CLASS ImgFixedText INHERIT FixedText
PROTECT pDib AS PTR
PROTECT ImgX, ImgY, ImgW, ImgH AS LONG
***********************************************************
METHOD ShowPreview(cImage) CLASS ImgFixedText
LOCAL hDlg   AS PTR
IF !SELF:SetPreviewImg(cImage)
 RETURN NIL
ENDIF
hDlg := SELF:Handle()
 IF ( SELF:pDib != NULL_PTR )
      DIBShow (SELF:pDIB, hDlg)
  ENDIF
RETURN NIL
*********************************************************
METHOD RedrawPict() CLASS ImgFixedText
LOCAL hDlg   AS PTR
IF ( SELF:pDib != NULL_PTR )
  hDlg := SELF:Handle()
     DIBShow (SELF:pDIB, hDlg)
 ENDIF
RETURN NIL
********************************************************************************
METHOD Destroy( oEvent, hDlg ) CLASS ImgFixedText
SELF:DibDestroy( )
RETURN SUPER:Destroy()
***********************************************************
METHOD Expose(oE) CLASS ImgFixedText
SELF:ShowPreview(SELF:Owner:cImage)
RETURN SUPER:Expose(oE)
*************************************************************************
ASSIGN TextValue(uVal) CLASS ImgFixedText
RETURN TRUE
********************************************************************************
METHOD SetPreviewImg(cString) CLASS ImgFixedText
LOCAL MemPtr AS PTR
 IF !Empty(cString)
  MemPtr := MemAlloc(SLen( cString ))
  MemCopyString( MemPtr, cString, SLen( cString ) )
  SELF:pDib := DIBCreateFromPTR(MemPtr, SLen(cString))
  MemFree(MemPtr)
 ENDIF
RETURN TRUE
**********************************************************************************************************

Il tuo codice mi dava errore, non ho approfondito perchč ho risolto cosě:
LOCAL sImage AS USUAL
LOCAL pBitMap AS PTR
LOCAL ptrImageString AS PTR
sImage := SELF:leggi_img() // leggo il campo blob
ptrImageString := PrepareImage(sImage) //converto la stringa in ptr
pBitMap := DIBCreateFromPTR(ptrImageString, Len(sImage))
MemFree(pBitMap)
MemFree(ptrImageString)
Semplice ma efficace. La cosa bella č che se metto questo codice in una 
finestra per visualizzare l'immagine mi da di nuovo l'errore di prima, se lo 
lancio da una finestra di servizio va bene!!!
BOHHHHH!! Devo lavorarci ancora un po'.........
Grazie cmq Danilo, sei sempre disponibile.
                                                        Francesco Leo

 ha scritto nel messaggio 
news:_SD0e.694889$b5.31...@news3.tin.it...
