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

Access et problème d'accès..

2 réponses
Avatar
Driss HANIB
Bonjour,

je vois que la période est à l'action VB sur Access, alors je me lance par
rapport à un problème d'accès simultané à Access

1. Contexte
VB6 SP3 et Access97 par DAO (et oui encore..)

2. Action demandée
Une base access placée sur un serveur donc commun, est appelée par
plusiseurs instances d'un même programme, chacune étant sur un poste du
réseau.
Le nombre d'accès simultanés (réellement) est 2 à 3 postes.
L'action qui me pose problème est la suivante .
Je veux enregistrer des données en deux temps (en fait les médicaments d'une
ordonnance..).
L'exigence est d'avoir un numéro unique d'ordonnance .
ma démarche est la suivante .
J'interroge une table qui contient les numéros déjà attribués : dans cette
table il y a bien sur un champ automatique, mais ce n'est pas celui la qui
m'intéresse.
Le numéro de l'ordonnance comprend la date du jour et un numéro d'ordre pour
le jour choisi.
Je dois donc, pour le jour choisi, rechercher le dernier numéro d'ordre ,
l'incrémenter et ensuite enregistrer ce numéro d'ordre pour le réserver.
je récupère bien sur aussi le numéro interne (champ automatique) qui me
servira à lier aux autres tables.
Toute l'action fonctionne et est utilisée depuis plusieurs années..

Toute ? Non .. car (non pas un village gaulois) il arrive, très rarement,
mais c'est déjà trop, que de deux postes différents il y ait la même demande
(pour ce numéro dans la journée) au même moment ..
Les deux versions prennent alors le même numéro d'ordonnance ce qui est
inconcevable, car interdit.

3. Quels remedes
L'idée première à laquelle je pense est de faire un accès qui bloque les
autres tentatives d'accès à la table incriminée...
Comment réaliser cela ? Comment faire patienter les autres demandes, le
temps que la première requête soit terminée..? (gestion des erreurs)

L'autre idée à la quelle je pense également, mais c'est une refonte complète
du programmes est de faire une apllication client-serveur (2T ou 3T). C'est
donc le serveur qui gererait, l'une à la suite de l'autres les différentes
demandes...
Mais là aussi, je regarde un peu comment cela fonctionne.
J'ai trouvé sur le net, quelques programmes client-serveur d'accès a access.
mais je nage un peu plus encore..: surtout la partie justement de traitement
des demandes, les unes après les autres..

Donc, pour résumer, ma première demande concerne ma première idée : en DAO,
comment restreindre l'accès à une table, et en parallèle, comment gérer
l'attente par les autres demandeurs...

Mais vos pistes pour le client-serveur m'intéressent également, afin de me
préparer psychologiquement.

Autre question générale, lors de l'accès à une base de données, comment
gérer les erreurs, car pour l'instant mon programme ne les gère pas et j'ai
de temps en temps des plantades qui me font perdre des données . Là aussi un
exemple, ou une idée feraient mon bonheur ;o)

Merci

Driss

2 réponses

Avatar
Patrick JONIEC
Bonjour

J'ai rencontré ce problème dans un programme de gestion commerciale en
réseau sur 8 postes, avec attribution d'un numéro de devis (donc 100%
identique).

Lors de l'attribution du numéro :
- j'ouvre la table en mode exclusif : OpenRecordset(table,dbOpenDynaset,
dbDenyRead + dbDenyWrite)
- j'attribu le numéro
- je ferme la table, et la réouvre en mode normal
- reprendre l'enregistrement nouvellement créé
- continuer le reste du traitement

Par contre, la gestion des erreur est impérative, car sinon, si un autre
utilisateur essaye d'accéder à la table, il aura une erreur
(table vérouillée par un autre utilisateur)
pour cela, il faut utiliser une boucle du type :

on error resume next
do
err.clear
Action sur la base
if err.number<>0 then
if msgbox("erreur " & err.number & " " & err.description & vbcrlf &
"Voulez-vous ré-essayer ?")=vbno then
exit loop
endif
else
exit loop
endif
loop while true
if err.number<>0 then
traiter le cas où l'action n'as pas été réalisée pour éviter que le reste
du programme provoque d'autres erreurs
endif

"Driss HANIB" a écrit dans le message de
news:%
Bonjour,

je vois que la période est à l'action VB sur Access, alors je me lance par
rapport à un problème d'accès simultané à Access

1. Contexte
VB6 SP3 et Access97 par DAO (et oui encore..)

