Newsgroup: it.comp.lang.vo-clipper
Titolo: Campi blob MySql e DevoXMySql

Ciao a tutti,
ho preso questo esempio dal manuale di Danilo per lavorare con i campi 
blob. Non mi funziona. L'errore che mi compare mi fa vedere tutta la 
stringa che dovrei inserire nel campo blob che passo tramite l'insert.
Secondo voi stò sbagliando qualcosa ? :'(
Ciao e grazie
Massimo Friargiu
    ptrHandle := FOpen2(Percorso + NomeFoto, FO_READ)
	IF FError() != 0
		RETURN FALSE
	ELSE
		FFirst(Percorso + NomeFoto, FC_NORMAL)
		nLen := FSize() //   1048576//
		cBuffer := Space(nLen)
		dwBytes := FRead(ptrHandle, @cBuffer, nLen)
	FClose(ptrHandle)
	ENDIF
	cQuery := [insert into media campo = '] + AddSlash(cBuffer) + [', nome 
= '] + AddSlash(NomeFoto) + [']
	oSrv := MySqlSelect{cQuery}

 ha scritto nel messaggio 
news:mn.43f17d757...@tiscali.it...


 ha scritto nel messaggio 
news:46415be5$0$36443$4faf...@reader5.news.tin.it...


 Massimo
Carissimo Massimo,
alle volte anche la "buona merce" ha una brutta "confezione" ...
pazienza !!!
Claudio 

Claudio Carletta ci ha detto :

Ciao Claudio,
il prodotto di Danilo è ottimo non posso proprio criticarlo, è semplice 
non hai casini e sopratutto funziona.
Ma ahimè, come un pò tutti facciamo (penso), ho il vizio di non leggere 
i manuali.
Ma c'è dell'altro, fino ad oggi io ho utilizzato la classe MySqlSelect 
come se fosse la funzione EseguiSql (delle librerie di Danilo) nella 
stessa maniera, ed ha funzionato perfettamente, nessun errore nessun 
bug, niente di niete funziona e basta.
Quando ho scritto il primo post, stavo provando l'inserimento di 
immagini in campi di tipo blob, cosa a me sconosciuta. Quindi ho fatto 
una prova e mi dava un bel errore e mi sono bloccato pensando fosse 
dovuto al tipo di campo o all'errata scrittura di codice. Così ho 
postato. Alla fine però mi sono accorto (e neanche Danilo se ne è 
accorto mancava un semplice comando alla query). Riporto:
cQuery := [insert into media campo = '] + AddSlash(cBuffer) + [', nome 
= '] + AddSlash(NomeFoto) + [']
Se noti manca il comando set, senza il quale non fa manco una pippa.
Alla fine ho lasciato tutto il codice che ho scritto anche con la 
classe MySqlSelect, ho corretto la mia dimenticanza nella query, e 
tutto funziona come al solito.
Cosa dire, peggio per me che non leggo i manuali e che faccio errori 
del (scusando la parola) cazzo.
Saluti e buon lavoro a tutti
Massimo Friargiu

Usare la MySqlSelect per eseguire una query sovraccarica di lavoro il PC per 
nulla, mi spiego;
la EseguiSql esegue appunto un comando e torna true o false se lo ha 
eseguito oppure no.
la MySqlSelect, esegue il comando e predispone tutto il necessario per la 
gestione della tabella che verrà tornata, tant'è che quando non serve più va 
chiusa per liberare la memoria di tutto quello che è stato allocato.
oServer := MySqlSelect{cCommand}
if oServer:Used
....
...
oServer:close()
endif
Spero di essere stato chiaro.
Per avere invece uno o più valore di un record usate RetQueryResult:
esempio
uVal := retqueryresult([select nome where codice=]+ntrim(nval))
if !empty(uVal)
 cNOme := uVal
endif
oppure
uVal := retqueryresult([select nome,telefono,fax,eta,data_di_nascita where 
codice=]+ntrim(nval))
if !empty(uVal)
    cNone := uVal[1]
    cTelefono := uVal[2]
    cFax := uVal[3]
    nEta := val(uVal[4])
    dDataNascita := ctod(uVal[5])
endif
Ad ogni esigenza l'utensile adatto.
Buon lavoro

"Danilo Giuliani" ha scritto nel messaggio

Grazie per la spiegazione, ora ha un senso quello che mi dicevi nell'altro 
msg.
Lunedì mi modifico tutto il codice.
Dovrebbe diventare anche più veloce quindi.
Grazie ancora
Massimo Friargiu