Italian community of Lazarus and Free Pascal

Programmazione => Databases => Topic aperto da: luigi67 - Marzo 24, 2014, 01:47:50 pm

Titolo: Campo blob su Firebird
Inserito da: luigi67 - Marzo 24, 2014, 01:47:50 pm
Salve a tutti
Allora come da oggetto utilizzo un campo blob per caricare su un database Firebird un file pdf e uso le seguenti istruzioni
Codice: [Seleziona]
dati.SQLoadfSCHprod.SQL.Text:=' update prodotti set SCH_PRODOTTO = :SCH_PRODOTTO where ID_PRODOTTO =:ID_PRODOTTO ';
 
  dati.SQLoadfSCHprod.ParamByName('SCH_PRODOTTO').LoadFromFile(SchedaProd,ftBlob);
   dati.SQLoadfSCHprod.ParamByName('ID_PRODOTTO').AsString:=idProd;
   dati.SQLoadfSCHprod.ExecSQL;

 e fin li ci sono , se invece voglio  cancellare il file dal campo blob come si f? Ho letto in giro che si deve usare  la procedura clear
nello specifico

Codice: [Seleziona]
tabella.fieldbyname('campo blob).clear
tabella.post
transazionetabella.commitretain;

e infatti il riferimento mi reimposta a null il campo, ma le dimensioni del database rimangono invariate a quanto il campo aveva inserito il file pdf, in pratica cancella il "riferimento" non il o contenuto io invece devo cancellare realmente il contenuto del campo blob
Grazie
Luigi
Titolo: Re:Campo blob su Firebird
Inserito da: El Salvador - Marzo 24, 2014, 02:23:23 pm
Dovrai fare un backup ed un ripristino del database. Non ci sono altri modi, anche perchè la struttura interna di un database firebird è complessa ed ogni tentativo di compattazione del database richiederebbe di tenerlo offline per un tempo maggiore di un classico backup e ripristino.

Ulteriori informazioni:
- http://stackoverflow.com/questions/2045306/firebird-database-keeps-getting-larger
- http://www.firebirdfaq.org/faq41/
- http://www.ibphoenix.com/resources/documents/search/doc_23