Newsgroup: it.comp.appl.access
Titolo: Blocco a livello di Record con DAO 3.60 e con ADODB

Come suggeritomi dal sig. Giorgio Rancati, abbandono la discussione dei record contigui perchè fuori 
argomento, e creo una nuova discussione come da oggetto.
Mi permetto di scrivere più una nota informativa che una richiesta di aiuto.
Riprendo la discussione iniziata da Sandrobi riguardo all'indisponibilità del blocco a livello di 
record su backend con DAO.
Si diceva che nonostante tutti gli mdb (FE e BE) fossero settati con il blocco a livello di record, 
aprendo con blocco pessimistico da un'interfaccia utente un record sul BE per andarlo a modificare, 
con DAO non solo si bloccava il record in esame, ma anche tutti i record contigui.
Sandrobi era difatti perplesso di come uno strumento quale DAO non fosse in grado di far conoscere 
quanti e quali record su un BE fossero effettivamente in corso di modifica.
Da prove effettuate, ho constatato che tale affermazione è vera. Editando con DAO da FE un record su 
BE, il blocco si estende ad un gruppo di record, e non al solo record interessato.
Provando invece con ADODB, il blocco a livello di record ha successo.
L'altro giorno il sig. Rancati mi ha passato questo link
http://support.microsoft.com/kb/275561/en-us
dal quale poi sono passato a questo:
http://support.microsoft.com/kb/306435/
Leggendo l'articolo tradotto, emerge che in effetti è un limite di progettazione di DAO 3.6 la non 
disponibilità del Row Level Locking.
Il bello viene poi dall'esempio di risoluzione del problema. Sarà che non ho mai preso in 
considerazione un tale sistema, ma fino ad oggi consideravo ADODB e DAO due cose per lo stesso fine 
ma strutturalmente diverse e quindi non adoperabili assieme.
Il sistema è quello di aprire il BE con modalità di blocco a livello di record tramite ADO, per poi 
successivamente aprire il database con DAO facendo riferimento all'oggetto workspace. Tale sistema 
permette di utilizzare DAO con blocco a livello di record.
Intrippante e semplicemente magnifico..... non vedo l'ora di sperimentare!
PS ringrazio il sig. Giorgio Rancati che riesce sempre a trovare dei collegamenti ai siti Microsoft 
che altrimenti sarebbero irraggiungibili dai comuni mortali
-- 
---------------------------
Michele (Giò)
joyl...@alice.it
 

 che altrimenti sarebbero irraggiungibili dai comuni mortali
esagerato
:-)
Ciao
-- 
Giorgio Rancati
[Office Access MVP]

 da VB.
intendevo proprio VB, ovviamente da VBA funziona.


 Infatti a me funziona anche senza usare ADO.
A me invece no, il blocco a livello di record non mi va con DAO, spuntando sia l'opzione sul BE , 
che sul FE. Sulla prova che avevo effettuato, editando un record da FE su BE, su 56 records nella 
tabella me se ne bloccavano 18. Come dicevo in precedenza, ho provato in tutte le salse.
Sempre che non ci sia qualche opzione particolare da attribuire al metodo opendatabase.....
Michele 

 ha scritto nel messaggio
news:452296e0$0$4567$4faf...@reader2.news.tin.it...

ecco perchè non ti funziona, se apri un database direttamente sul BE esci
dall'ambito della sessione di Access.
Immagino che l'apertura del Db tu la faccia dal FE che ha nel suo tabledefs
la tabella allegata da aprire.
In questo caso fai così:
----
    Dim Rs As Recordset
    Dim Db as Database
    Set Rs = CurrentDb.OpenRecordset("Select * From NomeTabella Where 1=0")
    Set Db=Opendatabase("PercorsoBE")
    Set Rs = Db.OpenRecordset("NomeTabella")
    Rs.Edit
    Debug.Pritn ' Qui metti uno stop
----
La prima apertura del recordset sulla tabella allegata, apre il BE con la
modalità Row Level Locking impostata sul FE.
Poi viene aperto il recordset sull'effettivo Db.
Dopo che l'esecuzione si ferma sullo stop apri il BE con un'altra sessione
di Access, apri la tabella e vedrai un solo record bloccato.


 ha scritto nel messaggio 
news:4522ac10$0$995$5fc...@news.tiscali.it...

Allora, le prove da me effettuate riguardano effettivamente l'apertura diretta di un BE senza 
tabelle collegate.
Per effettuare tale prova, ho aperto un recordset con una sessione e ho fermato l'esecuzione (con 
F8)dopo l'edit del recordset. Poi sia manualmente sul BE, sia con una routine che da un'altra 
sessione esaminava record per record il locking, constatavo il blocco di più record, 18 su 56 
ricordo.
Ti metto al corrente che la prova sopra l'ho eseguita per dare una risposta ad un Post, il quale non 
parlava di tabelle collegate.
E qua ci troviamo d'accordo in quanto si esce dalla sessione di Access e DAO da solo non è più in 
grado di gestire il Record Level Locking. Giusto(gradita conferma)?
Con le tabelle collegate non ho mai provato, e do per assodato, da quel che mi dici, che con le 
tabelle collegate il tutto funziona, ma tale situazione non l'ho mai verificata.
Ora, tornando alla prima situazione, cioè BE e FE senza alcuna tabella collegata, sul quale siamo 
d'accordo che DAO non ne può niente con il blocco singolo, vale quello che dice la Microsoft cioè di 
utilizzare ADO per tornare a riusufruire del blocco singolo?
Grazie anticipatamente, e speriamo che questa sia l'ultima tornata.... ormai abbiamo analizzato 
tutto l'analizzabile.
Michele

Michele
;-)



Bene Giorgio, sono contento di aver colmato anche questa lacuna... ormai ci stavo rinunciando.
Questa è la volta buona che imparo bene bene anche l'oggetto workspace, utilizzato fin d'ora solo 
per le transazioni.
Saluti e alla prossima discussione, speriamo sia proficua come questa.
Michele