Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème avec ADO : modifier le paramètre MaxLocksPerFile dans la base de registre ?

4 réponses
Avatar
Teddy
Bonjour,

J'effectue la mise à jour d'une colonne d'une table Access.
Voici le code :

' MAJ Champ date
StrSQL = "SELECT [Date de livraison effective] FROM REFERENTIEL WHERE [Date de livraison
effective] IS NOT NULL;"
Rset1.Open StrSQL, Cnx, 3, 3
Do While Not Rset1.EOF
var = Trim(Rset1(0))
var = Replace(var, "0:0:0.0", "")
tableau = Split(var, "/")
var = Right("0" & Trim(tableau(2)), 2) & "/" & Right("0" & Trim(tableau(1)), 2) & "/" &
Trim(tableau(0))
Set tableau = Nothing
Rset1(0) = var
Rset1.UpDate
Rset1.MoveNext
Loop
Rset1.Close


Le code ne fonctionne pas pour 10000 lignes.
J'ai un message d'erreur : augmenter le nombre de verrous avec le paramètre
MaxLocksPerFile

Je ne comprends pas pourquoi, je croyais que seul l'enregistrement en cours était
verrouillé ou alors s'agit-il d'un problème de curseur ?
Merci pour votre avis.

Ted

4 réponses

Avatar
Josselin JOUANNET
Bonjour Teddy

Peut tu tester de faire un refresh à chaque ecriture.
Ton recordset va uniquement en avant tu peut donc utilisé un firehorse.
Pour etre plus précis il me faudrait les declarations de ton ado et de ton
recordset.
--
Cordialement
Joss


"Teddy" a écrit :

Bonjour,

J'effectue la mise à jour d'une colonne d'une table Access.
Voici le code :

' MAJ Champ date
StrSQL = "SELECT [Date de livraison effective] FROM REFERENTIEL WHERE [Date de livraison
effective] IS NOT NULL;"
Rset1.Open StrSQL, Cnx, 3, 3
Do While Not Rset1.EOF
var = Trim(Rset1(0))
var = Replace(var, "0:0:0.0", "")
tableau = Split(var, "/")
var = Right("0" & Trim(tableau(2)), 2) & "/" & Right("0" & Trim(tableau(1)), 2) & "/" &
Trim(tableau(0))
Set tableau = Nothing
Rset1(0) = var
Rset1.UpDate
Rset1.MoveNext
Loop
Rset1.Close


Le code ne fonctionne pas pour 10000 lignes.
J'ai un message d'erreur : augmenter le nombre de verrous avec le paramètre
MaxLocksPerFile

Je ne comprends pas pourquoi, je croyais que seul l'enregistrement en cours était
verrouillé ou alors s'agit-il d'un problème de curseur ?
Merci pour votre avis.

Ted








Avatar
Teddy
Le paramétrage de l'ouverture du recordset (ADO 2.8) est sans doute très mal choisi :

Rset1.Open StrSQL, Cnx, 3, 3

1er paramètre après Cnx (connexion)
//======================= CursorType

adOpenDynamic 2 Uses a dynamic cursor. Additions, changes, and deletions by other users
are visible, and all types of movement through the Recordset are allowed, except for
bookmarks, if the provider doesn't support them.
adOpenForwardOnly 0 Default. Uses a forward-only cursor. Identical to a static cursor,
except that you can only scroll forward through records. This improves performance when
you need to make only one pass through a Recordset.
adOpenKeyset 1 Uses a keyset cursor. Like a dynamic cursor, except that you can't see
records that other users add, although records that other users delete are inaccessible
from your Recordset. Data changes by other users are still visible.
adOpenStatic 3 Uses a static cursor, which is a static copy of a set of records that you
can use to find data or generate reports. Additions, changes, or deletions by other users
are not visible.
adOpenUnspecified -1 Does not specify the type of cursor.

2ème paramètre
//========= LockTypeEnum

adLockBatchOptimistic 4 Indicates optimistic batch updates. Required for batch update
mode.
adLockOptimistic 3 Indicates optimistic locking, record by record. The provider uses
optimistic locking, locking records only when you call the Update method.
adLockPessimistic 2 Indicates pessimistic locking, record by record. The provider does
what is necessary to ensure successful editing of the records, usually by locking records
at the data source immediately after editing.
adLockReadOnly 1 Indicates read-only records. You cannot alter the data.
adLockUnspecified -1 Does not specify a type of lock. For clones, the clone is created
with the same lock type as the original.


La combinaison de mes 2 paramètres est sans doute "foireuse" mais elle a toujours
fonctionné jusqu'alors si bien que je ne me posais pas de question.
Je vais modifier ces paramètres pour voir le résultat.

Ted


"Josselin JOUANNET" a écrit dans le message
de news:
Bonjour Teddy

Peut tu tester de faire un refresh à chaque ecriture.
Ton recordset va uniquement en avant tu peut donc utilisé un firehorse.
Pour etre plus précis il me faudrait les declarations de ton ado et de ton
recordset.
--
Cordialement
Joss


