Newsgroup: it.comp.lang.delphi
Titolo: [BDE+Paradox] Index Out Of Date

Ciao a tutti,
ho un problema di continui "Index out of date" su alcune tabelle Paradox
gestite dalla mia applicazione.
Alla base di tutto ci sono dei cali di tensione e dei problemi su un gruppo
di continuità che periodicamente fa spegnere il computer ad esso collegato.
Al riavvio appena l'applicazione tenta di accedere ad alcune tabelle mi
viene sollevata l'eccezione "index out of date" e quindi è necessario
procedere alla ricostruzione di tutti gli indici di tali tabelle.
Ora, preso in considerazione che:
- il gruppo di continuità è da far riparare/sostituire (riesce addirittura a
non alimentare le macchine pur essendoci la tensione);
- per anni l'applicazione è stata soggetta a problemi del genere, ma questi
hanno cominciato a verificarsi solo da circa un mese, nel sostituire il
vecchio 386 con Windows 95 con un nuovo P4 con Windows XP;
- l'applicazione si occupa principalmente di colloquiare con un PLC e di
"gestire" l'impianto di produzione, mentre le fasi di accesso al database
sono relative alle sole operazioni di salvataggio dello storico delle
operazioni effettuate (successivamente le connessioni sono chiuse, a parte
l'oggetto Database).
La probabilità che la corrente venga a mancare proprio nel momento in cui
l'applicazione sta scrivendo nella base dati mi sembra piuttosto remota
(possibile, ma remota), però in un mese è successo 5 volte e tutte quante
avevo questo problema (mentre prima: MAI in piu di 5 anni).
Quindi ipotizzo ci sia una qualche cache di Windows XP che in un certo fa
credere alla mia Applicazione (al BDE) di aver aggiornato dati ed indici,
quando invece le informazioni si trovano in memoria. In sostanza chiedo se
qualcuno ha avuto esperienza del genere ed eventualmente come l'ha risolta.
Stavo inoltre valutando, come intervento correttivo, di passare da Paradox
ad un altro Database. Le mie esperienze sono orientate principalmente verso
i database Microsoft, quindi Access oppure SQL Server.
In questo senso però mi si richiederebbe di passare da BDE ad ADO e quindi,
come minimo di ricompilare tutto da Delphi 5.0 a Delphi 6.0 risolvendo
principalmente i problemi di incongruenza tra gli oggetti di accesso ai dati
dell'una e dell'altra tecnologia. Inoltre il costo dell'intera operazione
potrebbe essere un pò elevato.
Pensavo, eventualmente, di fare un intervento il più possibile indolore
procedendo seguendo gli step:
- creo immediatamente un database Access v. 2.0 contenente tabelle del tutto
identiche a quelle Paradox ed agendo semplicemente sulle proprietà di
connessione del database dovrei riuscire a rendere in tempi brevissimi
l'applicazione già pronta per essere installata. In questo modo dovrei anche
risolvere immediatamente il problema dei vari "index out of date", essendo
Access un pò più solido di Paradox;
- di seguito potrei con calma convertirmi l'applicazione in Delphi 6.0,
verificare eventuali componenti da aggiornare, ecc.;
- in ultima istanza sostituire gli oggetti BDE con quelli ADO ed adattare
tutto il codice necessario.
In questo senso però mi preccupa il primo passo in quanto non ho la piena
certezza che basti semplicemente riconfigurare la connessione dell'oggetto
TDatabase per accedere ad Access. In particolare non vorrei dover sostituire
le solite istruzioni Find, SetRange, ovvero intervenire massivamente sulla
logica dell'applicazione (al costerebbe un pò troppo in termini di test
della stessa). E quindi ancora chiedo consigli ed eventuali esperienze in
merito.
Ringraziando,
Gianluca.
-- 
Gianluca Plevani
-----------------------------------------------------------
http://www.brain-enterprise.com

 ha scritto nel messaggio
news:Cl%Wc.186911$5D1.8...@news4.tin.it...


merito.
Hai centrato perfettamente il problema. E la tua analisi e' completa, ma non
hai specificato una cosa: il tuo programma e' in monoutenza? Oppure compie
scritture in rete?
Se e' la seconda, allora scordati Access: esso e' tutto fuor che' un database
che gestisce le concorrenze.SI, relazionale e robusto fin che vuoi (ho fatto
gestionali che girano da due anni senza problemi di indici corrotti e altro) ,
ma prova ad accedere allo stesso db in multi utenza e gli access violation
saranno piu' numerosi dei capelli di Berlusconi!
Quanto al passaggio bde -> ado, non hai scelta: sostituire i dataset implica
rimpiazzare i metodi quasi totalmente. La catena di discendenza infatti li
porta su strade assai divergenti.
Quindi, se devi riscriverlo passando ad ADO in multiutenza, ti suggerisco sql
server. Con Access esiste anche la possibilita' di accedervi tramite ODBC, ma
le performance sono assai scadenti.
Ciao
-- 
Morde. 
Plonkatore professionista di ICLD.

esperienze in merito.
Per quanto riguarda questo temo proprio che non ci sia nulla da fare.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it