Newsgroup: it.comp.lang.delphi
Titolo: A volte ritornano: grave problema con db Paradox + D3 Pro + Win NT

Salve a tutti,
scrivo per esporre nuovamente un problema che avevo gia' riscontrato tempo
fa.
Ho un programma che usa un db Paradox in cui ci sono due tabelle
master/dettaglio. Le tabelle sono visualizzate in due griglie, e l'utente ha
a disposizione una funzione per cancellare le righe della master (il
programma si occupa di cancellare anche le righe relative al dettaglio).
Il problema e' il seguente: l'utente arriva alla sera a dover cancellare
centinaia di righe dalla tabella master (la dettaglio puo' avere fino a una
ventina di righe correlate), quindi utilizza piu' volte la funzione di
cancellazione, che esegue nell'ordine la cancellazione del dettaglio e poi
quella della riga master. Al termine della cancellazione le righe vengono
eliminate normalmente, ma se il programma viene chiuso e riaperto le tabelle
hanno di nuovo TUTTI i dati, come se non fossero mai stati cancellati. Non
basta: oltre a tutti i dati non cancellati, anche alcune righe che invece
erano state solo modificate vengono riportate allo stato in cui erano
qualche minuto prima dell'inizio della cancellazione.
Mi ritrovo quindi con una specie di "rollback" globale che include una serie
di dati "a caso": a volte solo le righe cancellate, a volte anche alcune (un
tot a caso) righe modificate. Se invece NON vengono fatte centinaia di
"Delete", ma solo alcune, sembra che il problema non si presenti (non ne
sono sicuro).
Quello che non capisco e' PERCHE' viene fatto il rollback.
Alcune note per spiegarvi come mai non ci capisco piu' nulla:
- Il programma NON usa transazioni nella fase di cancellazione (nessun
Commit/Rollback. Tali funzioni vengono usate in altre parti del programma,
ma non li'. Inoltre ho la certezza che quando le righe vengono cancellate
tutti i Commit del caso sono gia' stati fatti)
- Ho gia' provato con dbiSaveChanges, FlushBuffers, Refresh, addirittura con
una SERIE (non solo UNA, proprio una serie) di Pack delle tabelle
- Ho provato a cancellare le righe di dettaglio con una Query in modo da
ridurre il numero di Delete
Ho anche notato che il problema si presenta solo con WinNT (lo odio ogni
giorno di piu'), mentre tutto funziona su Win95 e Win98.
Il programma e' realizzato con D3 Pro e usa il BDE 5.01. Il database, come
indicato prima, e' Paradox.
Penso di aver scritto tutto il possibile per descrivere il problema, nel
caso aveste bisogno di altre informazioni contattatemi senza problemi.
Il problema e' molto grave, se qualcuno ha un'idea per risolverlo per favore
me la comunichi, io non so che fare...
Ciao e grazie mille
Daigo
--
And the beast shall come forth surrounded by a roiling
cloud of vengeance. The house of the unbelievers shall
be razed and they shall be scorched to the earth. Their
tags shall blink until the end of days.
From The Book of Mozilla, 12:10

Prova a scrivere nei ng borland relativi ai database. La' ci scrive tutto il
mondo e il problema probabilmente e' stato trattato decine di volte.. :-)
Ciao, Sandro

Scusa io non uso tabelle paradox, ma solo tabelle dbf.
Comunque, mi pare che sia le une, che le altre, abbiano bisogno del pack
per la cancellazione definitiva, sempre che tu non usi un comando sql.
Quindi se non usi commit e roolback.
Ad un certo punto avrai solo dei record marcati per la cancellazione
Come confermi la cancellazione definitiva?
Un altra cosa nel dbe quanta memoria lasci per le tabelle ?
Se non ricodo male quando usavo win dbase che usa dbe la cosa era di
grande importanza.
So di non esserti stato di grande aiuto, ma le impostazioni del dbe sono
veramente importanti e non vorrei che dipendesse il tutto da questo
piuttosto che da Nt.
Ciao
Livio