Newsgroup: it.comp.lang.delphi
Titolo: Ancora sugli indici

Salve a tutti ..
.
Il problema iniziale era quello di creare gli indici (MDX) di file DBF. La 
creazione dei file doveva essere EX-NOVO quindi potevano essere presenti i 
soli file DBF.
Dopo molti tentativi, arrivo alla conclusione che:
 se il file indice (MDX) e' presente sul disco, l'indice può essere 
cancellato e quindi ricreato;
ma se, o non e' presente, o il file risulta corrotto, allora ogni tentativo 
risulta vano.
Allora, se e' assodato che non e' possibile creare indici O MDX O NDX avendo 
i sili file DBF, la migrazione in altri DataBase non DBF, sara' opportuna.
Chi ha esperienza in proposito, può confermare questa asserzione?
Grazie della collaborazione,
Carlo

 ha scritto nel messaggio 
news:d8datv$28ch$1...@newsreader1.mclink.it...


 Chi ha esperienza in proposito, puň confermare questa asserzione?
Attenzione, non e' proprio cosi', nonostante le tue prove siano state molto
esaurienti.
C'e' una caratteristica che devi sapere dei file dbf: queste cariatidi
hanno un byte nell'header che indica la presenza o l'assenza di un file
indice.
Se questo byte e' "acceso", allora il bde si aspetta di trovarsi l'indice,
se il byte e' spento, allora puoi procedere alla rigenerazione *ex novo*
del tuo indice con il database desktop o da programma.
Ecco il codice, trovato su usenet, per resettare l'header:
{------------------------------------------------------------------------------}
procedure RemoveMDXByte(dbFile: String);
(*
Adapted from Delphi Database Development,
  by Ted Blue, John Kaster, Greg Lief, and Loren Scott
  page 711
This procedure takes a DBF file name as a parameter. It will patch
the DBF header, so that it no longer requires the MDX file.
*)
const
  Value: Byte = 0;
var
  F: File of Byte;
begin
  try { except }
    AssignFile(F, dbFile);
    try { finally }
      Reset(F);
      Seek(F, 28);
      Write(F, Value);
    finally
      CloseFile(F);
    end; { try }
  except
    On E: Exception do
    begin
      MessageDlg(E.Message, mtError, [mbOK], 0);
      raise;
    end;
  end; { try }
end; { RemoveMDXByte } 
Dopo di questo, *con qualsiasi programma che lo gestisce puoi aprire il
dbf*.
-- 
Morde. 
FAQ di icld (beta-version): 
http://icld.altervista.org
 
M-List di icld: 
http://it.groups.yahoo.com/group/icld/

 procedure RemoveMDXByte(dbFile: String);
.........


 per verificare le combinazioni bit/file.
Io questo problema l'ho avuto cercando di aprire un dbf per rebuildarne
l'indice, dopo averlo cancellato in quanto corrotto. Il database desktop di
borland si rifiutava di aprire il dbf perche' non trovava l'mdx: ecco
allora che ho aperto con l'editor esadecimale il dbf e ho forzato a 0
(zero) il byte in questione. Cosi' facendo ho potuto aprire il dbf "stand
alone" e ricostruirne l'indice.
In fatto di bde mi sono fatto un discreto culetto visto che sviluppo
applicativi che si agganciano al zucchetti che, scandalosamente, usa ancora
i dbf come base dati.
Ciao!


"Morde" ha scritto nel messaggio
<Super cut>
 rebuildarne
<Super cut>
Ehi, usando certi neologismi in luoghi pubblici
come questo senza le dovute precauzioni rischi
di essere rinchiuso per sempre nelle segrete
della Accademia della Crusca!
Metti almeno un bollino rosso all'inizio del post,
cosi' i genitori possono controllare che i loro
bambini non cadano in certe trappole!
:-)
P.S. io ho smesso di postare la FAQ (dieci frustate
per me) ma perche' spero sempre che voi
(uso il plurale perche' suppongo siate piu'
di uno) stiate procedendo con il sito.
Vero?
Ciao
ACSH

 Come fare la spartizione? 
Azz.. un indovinello! 5 a 3 (una moneta per ogni pane messo a 
disposizione) è troppo banale?
	Marco
	info @ 
marcobortolani.it


Credo che la frase "fanno colazione insieme" indica che il viaggiatore non 
ha mangiato "da solo" gli otto pani. Quindi come è la spartizione ?
Ma con tutti i problemi che gia' abbiamo , anche questo ? ....   :-)
Giulio 

 Vero?
Vero che non e' falso, verrai contattato dalla confraternita.
Due Arabi, l’uno recante 5 pani, l’altro 3 pani, incontrano in campagna un
viaggiatore ricco e affamato. Fanno colazione insieme, poi il viaggiatore,
come prezzo del suo pasto, dà loro 8 monete d’oro.
Come fare la spartizione? 
-- 


 ha mangiato "da solo" gli otto pani. Quindi come è la spartizione ?
Bravo, ci sei arrivato prima di me sicuramente :)
La spartizione.. ehm non la so, ma il ragionamento e' giusto :-P
Per la soluzione precisa bisognerebbe scrivere al tizio di questo sito:
http://www.sandrodiremigio.com/documenti/giochi/giochimatematici.htm
Divertitevi :-)
