Newsgroup: it.comp.lang.visual-basic
Titolo: [ADO][LUNGO] Errore -2147467259 (800004005) MaxLocksPerFile

Eseguendo un test con ADO su un dbAccess ho ricevuto il
messaggio di errore in oggetto....
il codice incriminato è il seguente:
-----------------------------------------------
Public Sub main()
    Dim myCntAccess as ADODB.Connection
    Dim myRsAccess As ADODB.Recordset
    Dim mySql As String
    Dim myDateStart As Date
    Dim myDateEnd As Date
    Dim i As Long
    Set myCntAccess = New ADODB.Connection
    Set myRsAccess = New ADODB.Recordset
    mySql = "SELECT * FROM Tabella WHERE Tabella_ID < 800000"
    With myCntAccess
        .CommandTimeout = 30
        .ConnectionTimeout = 15
        .CursorLocation = adUseServer
        .Mode = adModeReadWrite
        .Open "Provider=Microsoft.Jet.OLEDB.4.0;
                    Data Source=dbProva.mdb;Persist Security Info=False"
    End With
    With myRsAccess
        .CursorLocation = adUseServer
        .CursorType = adOpenDynamic
        .LockType = adLockPessimistic
        .ActiveConnection = myCntAccess
        .Open mySql
    End With
    myRsAccess.ActiveConnection.BeginTrans
    i = 1
    Do While Not myRsAccess.EOF
        myRsAccess("Tabella_Desc").Value = "Ciao"
        myRsAccess("Tabella_ShortDesc").Value = "Pippo"
        myRsAccess.Update
        myRsAccess.MoveNext
        i = i + 1
    Loop
    myRsAccess.ActiveConnection.CommitTrans
    myRsAccess.Close
    Set myRsAccess = Nothing
    myCntAccess.Close
    Set myCntAccess = Nothing
End Sub
---------------------------------------------------------------------
l'errore si verifica quando i=9479 e il testo
dell'errore è il seguente:
Superato il numero di blocchi per la condivisione di file.
Aumentare la voce di registro MaxLocksPerFile.
Nel registro la voce MaxLocksPerFile esiste per ciacuna
versione di Jet installata e vale sempre 9500
Sono giunto alla conclusione che l'errore è causato
dall'esecuzione del ciclo all'interno di una transazione,
(ho provato a togliere l'apertura e la chiusura della transazione
e l'errore non si verifica)
Sono io che sbaglio qualche impostazione, oppure
non è possibile con ADO + JET, senza modificare
le chiavi di registro eseguire più
di 9500 update in una transazione?
--
bye BlackMagic
ICQ#:85485468

 di 9500 update in una transazione?
sembrerebbe che mettere mano al registro, temporaneamente o no, sia
consigliabile:
http://support.microsoft.com/default.aspx?scid=KB;en-us;q161329
The SetOption method temporarily overrides values for the Microsoft
Jet database engine keys in the Windows Registry. The new value
remains in effect until you change it again, or until the DBEngine
object is closed.
NOTE: Changes made to the MaxLocksPerFile setting using the SetOption
method will only be available through the current session of DAO (Data
Access Objects). Queries run through the Microsoft Access user
interface, will still use the settings within the registry.
The following code sample sets MaxLocksPerFile to 200,000 before
executing an update operation inside a transaction
fra parentesi, non e' che in qualche modo ti va in timeout ?
seno' a almeno 9499 dovrebbe arrivarci.
hth, j.


in timeout no, ho provato piů volte e il risultato č sempre lo stesso
ovvero a 9479 da il messaggio di errore...
ho letto il link che hai postato, sembra che per risolvere
il problema con ADO sia necessario cambiare il valore
del registry, l'esempio della guida č basato su DAO
ciao BlackMagic

         .LockType = adLockPessimistic
Perchč imposti un locking pessimistico e poi
usi una transazione?
ciao
ugo


inizialmente (è un'applicazione di test)
il lock impostato era "adLockOptimistic"
stavo provando tutti i parametri possibili di ADO
per capire se era dovuto a uno di quelli il problema.
Quando ho postato il problema ho postato l'ultima versione
della routine.
