PDA

Visualizza la versione completa : [DELPHI] Inserire immagini in un campo BLOB di un database DB2


Whitecrowsrain
28-11-2006, 16:54
Salve
stro scrivendo un programma che crea un 'immagine e la inserisce in un campo di un deatabse di tipo DB2, ma non so come poter passare ad un campo BLOB un file di tipo .bmp visto che se faccio


query.paramByName('imaggine').asBlob:= ...


mi dice che quel asBlob vuole un tipo String..ma se è un BLOB perchè vuole un tipo string?


qualcuno di voi sa come invece passarlgi un ogetto di tipo TBitmap?

Whitecrowsrain
28-11-2006, 17:42
P.S.

l'oggetto qry è di tipo TQuery è fa appunto una query del genere



qry.sql.text:='INSERT INTO TABELLA VALUES(:nome,:immagine);



dove nome è di tipo VARCHAR(50) ed è il nome del file, mentre immagine e di TIPO BLOB ed è l'immagine vera e propria...come faccio a passargli l'immagine di tipo TBitmap?

alka
28-11-2006, 17:52
E' possibile "castare" l'oggetto TField che rappresenta il campo BLOB al tipo TBlobField per accedere a metodi specifici, forniti dal tipo stesso, che consentono di caricare informazioni da file esterni (LoadFromFile) o da "stream" generici (LoadFromStream) all'interno del campo.

Ciao! :ciauz:

Whitecrowsrain
28-11-2006, 18:21
Originariamente inviato da alka
E' possibile "castare" l'oggetto TField che rappresenta il campo BLOB al tipo TBlobField per accedere a metodi specifici, forniti dal tipo stesso, che consentono di caricare informazioni da file esterni (LoadFromFile) o da "stream" generici (LoadFromStream) all'interno del campo.

Ciao! :ciauz:

ho provato ad usare un TblobFile ma tutta la documentazione che ho trovato riguardava sempre e solo l'uso di TTAble... io invece uso TQuery, come dovrei fare in questo caso?

P.S.
se uso il TblobField mi da sempre runtime error, quindi se mi fai un esempio su come usarlo nel mio caso mi aiuteresti molto...GRAZIE! :zizi:

Whitecrowsrain
28-11-2006, 19:03
io ho provato questo:



var
cod,i:integer;
nome:String;
bmp: TBitmap;
buffer:TStream;
begin
//crea l'immagine dall componente di disegno
bmp:=TBitmap.create;
getBmp(foto,Bmp);
buffer := TMemoryStream.Create;
bmp.SaveToStream(buffer);
//inserisce la sagoma nell'archivio
qry.SQL.Text:='INSERT INTO tabella VALUES(:cod,:nome,:tipo,:imm)';
qry.ParamByName('cod').asInteger:=cod;
qry.ParamByName('nome').asString:=nome;
qry.ParamByName('tipo').asInteger:=e_tipo.ItemInde x;
qry.ParamByName('imm').LoadFromStream(buffer,ftBlo b);
qry.ExecSQL;
qry.close;
buffer.free;

end;

dove cod e nome sono stati precedentemente impostati ed e_tipo è un TListBox..

Il problema ora sta che qualsiasi cosa metto al posto di ftBlob(o se lascio ftBlob) mi da sempre lo stesso errore Invalid Conversion...perchè?

qualcuno sa darmi un esempio usando i TBlobField?

alka
28-11-2006, 19:25
Gli stream funzionano come dei "nastri magnetici": se ci scrivi sopra, il "puntatore" virtuale è posizionato nel punto in cui ha avuto termine la scrittura; se devi copiare dati da uno stream ad un altro, dovrai provvedere con una Seek a risposizionarti all'inizio del "nastro" appena scritto affinché da quella posizione abbia inizio la lettura dei dati da copiare nel secondo stream (o in un altra risorsa).

Prova a riposizionare a 0 (zero) lo stream sorgente prima di eseguire la LoadFromStream del campo.

Whitecrowsrain
29-11-2006, 09:16
Originariamente inviato da alka
Gli stream funzionano come dei "nastri magnetici": se ci scrivi sopra, il "puntatore" virtuale è posizionato nel punto in cui ha avuto termine la scrittura; se devi copiare dati da uno stream ad un altro, dovrai provvedere con una Seek a risposizionarti all'inizio del "nastro" appena scritto affinché da quella posizione abbia inizio la lettura dei dati da copiare nel secondo stream (o in un altra risorsa).

Prova a riposizionare a 0 (zero) lo stream sorgente prima di eseguire la LoadFromStream del campo.

ho fatto un



buffer.position:=0


prima di eseguire il loadFromStram ma nulla.. sempre lo stesso errore


[IBM][CLI Driver] CLI0102E Invalid conversion. SQLSTATE=07006.
..uff,ma come devo fare per mettere una immaginina dentro il mio database DB2?

Whitecrowsrain
29-11-2006, 18:53
insomma possibile che nessuno abbia mai inserito un'immagine dentro un database DB2?

alka
29-11-2006, 22:10
Come è definito il campo? Intendo come tipo specifico.

Se aggiungi i campi in modo persistente a Delphi, quale tipo viene assegnato al campo?

Che componenti stai usando? BDE?

Whitecrowsrain
30-11-2006, 09:11
Originariamente inviato da alka
Come è definito il campo? Intendo come tipo specifico.

Se aggiungi i campi in modo persistente a Delphi, quale tipo viene assegnato al campo?

Che componenti stai usando? BDE?


Si, uso un componente TQuery che si collega ad un TDataBase che si collega al DB2 tramite il driver di ODBC.

Nel DB2 il campo è di tipo BLOB size 1Mb...

hai bisogno di altre informazioni?

Loading