Newsgroup: it.comp.appl.access
Titolo: ADO e transazioni

Mi è capitato di realizzare una procedura (MDB) un po' complessa e distribuirla 
all'interno delle rete di un mio cliente.
Purtroppo, vuoi per problemi di rete, vuoi per problemi di lentezza delle 
macchine client e della macchina che contiene il db con i dati, alle volte 
capita che il database con i dati si corrompa.
A seconda di certi input dell'utente su certe form, questa procedura scatena 
una serie piuttosto lunga e complessa di operazioni, sia caricando di lavoro 
il client con operazioni decisamente lunghe e computazionalmente pesanti, 
sia mettendo a dura prova il "server" al quale è richiesto di trasferire 
una discreta quantità di dati ogni volta.
Al momento non posso permettermi il lusso di reingegnerizzare il tutto, magari 
passando a SQL Server (e non sapete quanto lo vorrei).
Premettendo che in tutta la procedura non utilizzo mai DAO (ho anche tolto 
i riferimenti espliciti), bensì utilizzo pesantemente ADO, mi stavo chiedendo 
se potesse avere un senso utilizzare le transazioni ADO per quelle operazioni 
pesanti e lunghe che ho appena descritto.
In genere, comunque, secondo voi l'utilizzo delle transazioni ADO porta più 
problemi o benefici per un database MDB?
Se volete, fatemi sapere come la pensate e, magari, datemi un consiglio sul 
problema che ho descritto.
Grazie in anticipo.
--
PBsoft di Gabriele Bertolucci
www.pbsoft.it
skype: pbsoftsolution

"Gabriele Bertolucci" <in...@REMOVEpbsoft.it> ha scritto nel messaggio news:875ea3551a0498...@news.virgilio.it...

Le sto testando proprio in questi giorni su un mio applicativo.
Eseguo operazioni abbastanza complesse e delicate su piu' database
contemporaneamente ed ho simulato vari errori che bloccano la procedura.
Le successive verifiche sui database hanno sempre dato esito positivo:
nessun danno di alcun tipo. Per quel che mi riguarda, credo che faro'
ampio uso delle transazioni anche in altre mie procedure, tuttavia
devo precisarti che i miei test sono stati fatti in condizioni diciamo
ottimali: pc puliti, aggiornati e discretamente performanti (per le
esigenze di un ufficio medio).
Sarebbe interessante sentire comunque chi ha ampia esperienza sul campo
e su ambienti di rete meno "medi" del mio.

 più problemi o benefici per un database MDB?
Ho usato raramente le transazioni (sempre con DAO ché ADO non lo
voglio nemmeno sentir tossire!) e, ritengo, sempre appropriatamente.
Se debbo aggiornare un piano dei conti normalmente composto, fra l'altro,
da uno o più tabelle per le gerarchie e da uno o più tabelle
per le anagrafiche Clienti/Fornitori, pongo l'operazione fra un
BeginTrans e un CommitTrans per essere certo che qualche errore
di run time o altro non mi porti ad aggiornare le tabelle dei conti
propriamente detti senza aver ANCHE aggiornato le corrispondenti
anagrafiche.
Ciò allunga in maniera appena percepibile i tempi di esecuzione.
Analogamente per le movimentazioni di magazzino e poche, in verità,
altre situazioni in cui non si debba correre il rischio di "togliere" 
qualcosa
senza prima averlo "inserito": classico esempio il c/c bancario.
Usare le transazioni nei casi in cui risulta rischioso non farlo è buona 
cosa,
usarle in altri casi mi pare un'inutile perdita di tempo e un inutile 
consumo,
seppur limitato, di risorse.
Però sarebbe in linea con la filosofia degli idioti cui sono indirizzati 
Windows
& Co: più roba ci metto meglio è. Che in parole povere si traduce:
"Ti do della merda? Ma te ne do poi tanta..."
Absit iniuria verbis, my dear!
Ciao
Bruno

Personalmente ritengo poco utile la tecnologia ADO applicata a JET, se
non per
ridurre i tempi di transizione verso un server SQL.
Detto questo il problema di corruzione di un DB(JET) in rete è cosa
abbastanza
nota e purtroppo pericolosa.
Intanto JET non è MultiTransazionale, quindi ........ ONE-SHOT.
Poi l'uso di transazioni con JET a mio avviso è necessario solo in un
caso, vale a dire
per velocizzare i cicli di modifica nei Records....!
Usando le transazioni si lavora in memoria e l'esecuzione viene
demandata solo
con il Commit, rendendo l'azione di modifica estremamente più veloce
che effettuare
una modifica su ogni singolo Record.
Per tutti gli altri casi(sempre parlando di JET) direi che è
decisamente opinabile il loro uso.
@Alex

"Gabriele Bertolucci"


Il problema è, come fa notare anche Alessandro, è la scelta di ADO con JET:
strategicamente sbagliata.
Avessi lavorato con DAO, sarebbe stata veloce la transizione al Server SQL
via ODBC.
Con o senza transazioni se non elimini alla radice le cause che scatenano le
corruzioni, non risolverai.
Non dimenticare che i temporanei transazionali vengono generati da JET sui
clients, quindi il traffico di rete non cambia.
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q303528
Non hai trovato nulla che t'abbia aiutato a capire dove stia il problema?
Il s.p 8 di jet è installato su tutti i pc?
Ciao, Simone

 Il s.p 8 di jet è installato su tutti i pc?
Yes.


 db dati.
Appunto!
Ciao, Simone