"Teddy" a écrit :

Bonjour,

J'effectue la mise à jour d'une colonne d'une table Access.
Voici le code :

' MAJ Champ date
StrSQL = "SELECT [Date de livraison effective] FROM REFERENTIEL WHERE [Date de
livraison
effective] IS NOT NULL;"
Rset1.Open StrSQL, Cnx, 3, 3
Do While Not Rset1.EOF
var = Trim(Rset1(0))
var = Replace(var, "0:0:0.0", "")
tableau = Split(var, "/")
var = Right("0" & Trim(tableau(2)), 2) & "/" & Right("0" & Trim(tableau(1)), 2) &
"/" &
Trim(tableau(0))
Set tableau = Nothing
Rset1(0) = var
Rset1.UpDate
Rset1.MoveNext
Loop
Rset1.Close


Le code ne fonctionne pas pour 10000 lignes.
J'ai un message d'erreur : augmenter le nombre de verrous avec le paramètre
MaxLocksPerFile

Je ne comprends pas pourquoi, je croyais que seul l'enregistrement en cours était
verrouillé ou alors s'agit-il d'un problème de curseur ?
Merci pour votre avis.

Ted










Avatar
Josselin JOUANNET
Bonjour Teddy

Par rapport a tes parametres :
CursorType =
pour tester je te conseil adOpenDynamic, mais attention c'est gourmand
LockTypeEnum
tu as déjà le reglage le plus laxe adLockOptimistic
Essai quand meme de mettre un refresh sur ton recordset a chaque ecriture
(aprés to update) pour liberer les lock

Pour aller plus loin je te conseil de lire ce document
ftp://ftp2.developpez.be/developps/vb/Les recordsets ADO.pdf
--
Cordialement
Joss


"Teddy" a écrit :

Le paramétrage de l'ouverture du recordset (ADO 2.8) est sans doute très mal choisi :

Rset1.Open StrSQL, Cnx, 3, 3

1er paramètre après Cnx (connexion)
//======================= > CursorType

adOpenDynamic 2 Uses a dynamic cursor. Additions, changes, and deletions by other users
are visible, and all types of movement through the Recordset are allowed, except for
bookmarks, if the provider doesn't support them.
adOpenForwardOnly 0 Default. Uses a forward-only cursor. Identical to a static cursor,
except that you can only scroll forward through records. This improves performance when
you need to make only one pass through a Recordset.
adOpenKeyset 1 Uses a keyset cursor. Like a dynamic cursor, except that you can't see
records that other users add, although records that other users delete are inaccessible
from your Recordset. Data changes by other users are still visible.
adOpenStatic 3 Uses a static cursor, which is a static copy of a set of records that you
can use to find data or generate reports. Additions, changes, or deletions by other users
are not visible.
adOpenUnspecified -1 Does not specify the type of cursor.

2ème paramètre
//========= > LockTypeEnum

adLockBatchOptimistic 4 Indicates optimistic batch updates. Required for batch update
mode.
adLockOptimistic 3 Indicates optimistic locking, record by record. The provider uses
optimistic locking, locking records only when you call the Update method.
adLockPessimistic 2 Indicates pessimistic locking, record by record. The provider does
what is necessary to ensure successful editing of the records, usually by locking records
at the data source immediately after editing.
adLockReadOnly 1 Indicates read-only records. You cannot alter the data.
adLockUnspecified -1 Does not specify a type of lock. For clones, the clone is created
with the same lock type as the original.


La combinaison de mes 2 paramètres est sans doute "foireuse" mais elle a toujours
fonctionné jusqu'alors si bien que je ne me posais pas de question.
Je vais modifier ces paramètres pour voir le résultat.

Ted


"Josselin JOUANNET" a écrit dans le message
de news:
> Bonjour Teddy
>
> Peut tu tester de faire un refresh à chaque ecriture.
> Ton recordset va uniquement en avant tu peut donc utilisé un firehorse.
> Pour etre plus précis il me faudrait les declarations de ton ado et de ton
> recordset.
> --
> Cordialement
> Joss
>
>
> "Teddy" a écrit :
>
>> Bonjour,
>>
>> J'effectue la mise à jour d'une colonne d'une table Access.
>> Voici le code :
>>
>> ' MAJ Champ date
>> StrSQL = "SELECT [Date de livraison effective] FROM REFERENTIEL WHERE [Date de
>> livraison
>> effective] IS NOT NULL;"
>> Rset1.Open StrSQL, Cnx, 3, 3
>> Do While Not Rset1.EOF
>> var = Trim(Rset1(0))
>> var = Replace(var, "0:0:0.0", "")
>> tableau = Split(var, "/")
>> var = Right("0" & Trim(tableau(2)), 2) & "/" & Right("0" & Trim(tableau(1)), 2) &
>> "/" &
>> Trim(tableau(0))
>> Set tableau = Nothing
>> Rset1(0) = var
>> Rset1.UpDate
>> Rset1.MoveNext
>> Loop
>> Rset1.Close
>>
>>
>> Le code ne fonctionne pas pour 10000 lignes.
>> J'ai un message d'erreur : augmenter le nombre de verrous avec le paramètre
>> MaxLocksPerFile
>>
>> Je ne comprends pas pourquoi, je croyais que seul l'enregistrement en cours était
>> verrouillé ou alors s'agit-il d'un problème de curseur ?
>> Merci pour votre avis.
>>
>> Ted
>>
>>
>>
>>
>>
>>





