Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Sécurité
Sécurité Le forum qui s'occupe de votre préoccupation de sécuriser l'accès à votre application Access, ainsi qu'à la sécurité des données.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/01/2007, 09h08   #1
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Par défaut Conception de base : accès concurrents

Bonjour,

Je réalise une base qui fonctionne comme un compteur : les utilisateurs ont simplement une interface pour ajouter ou soustraire.
Comme il s'agit d'un stock, la valeur ne devrait evidemment jamais arriver sous 0.

Je procède en gros actuellement comme ceci pour un retrait :

Code :
1
2
3
4
5
6
7
 
txtDispo.Requery
If txtDispo > 0 Then
DoCmd.RunSQL "UPDATE tblStock set Dispo = Dispo - 1 WHERE IdSite = " & IdSite
Else
Msgbox "Le stock n'est pas suffisant"
End If
Mais imaginons que mon stock soit à 1 et qu'un autre utilisateur fasse un retrait entre le moment ou je rafraichis mon formulaire et le moment ou je fais ma requete, je vais me retrouver à -1.

J'avais pensé faire
Code :
DoCmd.RunSQL "UPDATE tblStock set Dispo = Dispo - 1 WHERE IdSite = " & IdSite  & "AND Dispo > 0"
Mais comment savoir que l'UPDATE n'a pas été effectué pour avertir l'utilisateur que son retrait n'a pas été possible ?

Merci de votre aide.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 09h13   #2
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Dans ce cas, il faut utiliser DAO

Code :
1
2
3
4
Dim Db as dao.Database
Set Db=Currentdb
Db.Execute "UPDATE tblStock set Dispo = Dispo - 1 WHERE IdSite = " & IdSite  & "AND Dispo > 0"
If Db.RecordsAffected=0 Then Msgbox "Pas mis à jour"
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 09h16   #3
Membre confirmé
 
Avatar de maxeur
 
Inscription : janvier 2007
Messages : 390
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : janvier 2007
Messages : 390
Points : 205
Points : 205
il faudrait que tu crée une table connection utilisateur et si un utilisateur est déjà connecté tu empeche la mise à jour et tu affiche une msgbox

je dévelloppe

tu n'a qu'a mettre une variable à 1 lorsque l'utilisateur est connecté et puis si cette variable est à 1 tu affiche imppossible de mettre à jour la base
maxeur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 09h42   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Merci pour vos réponses.
Ce forum est vraiment excellent.

Dans le cas de "Db.RecordsAffected", est-ce que je suis sur de compter la requete de mon utilisateur ou est-ce que je risque de compter la requete d'un utilisateur ayant fait une requete entre temps ?

(mais non je ne suis pas traumatisé par les accès simultanés).
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 09h58   #5
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 354
Points : 29 270
Points : 29 270
Ce qui est possible, c'est d'enregistrer les lignes d'ajout ou de soustraction.
De cette manière, tu garde une sorte de journal, ou d'historique et en cas de problème, il devient possible de faire un refresh ou requery de tes données.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 10h05   #6
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Je préfère ma solution

Citation:
Dans le cas de "Db.RecordsAffected", est-ce que je suis sur de compter la requete de mon utilisateur ou est-ce que je risque de compter la requete d'un utilisateur ayant fait une requete entre temps ?
Ca s'applique à l'objet Database de la session du poste client.

Donc, ça répond bien à ton cas
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h36.


 
 
 
 
Partenaires

Hébergement Web