2. Action demandée
Une base access placée sur un serveur donc commun, est appelée par
plusiseurs instances d'un même programme, chacune étant sur un poste du
réseau.
Le nombre d'accès simultanés (réellement) est 2 à 3 postes.
L'action qui me pose problème est la suivante .
Je veux enregistrer des données en deux temps (en fait les médicaments
d'une ordonnance..).
L'exigence est d'avoir un numéro unique d'ordonnance .
ma démarche est la suivante .
J'interroge une table qui contient les numéros déjà attribués : dans cette
table il y a bien sur un champ automatique, mais ce n'est pas celui la qui
m'intéresse.
Le numéro de l'ordonnance comprend la date du jour et un numéro d'ordre
pour le jour choisi.
Je dois donc, pour le jour choisi, rechercher le dernier numéro d'ordre ,
l'incrémenter et ensuite enregistrer ce numéro d'ordre pour le réserver.
je récupère bien sur aussi le numéro interne (champ automatique) qui me
servira à lier aux autres tables.
Toute l'action fonctionne et est utilisée depuis plusieurs années..

Toute ? Non .. car (non pas un village gaulois) il arrive, très rarement,
mais c'est déjà trop, que de deux postes différents il y ait la même
demande (pour ce numéro dans la journée) au même moment ..
Les deux versions prennent alors le même numéro d'ordonnance ce qui est
inconcevable, car interdit.

3. Quels remedes
L'idée première à laquelle je pense est de faire un accès qui bloque les
autres tentatives d'accès à la table incriminée...
Comment réaliser cela ? Comment faire patienter les autres demandes, le
temps que la première requête soit terminée..? (gestion des erreurs)

L'autre idée à la quelle je pense également, mais c'est une refonte
complète du programmes est de faire une apllication client-serveur (2T ou
3T). C'est donc le serveur qui gererait, l'une à la suite de l'autres les
différentes demandes...
Mais là aussi, je regarde un peu comment cela fonctionne.
J'ai trouvé sur le net, quelques programmes client-serveur d'accès a
access. mais je nage un peu plus encore..: surtout la partie justement de
traitement des demandes, les unes après les autres..

Donc, pour résumer, ma première demande concerne ma première idée : en
DAO, comment restreindre l'accès à une table, et en parallèle, comment
gérer l'attente par les autres demandeurs...

Mais vos pistes pour le client-serveur m'intéressent également, afin de me
préparer psychologiquement.

Autre question générale, lors de l'accès à une base de données, comment
gérer les erreurs, car pour l'instant mon programme ne les gère pas et
j'ai de temps en temps des plantades qui me font perdre des données . Là
aussi un exemple, ou une idée feraient mon bonheur ;o)

Merci

Driss



Avatar
Driss HANIB
Merci Patrick,

cela ressemble effectivement à ce qu'il me faut...
je vais étudier cela et le mettre en place.
Si tu as d'autres données n'hésites pas

Driss

"Patrick JONIEC" a écrit dans le message de
news:
Bonjour

J'ai rencontré ce problème dans un programme de gestion commerciale en
réseau sur 8 postes, avec attribution d'un numéro de devis (donc 100%
identique).

Lors de l'attribution du numéro :
- j'ouvre la table en mode exclusif : OpenRecordset(table,dbOpenDynaset,
dbDenyRead + dbDenyWrite)
- j'attribu le numéro
- je ferme la table, et la réouvre en mode normal
- reprendre l'enregistrement nouvellement créé
- continuer le reste du traitement

Par contre, la gestion des erreur est impérative, car sinon, si un autre
utilisateur essaye d'accéder à la table, il aura une erreur
(table vérouillée par un autre utilisateur)
pour cela, il faut utiliser une boucle du type :

on error resume next
do
err.clear
Action sur la base
if err.number<>0 then
if msgbox("erreur " & err.number & " " & err.description & vbcrlf &
"Voulez-vous ré-essayer ?")=vbno then
exit loop
endif
else
exit loop
endif
loop while true
if err.number<>0 then
traiter le cas où l'action n'as pas été réalisée pour éviter que le
reste du programme provoque d'autres erreurs
endif

"Driss HANIB" a écrit dans le message de
news:%
Bonjour,

je vois que la période est à l'action VB sur Access, alors je me lance
par rapport à un problème d'accès simultané à Access

1. Contexte
VB6 SP3 et Access97 par DAO (et oui encore..)

2. Action demandée
Une base access placée sur un serveur donc commun, est appelée par
plusiseurs instances d'un même programme, chacune étant sur un poste du
réseau.
Le nombre d'accès simultanés (réellement) est 2 à 3 postes.
L'action qui me pose problème est la suivante .
Je veux enregistrer des données en deux temps (en fait les médicaments
d'une ordonnance..).
L'exigence est d'avoir un numéro unique d'ordonnance .
ma démarche est la suivante .
J'interroge une table qui contient les numéros déjà attribués : dans
cette table il y a bien sur un champ automatique, mais ce n'est pas celui
la qui m'intéresse.
Le numéro de l'ordonnance comprend la date du jour et un numéro d'ordre
pour le jour choisi.
Je dois donc, pour le jour choisi, rechercher le dernier numéro d'ordre ,
l'incrémenter et ensuite enregistrer ce numéro d'ordre pour le réserver.
je récupère bien sur aussi le numéro interne (champ automatique) qui me
servira à lier aux autres tables.
Toute l'action fonctionne et est utilisée depuis plusieurs années..

Toute ? Non .. car (non pas un village gaulois) il arrive, très rarement,
mais c'est déjà trop, que de deux postes différents il y ait la même
demande (pour ce numéro dans la journée) au même moment ..
Les deux versions prennent alors le même numéro d'ordonnance ce qui est
inconcevable, car interdit.

3. Quels remedes
L'idée première à laquelle je pense est de faire un accès qui bloque les
autres tentatives d'accès à la table incriminée...
Comment réaliser cela ? Comment faire patienter les autres demandes, le
temps que la première requête soit terminée..? (gestion des erreurs)

L'autre idée à la quelle je pense également, mais c'est une refonte
complète du programmes est de faire une apllication client-serveur (2T ou
3T). C'est donc le serveur qui gererait, l'une à la suite de l'autres les
différentes demandes...
Mais là aussi, je regarde un peu comment cela fonctionne.
J'ai trouvé sur le net, quelques programmes client-serveur d'accès a
access. mais je nage un peu plus encore..: surtout la partie justement de
traitement des demandes, les unes après les autres..

Donc, pour résumer, ma première demande concerne ma première idée : en
DAO, comment restreindre l'accès à une table, et en parallèle, comment
gérer l'attente par les autres demandeurs...

Mais vos pistes pour le client-serveur m'intéressent également, afin de
me préparer psychologiquement.

Autre question générale, lors de l'accès à une base de données, comment
gérer les erreurs, car pour l'instant mon programme ne les gère pas et
j'ai de temps en temps des plantades qui me font perdre des données . Là
aussi un exemple, ou une idée feraient mon bonheur ;o)

Merci

Driss