Avatar
Teddy
Merci pour le document.
Ted

"Josselin JOUANNET" a écrit dans le message
de news:
Bonjour Teddy

Par rapport a tes parametres :
CursorType > pour tester je te conseil adOpenDynamic, mais attention c'est gourmand
LockTypeEnum
tu as déjà le reglage le plus laxe adLockOptimistic
Essai quand meme de mettre un refresh sur ton recordset a chaque ecriture
(aprés to update) pour liberer les lock

Pour aller plus loin je te conseil de lire ce document
ftp://ftp2.developpez.be/developps/vb/Les recordsets ADO.pdf
--
Cordialement
Joss


"Teddy" a écrit :

Le paramétrage de l'ouverture du recordset (ADO 2.8) est sans doute très mal choisi :

Rset1.Open StrSQL, Cnx, 3, 3

1er paramètre après Cnx (connexion)
//======================= >> CursorType

adOpenDynamic 2 Uses a dynamic cursor. Additions, changes, and deletions by other users
are visible, and all types of movement through the Recordset are allowed, except for
bookmarks, if the provider doesn't support them.
adOpenForwardOnly 0 Default. Uses a forward-only cursor. Identical to a static cursor,
except that you can only scroll forward through records. This improves performance when
you need to make only one pass through a Recordset.
adOpenKeyset 1 Uses a keyset cursor. Like a dynamic cursor, except that you can't see
records that other users add, although records that other users delete are inaccessible
from your Recordset. Data changes by other users are still visible.
adOpenStatic 3 Uses a static cursor, which is a static copy of a set of records that
you
can use to find data or generate reports. Additions, changes, or deletions by other
users
are not visible.
adOpenUnspecified -1 Does not specify the type of cursor.

2ème paramètre
//========= >> LockTypeEnum

adLockBatchOptimistic 4 Indicates optimistic batch updates. Required for batch update
mode.
adLockOptimistic 3 Indicates optimistic locking, record by record. The provider uses
optimistic locking, locking records only when you call the Update method.
adLockPessimistic 2 Indicates pessimistic locking, record by record. The provider does
what is necessary to ensure successful editing of the records, usually by locking
records
at the data source immediately after editing.
adLockReadOnly 1 Indicates read-only records. You cannot alter the data.
adLockUnspecified -1 Does not specify a type of lock. For clones, the clone is created
with the same lock type as the original.


La combinaison de mes 2 paramètres est sans doute "foireuse" mais elle a toujours
fonctionné jusqu'alors si bien que je ne me posais pas de question.
Je vais modifier ces paramètres pour voir le résultat.

Ted


"Josselin JOUANNET" a écrit dans le
message
de news:
> Bonjour Teddy
>
> Peut tu tester de faire un refresh à chaque ecriture.
> Ton recordset va uniquement en avant tu peut donc utilisé un firehorse.
> Pour etre plus précis il me faudrait les declarations de ton ado et de ton
> recordset.
> --
> Cordialement
> Joss
>
>
> "Teddy" a écrit :
>
>> Bonjour,
>>
>> J'effectue la mise à jour d'une colonne d'une table Access.
>> Voici le code :
>>
>> ' MAJ Champ date
>> StrSQL = "SELECT [Date de livraison effective] FROM REFERENTIEL WHERE [Date de
>> livraison
>> effective] IS NOT NULL;"
>> Rset1.Open StrSQL, Cnx, 3, 3
>> Do While Not Rset1.EOF
>> var = Trim(Rset1(0))
>> var = Replace(var, "0:0:0.0", "")
>> tableau = Split(var, "/")
>> var = Right("0" & Trim(tableau(2)), 2) & "/" & Right("0" & Trim(tableau(1)), 2) &
>> "/" &
>> Trim(tableau(0))
>> Set tableau = Nothing
>> Rset1(0) = var
>> Rset1.UpDate
>> Rset1.MoveNext
>> Loop
>> Rset1.Close
>>
>>
>> Le code ne fonctionne pas pour 10000 lignes.
>> J'ai un message d'erreur : augmenter le nombre de verrous avec le paramètre
>> MaxLocksPerFile
>>
>> Je ne comprends pas pourquoi, je croyais que seul l'enregistrement en cours était
>> verrouillé ou alors s'agit-il d'un problème de curseur ?
>> Merci pour votre avis.
>>
>> Ted
>>
>>
>>
>>
>>
>>