Bonjour à tous,
Débutant dans le monde de WinDev, je tâtonne un peu pour mes premiers développements... et là justement, un petit souci que je n'arrive pas à endiguer m'amène à appeler au secours ! Je vais essayer d'être précis (en espérant ne pas être trop complexe non plus...)
Je développe une application reposant sur une BDD Hyper File (pour l'instant la base est locale), et j'ai commencé par un module permettant de gérer la liste des utilisateurs et leurs droits sur l'utilisation de l'application. Ma table
Utilisateur est simple :
-
IDUtilisateur (numéro automatique)- Nom, Prenom, etc...
(des champs chaîne)-
TypeUtilisateur (numérique sur 1 octet, définit les droits : 1=administrateur, 2=utilisateur type ...)-
login (chaîne mis en clé unique, car je ne veux pas de doublons et je fais des requêtes sur ce champ)- pass
(chaîne)Une autre table
RefTypeUtilisateur liée à la première associe
TypeUtilisateur à sa dénomination réelle.
Le module administration est constitué d'une fenêtre principale, par laquelle on accède à la fenêtre de gestion des utilisateurs : c'est une fenêtre RAD de type
Table. J'ai donc mes colonnes texte pour mes champs texte, et un combo pour choisir le type d'utilisateur (on choisit parmi "Administrateur", "Type 1",etc. et le code correspondant ("1", "2", etc.) est stocké dans la base).
Jusqu'ici, tout va bien ! Mais voilà le problème : je veux empêcher que l'administrateur courant puisse modifier son propre type. Pour cela, j'ai inséré au niveau de la colonne
TypeUtilisateur de ma table, évènement "Sortie", le code suivant :
SI (TableCherche(IDUtilisateur, UtilisateurX:GetID()) = IndiceEnCours()) ET (TypeUtilisateur[IndiceEnCours] <> 1) ALORS
Info("Impossible de modifier le statut de l'administrateur qui utilise actuellement cette application.")
TypeUtilisateur[IndiceEnCours] = 1
FIN
(
UtilisateurX est un objet qui regroupe les infos de l'utilisateur courant,
GetID() renvoie son identifiant dans la table)
En gros, je compare l'indice de la ligne de mon utilisateur à celui de la ligne dont on a modifié le type, si c'est le même ET que le type a été changé etn'est plus 1 (= "administrateur"), l'appli râle et on remet à 1.
Seulement tout cela marche bizarrement !
- si je modifie le type de l'utilisateur courant, ça marche, mais le "info() ne s'affiche pas
- si je modifie le type d'un autre utilisateur (on va dire User2, login=user2), c'est la grande panade ! Dès que je sors du combo modifié, j'ai d'abord une alerte doublon, qui me dit "attention, login 'user2' existe déjà, veuillez changer". Seulement, le seul endroit où j'ai 'user2', c'est au niveau de la ligne actuelle, celle dont je change le type...
On va dire que je change alors pour 'user2bis', et là, non seulement la ligne modifiée n'est pas modifiée, mais en plus, elle vient se copier sur la ligne de l'utilisateur courant ! (d'où le doublon de login, le nouveau login s'incrivant au niveau de l'utilisateur courant, et pas de la ligne modifiée).
Bref ça m'énervouille un peu ! je ne vois pas du tout d'où cela vient... Le RAD permet de faire de belles fenêtres très vite, mais si l'on ne peut facilement modifier leur contenu ensuite...
Voilà, j'espère avoir été le plus clair possible, merci d'avance pour votre aide !