Newsgroup: it.comp.lang.delphi
Titolo: e se le tabelle si corrompono?

Ciao a tutti, sono riuscito a creare una piccola applicazione che usa delle 
tabelle paradox. Adesso mi sorge sto dubbio: se durante l'utlilizzo del 
programma si corrompe la tabella.db come si risolve il problema?
In linea generale voi che fate di fronte a questo inconveniente che potrebbe 
anche non verificarsi mai... ma se si verifiaca?
Faccio un esempio di codice:
procedure TForm1.FormCreate(Sender: TObject);
begin
try
    table1.edit;
    table1campo1.asstring:=edit1.text;
 
table1.post
;
except
 ?   on EDatabaseError do
 begin
 ?  showmessage('la tabella.db è corrotta devi reinstallare il programma e 
perderai  ?   tutti i dati inseriti in bocca al lupo:-)... '); //c'è 
un'alternativa per non
 ? 
dare all'utente questa spiacevole notizia?
 ?   exit;
   end;
 end;
end;
Un saluto a tutti.... e grazie anticipato per la risposta. 

Lorenzo ha scritto:
[cut]
In genere a corrompersi sono gli indici, mentre per quanto riguarda i 
dati veri e propri, salvo problemi al disco o di altro genere, puoi 
stare abbastanza tranquillo.
Per quanto riguarda le mie applicazioni con db paradox, sviluppo sempre 
una piccola utility di recupero, che si occupa appunto di ripristinare 
gli indici corrotti.
Basta aver depositato in una cartella una copia di tutte le tabelle 
vuote. In caso di corruzione (degli indici) basta cancellare tutti i 
file tranne i db e copiare record per record nelle tabelle vuote. In 
questo modo, ci pensa il dbe a ricostruire tutte le informazioni mancanti.
Una ulteriore sicurezza, potrebbe essere quella di tentare di aprire, 
fare un posizionamento e richiudere le tabelle più critiche all'avvio 
dell'applicazione. In questo modo sai se esitono dei problemi prima che 
l'utente possa fare qualunque cosa ed, eventualmente, lanciare in 
automatico l'utility di recupero.
L'ultima soluzione può essere quella di prendere tutti i file della 
tabella (dati piu indici) e provare a recuperarla manualmente con il 
Database Desktop.
Ciao,
Gianluca

 ha scritto nel messaggio 
news:QSf_e.21686$kA.23...@news3.tin.it...

Grazie per il consiglio...
Quindi basterebbe cancellare i file di indice... e ricopiare record x record 
in una copia del databese(vuota). Questo deve essere fatto prima dell'avvio 
del programma? E se si significa che all'eccezione dovrei tracciare in un 
file che c'è stato un errore e terminare quindi il programma... Sbaglio?

Se dopo il post di registrazione o modifica di un record copi la tabella/e e
tutti gli indici in una sottocartella della caretlla contenenet
<MiaTabella>. Es. chiamato BackUp (o come ti pare). Il file copiato rimane
slegato da i vari collegamenti a Programma per cui non dovrebbe corrompersi.
Ciao
Mario
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 anche non verificarsi mai... ma se si verifiaca?
ciao,
vai a questo indirizzo: 
http://www.rksolution.cz/
 
e scaricati: Pdxrbld - utility for checking and repairing Paradox tables
E' un programma che fa uso di TUTILITY.DLL fornita dalla Borland stessa
per risolvere il problemi delle tabelle paradox.
Ciao
Micky
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG





Per ricreare gli indici, almeno in .dbf, li elimino 
tutti, con deleteindex e li ricreo ex novo con addindex, come vedi in questo 
codice.


Per l'integrita' delle tabelle un backup con due o 
tre copie puo' essere utile.


 


Ciao Giorgio


 


With DataModule2.Table1 
do
 begin
 Active:=False;
 Exclusive:=True;
   
DeleteIndex('AL');
 DeleteIndex('ARGOMENTO');
   
DeleteIndex('AUTORE');
 DeleteIndex('DEWEY');
   
DeleteIndex('N_INVENT');
 DeleteIndex('PREST_IL');
 DeleteIndex('TITOLO');


 IndexName:='';
 IndexFiles.Clear;


 // Li Ricrea ExNuovi
   
Form8.Label1.Caption:=Form8.St+#13#10+'Creo l''indice AL.. ';
   
AddIndex('AL','AL',[]);
   
Form8.Label1.Caption:=Form8.St+#13#10+'Creo l''indice ARGOMENTO.. 
';
   AddIndex('ARGOMENTO','ARGOMENTO',[]);
   
Form8.Label1.Caption:=Form8.St+#13#10+'Creo l''indice AUTORE.. 
';
   AddIndex('AUTORE','AUTORE',[]);
   
Form8.Label1.Caption:=Form8.St+#13#10+'Creo l''indice DEWEY.. ';
   
AddIndex('DEWEY','DEW+DEWEY1',[ixExpression]);
   
Form8.Label1.Caption:=Form8.St+#13#10+'Creo l''indice N_INVENT.. 
';
 AddIndex('N_INVENT','N_INVENT',[]);
   
Form8.Label1.Caption:=Form8.St+#13#10+'Creo l''indice PREST_IL.. 
';
   AddIndex('PREST_IL','PREST_IL',[]);
   
Form8.Label1.Caption:=Form8.St+#13#10+'Creo l''indice TITOLO.. 
';
   AddIndex('TITOLO','TITOLO',[]);
   
Fin:=True;
 end;//
Finally
   if Not Fin then 
ShowMessage('Errore in Reindex!!');
   With Datamodule2.Table1 
do
      
begin
      IndexName:='TITOLO';


      
Exclusive:=False;
      
Open;
      
end;
 end;