Newsgroup: it.comp.lang.vo-clipper
Titolo: mySQL e Immagini : NON FUNZIONA .... WHY ?

Ciao a Tutti
      Mi scuso sin d'ora per la lunghezza di questo POST/thread
     Oggi mi trovo in panne, non riesco a capire perchè non mi
funziona tutto ciò....
     Ho fatto varie ricerche su questo news group e a partire da
Danilo che per primo ha affrontato questo problema e l'ho ha risolto
ed ho trovato diverse linee di codice da utilizzare per capire la
logica della procedura da affrontare.
    Da Premettere che uso  delle classi che nel tempo mi sono creato e
che funzionano egreggiamente almeno fino a quando non ho avuto
necessità di utilizzare le immaggini.
   QUI CASCA IL MONDO...........
    La Procedura di Stored immagini nel db non ho avuto alcun
problema, difatti utilizzando SQLYog le immagini le visualizzo senza
problema.
   Il Problema sussiste quando voglio vedere le immaggini nel mio
programma, non riesco in nessun modo a vederle.
   Il codice che ho trovato su questo news è il seguente :
cString := oServer:FIELDGET(#MEDIA)
MemPtr := MemAlloc(SLen( cString ))
MemCopyString( MemPtr, cString, SLen( cString ) )
pDib := DIBCreateFromPTR(MemPtr, SLen(cString))
MemFree(MemPtr)
   Utilizzando la mia classe io vedo che quando uso
                     cString := oServer:FIELDGET(#MEDIA)
   Ho un ritorno di una stringa di quattro caratteri e precisamente la
seguente  "BM|B", faccio le mie verifiche e scopro che nelle immagini
ci sono diversi chr(0) che sono praticamente i caratteri di termine
delle stringhe statiche e precisamente PSZ.
  Dopo vari tentativi mi scarico da FabToys.Net le classi di mySQL è
vedo che il problema è lo stesso, il Metodo GetData restituisce anche
lui una stringa di quattro caratteri.
  Al chè cerco di modificarlo in modo tale di usare variabili statiche
ma ho sempre un ritoro di pDib=0X000000
Non sò più che cosa fare...
Ringrazio anticipatamente chi mi illuminerà e gli sarò debitore di una
sfogliata con un caffè napoletano.
Grazie Luigi
METHOD GetData(nField, nLegth) CLASS FabMySQLRow
	LOCAL pStr	AS	PSZ
	LOCAL pData	AS	PSZ PTR
	LOCAL cStr	AS	STRING
	LOCAL nPos	AS	DWORD
	LOCAL MemPtr,pDib AS PTR
	//
	nPos := nField
	//
	pData := SELF:pRow
	//
	pStr := pData[ nPos ]
	   Default(@nLegth, 0)
       IF nLegth>0
       	AltD()
          MemPtr := MemAlloc( nLegth )
          MemCopy(MemPtr, pStr, nlegth )
          pDib := DIBCreateFromPTR(MemPtr, nlegth)
          MemFree(MemPtr)
       	  AltD()
       ENDIF
	   //
RETURN cStr

Ciao Luigi,
tempo fa ho avuto lo stesso problema e ci sono molti post a riguardo, dopo 
molte ricerche ho capito che il modo in cui le classi leggono i campi blob è 
sbagliato, ma non ho mai avuto il tempo di approfondire il problema. Se usi 
i driver odbc va tutto bene, infatti dove avevo l'esigenza di leggere i blob 
ho installato i driver odbc di mysql.
Ho abbandonato le ricerche, a parte per mancanza di tempo, anche perchè ho 
visto che se effettui un dump del database con molte immagini hai problemi 
quando ripristini i dati, quindi ho preferito memorizzare le immagini 
direttamente in una cartella e salvare solo i dati di riferimento, come 
facevo con i dbf.
Ciao.
                        Francesco 

 ha scritto nel messaggio 
news:0902c30f-8d70-4a79...@t47g2000hsc.googlegroups.com...


 facevo con i dbf.
Questo ti preclude il fatto di utilizzare un'applicazione da
remoto....
Ciao
luigi

 Io ho risolto passando l'immagine in un file temporaneo e poi leggendolo .
Manco a dirlo,  Ho Provato
       	  MemPtr :=FCreate('c:\my.bmp', FC_NORMAL)
       	  FWrite(MemPtr, STRING(_CAST, pStr), nLegth)
       	  FClose(MemPtr)
e visualizzo l'immagine, non contento ho confrontato i files con FC e
non è stato riscontrato alcuna differenza. MAH!!!! BOH!!!!!
Vorrei capire perchè il dibcreatefromptr non funziona.
Esiste da qualche parte una funzione che trasforma una stringa in
BITMAP direttamente ?
Ciao
Luigi De Palma

 facevo con i dbf.
Questo ti preclude il fatto di utilizzare un'applicazione da
remoto....
L'unica applicazione che richiedeva l'accesso alle immagini in remoto l'ho 
integrata con i driver odbc, ma faccio sempre una copia dei files di 
immagini in locale per poterle reperire, appunto per i problemi di cui 
sopra. Per l'accesso in rete locale ovviamente non ci sono problemi...
Ciao
luigi
Ciao.
    Francesco 

Hai salvato l'immagine nel campo blob tenendo conto delle sequenze di 
escape?
usa la funzione di strasformazione mysql_real_escape_string() delle API.
Per fare i baclup usi mysqldump.exe ? nella restore usi un buffer adeguato?
Esegui una query del tipo "set global max_allowed_packet=16 * 1024 * 1024"
Se usi questi accorgimenti ti assicuro che non serve passare da un file di 
appoggio e funziona tutto perfettamente.
_DLL FUNCTION DIBCreateFromPTR(pbImage AS BYTE PTR, nSize AS INT) AS PTR 
PASCAL:FabPaint.FabDIBCreateFromPTR
cString := SELF:Server:FIELDGET(#CAMPOIMG)
MemPtr := MemAlloc(SLen( cString ))
 MemCopyString( MemPtr, cString, SLen( cString ) )
 SELF:Image:CreateFromPtr(MemPtr, SLen(cString))
 MemFree(MemPtr)
Scaricati la DLL di Fab per le immagini.
Danilo