Newsgroup: it.comp.lang.delphi
Titolo: D2009 Scrivere Memo su campo Blob DB

Su un Db Firebird 2,1 ho dei campi Blob ed in questi dovrei memorizzare il 
testo delle Sql,
ed il Campo Blob del DB e' di tipo Binary, credo sia indispensabile 
convertirlo.
ad Es.
SELECT TB_BANCHE.*
     , USR.COMUNE    AS NOMECITTA
     , USR.CAP       AS CAPCITTA
     , USR.PROVINCIA AS PROVCITTA
  FROM TB_BANCHE
  LEFT OUTER JOIN TB_COMUNI  AS USR
    ON TB_BANCHE.ID_CITTA=USR.ID_COMUNE
 WHERE USR.COMUNE='Milano'
Se imposto, non scrive per incompatibilita'
sIstruzioneSql e' un testo
[...]
  //assegna parametri Query
  Sql_Filtri.Params.ParamByName('IstruzioneSql').AsMemo := sIstruzioneSql;
... oppure
  Sql_Filtri.Params.ParamByName('IstruzioneSql').AsBlob := sIstruzioneSql;
che faccio converto la srtinga in TStream o TBlobStream
ho trovato un'esempio 
http://www.hitekdev.com/delphi/TBlobStream.html
ma non mi convince; perche' devo creare il Campo Notes?
  Stream := TBlobStream.Create(Table1Notes, bmReadWrite);
{Write to a stream.}
procedure TForm1.Button1Click(Sender: TObject);
var
  Stream: TBlobStream;
  s: string;
begin
  table1.edit;
  Stream := TBlobStream.Create(Table1Notes, bmReadWrite);
  try
    Stream.Seek(0, 2); {Seek 0 bytes from the stream's end point (2).}
    s := 'Lloyd is really cool.';
    Stream.write(s[1], length(s));
  finally
    Stream.Free;
  end;
 
table1.post
;
end;
query sara' di tipo testo in quanto viene costruita a runtime, selezionando
NomeCampo, Condizione, Testo da cercare e il componente DBMemo non sara' 
usato.
qualche altra via a parte gli Stream?
Maurizio
 

 qualche altra via a parte gli Stream?
Sinceramente, non ho capito nulla, non si capisce quale sono i tuoi 
problemi, per favore riscrivi meglio. Mi riferisco alla forma, non al 
contenuto.
Per quanto mi riguarda, io scrivo nei blob solo con gli stream, non 
vedo perchï¿œ farlo in altro modo quando gli stream fanno tutto il lavoro 
per te.
Ciao

"Maurizio" ha scritto nel messaggio
rispetto al precedente post ho trovato una soluzione apparente
http://edn.embarcadero.com/article/27462
ma mi sembra si adatti poco alle stringhe.
procedure SavePictureToDatabase;
var
  BlobField: TField;
  BS: TStream;
begin
  with SQLClientDataSet1 do
  begin
    Insert;
    BlobField := FieldByName('picturefield');
    BS := CreateBlobStream(BlobField,bmWrite);
    Bitmap.SavetoStream(BS);
    Post;
  end;
end;  
// mio adattamento
 sIstruzioneSQL: string;
 BlobField: TField;
 BS: TStream;
 // questo permette di associare il Campoi Blob del db al tipo Blob
  BlobField := Sql_Filtri.FieldByName('ISTRUZIONESQl'); 
  BS := Sql_Filtri.CreateBlobStream(BlobField, bmWrite);
 //ora dovrei trasformare la stringa in Blob, ma non si puo'
   sIstruzioneSQL.SaveToStream(BS);
//non esiste un metodo SaveToStream
//questa assegnazione in compilazione segnala
//incomaptibilita' tra TBytes e TStream
  Sql_Filtri.Params.ParamByName('IstruzioneSql').AsBlob := BS;
 

> te.
Il problema e' che devo memorizzare una stringa in un Blob.
se BS e' uno stream (TStream), perche' Delphi mi segnala incompatibilita'
tra Bytes e Stream ?
  Sql_Filtri.Params.ParamByName('IstruzioneSql').AsBlob := BS;
Potresti fare un minimo esempio ? 

 Il problema e' che devo memorizzare una stringa in un Blob.
http://mc-computing.com/Databases/Delphi/Firebird/Blobs.html

Link a parte, se fai F1 e cerchi tblobfield, poi espandi metodi e 
vedrai:
LoadFromStream
SaveToStream
non ti bastano?

"Morde"  ha scritto 

credo proprio di si, grazie