Newsgroup: it.comp.lang.vo-clipper
Titolo: [clipper] campi memo

Ciao a tutti,
ho un problema con i campi memo e non riesco a trovare i messaggi che
trattavano l'argomento.
In breve:
- come si compattano senza ricorrere a funzioni di terze parti (avevo visto
un listato in c ma non lo trovo piu') ?
- qual'e' la dimensione max dopo la quale cominciano a fare cas..o ? (mi
sembra 32 Mb)
So che la gestione del 5.3 e' un'altra cosa e so anche che utilizzando rdd
differenti si ovvia radicalmente al problema ma attualmente necessito di
risolverlo usando i vecchi e poco efficienti ntx.
Grazie a tutti,
Marco

 sembra 32 Mb)
Sembra anche a me ma non ricordo.
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

 ha scritto nel
messaggio news:3DB47894...@emagsoftware.it...


 che mi ha fatto stroncando tutto...e non ho mai capito perchč...
Io lo utilizzo da circa 18 anni senza problemi! Magari sei stato solo
sfortunato. Oppure c'era qualche problema nel tuo codice. Oppure
utilizzavi una versione di Clipper bacata. O un RDD bacato. Vai a
sapere...


 sembra 32 Mb)
Guarda che in molti casi e' meglio usare un campo di testo largo ove
possibile... i memo sono delicati ;-)
Ciao
--
Alessandro Maiucchi
maiu...@libero.it
http://maiucchi.supereva.it
(Basta!-Scrittura creativa-Rush-Queen-Kiss-Blade Runner)

 ha scritto nel messaggio
news:aGZs9.60696$%M1.15...@twister2.libero.it...


 che occupa comunque lo spazio anche se inutilizzato.
Questo, infatti, č il motivo per cui i campi carattere cosě lunghi non
servono praticamente a nulla.


 spazio anche se inutilizzato.
Con un accorgimento puoi arrivare a migliaia di caratteri, altro che 254...
e' sulle Norton Guides...


e' sulle Norton Guides...
Anche senza nessun accorgimento.

 > che mi ha fatto stroncando tutto...e non ho mai capito perchè...


 Solo per il piacere di scambiare esperienze...
Siamo qui per questo.


 (cut)
Un piccolo contributo anche se in ritardo.
Ho recuperato la seguente funzione che avevo scritto nel lontano 1992.
Per compattare il DBT : MEMO_PACK(<dbf_name>).
<dbf_name> = nome file DBF senza estensione.
Ha un limite : funziona se nel DBF è presente un solo campo memo.
Ha però un notevole pregio : non necessita di spazio ulteriore sul disco
perchè il file .DBT viene riscritto sopra l'originale e poi troncato alla
nuova dimensione.
Ovviamente è sempre consigliabile mantenere un backup degli originali -:)
Spero possa esserti utile
Ciao
Paolo Ramozzi
paolo....@soft-com.it
www.soft-com.it
-----------------------------------------------------------
* Funzione : MEMO_PACK - Pack File DBT
-----------------------------------------------------------
#include "Dbstruct.ch"
-----------------------------------------------------------
FUNCTION MEMO_PACK(fname)
LOCAL j,k,w,hw,fld_name,fld_num,memo_ptr,rptr,maxmem,astru := {}
LOCAL itmp,tbuf := "",lret := .F.,old_area := SELECT()
   DBUSEAREA(.T.,,fname,"AMPK",.F.)
   astru := AMPK->(DBSTRUCT())
   AMPK->(DBCLOSEAREA())
   SELECT(old_area)
   fld_name := ""
   fld_num := maxmem := 0
   AEVAL(astru,{|x|maxmem += IF(x[DBS_TYPE] == "M",1,0)})
   IF maxmem == 1
      k := ASCAN(astru,{|x|x[DBS_TYPE] == "M"})
      fld_name := TRIM(astru[k,DBS_NAME])
      fld_num := k
      FCHGTYPE(fname+".DBF",fld_num,"N")
      DBUSEAREA(.T.,,fname,"AMPK",.F.)
      itmp := TEMPFILE(,"NTX")
      AMPK->(DBCREATEIND(itmp,fld_name,&("{||"+fld_name+"}")))
      AMPK->(DBGOTOP())
      hw := FOPEN(fname+".DBT",2)
      rptr := w := 1
      DO WHILE ! AMPK->(EOF())
         IF (k := &("AMPK->"+fld_name)) != 0
            memo_ptr := MEMO_MOVE(hw,k,rptr)
            &("AMPK->"+fld_name) := rptr
            rptr := memo_ptr
         ENDIF
         AMPK->(DBSKIP())
      ENDDO
      FSEEK(hw,0,0)
      tbuf := L2BIN(memo_ptr)
      FWRITE(hw,tbuf)
      FSEEK(hw,memo_ptr*512,0)
      FWRITE(hw,tbuf,0)
      FCLOSE(hw)
      AMPK->(DBCLOSEAREA())
      lret := FCHGTYPE(fname+".DBF",fld_num,"M")
      FERASE(itmp)
   ENDIF
RETURN lret
-----------------------------------------------------------
* Funzione : FCHGTYPE - Cambia Tipo Di Campo Memo <==> Numerico
-----------------------------------------------------------
STATIC FUNCTION FCHGTYPE(fname,offs,ntype)
LOCAL hw,buf := SPACE(32)
   hw := FOPEN(fname,2)
   FSEEK(hw,offs*32)
   FREAD(hw,@buf,32)
   FSEEK(hw,-32,1)
   buf := POSREPL(buf,ntype,12)
   FWRITE(hw,buf,32)
   FCLOSE(hw)
RETURN .T.
-----------------------------------------------------------
* Funzione : MEMO_MOVE - Spostamento Testo Memo
-----------------------------------------------------------
STATIC FUNCTION MEMO_MOVE(hw,old_ptr,new_ptr)
LOCAL k := 0,rbuf := SPACE(512)
   DO WHILE k == 0
      FSEEK(hw,old_ptr*512)
      FREAD(hw,@rbuf,512)
      IF old_ptr != new_ptr
         FSEEK(hw,new_ptr*512)
         FWRITE(hw,rbuf,512)
      ENDIF
      old_ptr++
      new_ptr++
      k := AT(CHR(26),rbuf)
   ENDDO
RETURN new_ptr
-----------------------------------------------------------

 ha scritto nel messaggio
news:ap9lb9$qtg$1...@news.ngi.it...
