Comment rejeter une combinaison de deux champs s'il existe déjà dans le fichier d'accès MSFT


0

J'ai créé la table "Client" et créé un formulaire pour imiter le processus d'inscription.
En cliquant sur le bouton "Enregistrer", je souhaite rejeter le processus d’enregistrement si la combinaison adresse électronique / mot de passe existe déjà. Sinon, sauvegardez l'enregistrement.

Est-il possible d'implémenter cela dans Microsoft Access?


1
Vous devez affecter une logique au formulaire, ce qui signifie que vous devrez utiliser une macro, ce qui signifie VBA. Désolé pour les mauvaises nouvelles.

@RandolphWest J'ai modifié mon message pour supprimer la restriction VB. Pourriez-vous m'aider avec la façon de mettre en œuvre cela? Je ne cherche pas de code pour être sûr, mais je ne connais pas Access et VB
Chiron

Je suis tellement hors avec Access pour le moment. Ce que je ferais, c'est créer une requête qui vérifie si l'enregistrement existe, ainsi que celui qui l'insère (deux requêtes distinctes, en utilisant le générateur de requêtes si vous le souhaitez). Puis une macro qui exécute la première et si elle ne renvoie aucune valeur, exécutez la seconde (à l'aide d'une instruction If-Then). C'est la façon la plus simple à laquelle je puisse penser, par cœur.

Réponses:


0

Créez une contrainte unique sur les deux colonnes ensemble. Cela entraînera le rejet des doublons par Access en tant que violation de la contrainte unique. Ce que vous ferez avec l'erreur dépendra de votre formulaire. Il y a une réponse SO ici:

https://stackoverflow.com/questions/2127698/can-we-create-multicolumn-unique-indexes-on-ms-access-databases

La réponse pertinente:

Ouvrez la table en mode Création dans MS Access, sélectionnez les trois colonnes que vous souhaitez transformer en index unique, puis cliquez sur la petite clé de la barre d'outils. Vous ne pouvez pas avoir de valeur NULL dans une clé primaire (définie). https://stackoverflow.com/users/2548/remou

Modifiez car vous avez déjà une PK en place et ne souhaitez probablement pas créer une nouvelle PK composite pour le remplacer, mais c'est l'autre option:

Quoi qu'il en soit, voici comment créer un index unique multi-colonnes sur une base de données MS Access. 1. Ouvrez la table en mode Création et Conception, sélectionnez Index. 2.Créez une nouvelle ligne et entrez une valeur dans la cellule Nom de l'index. 3. Choisissez la première colonne du menu déroulant. 4. Ajoutez une nouvelle ligne et laissez la cellule Nom d'index vide. 5.Choisissez la deuxième colonne, etc. https://stackoverflow.com/users/47775/nbolton

Une autre (et une mauvaise) option consiste à interroger d'abord la base de données, puis à ne pas l'insérer, mais cela laisse la porte ouverte à d'éventuels problèmes d'intégrité référentielle.

En note de côté cependant; Êtes-vous sûr de vouloir insérer pour chaque combinaison de nom d'utilisateur (email) / mot de passe unique? Cela pourrait causer des problèmes aux utilisateurs qui oublient leur mot de passe et qui se retrouvent avec des comptes en double. Vous voudrez peut-être penser à un autre identifiant composite (par exemple, identifiant + mot de passe sont uniques ET le courrier électronique est unique dans la base de données. Ou tout simplement, indiquez l'adresse de messagerie unique. Je ne connais pas suffisamment votre problème. quelque chose à quoi penser.


Vous voulez dire en spécifiant les trois colonnes comme clé primaire? La table a déjà une colonne
client_id

Puisque vous avez déjà une PK, utilisez une contrainte unique sur un index (autre des réponses dans le lien SO). Vous aurez donc un PK mais un index supplémentaire avec une contrainte unique contenant les deux autres colonnes.
iivel
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.