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

Interdir la suppression d'un enregistrement s'il est utilisé par un autre

3 réponses
Avatar
Olivier C.
Bonjours à tous,

Voilà mon problème :
J'ai une trés grosse base de donnée de plus de 60 tables (Taille actuelle
150 Mo environ).
Parmis ces tables j'ai des listes qui peuvent comporter plusieur champs tel
que : Services, Particules, Catégories, Taux de TVA, Exercices comptables...
D'autres tables sont reliées à ces listes tel que : Courriers, Tâches,
Emails, Factures, Devis...
J'ai un bouton suppression sur les formulaires des listes.
Actuellement le bouton suppression affiche un message d'avertissement comme
quoi le suppression de cet élement peut entrainer la perte de données dans
d'autres enregistrements.
Le problème est que cela n'ai pas d'une trés grand sécurité face à un
utilisateur lambda.

Ce que je voudrais :
Je voudrais donc interdir la suppression d'un élément d'une liste si
celui-ci est utilisé par un autre enregistrement d'une autre table.
J'ai bien pensé à mettre un test avec une fonction DLookup pour chaque table
mais vu le nombre de table à tester cela s'avère assez fastidieux.
Aussi je me demande s'il n'existerait pas un autre moyen beaucoup plus
simple.

Merci de votre aide
Olivier C.

3 réponses

Avatar
3stone
Salut,

"Olivier C."
| Voilà mon problème :
| J'ai une trés grosse base de donnée de plus de 60 tables (Taille actuelle
| 150 Mo environ).
| Parmis ces tables j'ai des listes qui peuvent comporter plusieur champs tel
| que : Services, Particules, Catégories, Taux de TVA, Exercices comptables...
| D'autres tables sont reliées à ces listes tel que : Courriers, Tâches,
| Emails, Factures, Devis...
| J'ai un bouton suppression sur les formulaires des listes.
| Actuellement le bouton suppression affiche un message d'avertissement comme
| quoi le suppression de cet élement peut entrainer la perte de données dans
| d'autres enregistrements.
| Le problème est que cela n'ai pas d'une trés grand sécurité face à un
| utilisateur lambda.
|
| Ce que je voudrais :
| Je voudrais donc interdir la suppression d'un élément d'une liste si
| celui-ci est utilisé par un autre enregistrement d'une autre table.
| J'ai bien pensé à mettre un test avec une fonction DLookup pour chaque table
| mais vu le nombre de table à tester cela s'avère assez fastidieux.
| Aussi je me demande s'il n'existerait pas un autre moyen beaucoup plus
| simple.


Si je comprends ton problème, tu as coché la case "effacer en cascade"
dans la fenêtre des relations...

ce qu'il ne faut évidement pas faire !


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
Olivier C.
La fenêtre des relations est vide, les relations se font en SQL directemant
dans les formulaires et en VBA.

Je n'avais effectivement pas pensé à l'intégrité référentielle, néanmoins vu
le nombre de table et de relation, il serait trop fastidieux de rensigner la
fenêtre des relations, à moins qu'il existe un moyen de générer toutes les
relations automatiquement dans cette fenêtre.

Sinon en l'état actuelle de mes connaissances sur le SQL, il ne semble que
celui-ci ne gère pas l'intégrité référentielle.Néanmoins, si cela existe ça
pourrais être une piste intéressante.

Par conséquent, je pense que la solution, s'il y en a une, serait à chercher
du coté du language VBA, mais là je ne trouve pas de solution ormis un test
sur l'ensemble des tables.

Olivier C.

"3stone" a écrit dans le message de news:
%
Salut,

"Olivier C."
| Voilà mon problème :
| J'ai une trés grosse base de donnée de plus de 60 tables (Taille
actuelle
| 150 Mo environ).
| Parmis ces tables j'ai des listes qui peuvent comporter plusieur champs
tel
| que : Services, Particules, Catégories, Taux de TVA, Exercices
comptables...
| D'autres tables sont reliées à ces listes tel que : Courriers, Tâches,
| Emails, Factures, Devis...
| J'ai un bouton suppression sur les formulaires des listes.
| Actuellement le bouton suppression affiche un message d'avertissement
comme
| quoi le suppression de cet élement peut entrainer la perte de données
dans
| d'autres enregistrements.
| Le problème est que cela n'ai pas d'une trés grand sécurité face à un
| utilisateur lambda.
|
| Ce que je voudrais :
| Je voudrais donc interdir la suppression d'un élément d'une liste si
| celui-ci est utilisé par un autre enregistrement d'une autre table.
| J'ai bien pensé à mettre un test avec une fonction DLookup pour chaque
table
| mais vu le nombre de table à tester cela s'avère assez fastidieux.
| Aussi je me demande s'il n'existerait pas un autre moyen beaucoup plus
| simple.


Si je comprends ton problème, tu as coché la case "effacer en cascade"
dans la fenêtre des relations...

ce qu'il ne faut évidement pas faire !


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/




Avatar
J-Pierre
Bonsoir,

3stone a mille fois raison.

C'est bien la première fois que je vois quelqu'un ne pas vouloir utiliser l'intégrité référentielle au prétexte qu'il est trop
fastidieux de "renseigner la fenêtre des relations". Et malgré l'état actuel de tes connaissances, SQL a justement été inventé
par IBM pour, parmi d'autres avantages, gérer l'intégrité référentielle.

Et il est beaucoup plus fastidieux d'essayer de récupérer des données perdues (ou de récupérer les erreurs dans une base car
le développeur n'est malheureusement pas parfait) que de passer un peu de temps à définir une base SQL correctement.

Au risque de te paraître un peu dur, mais sans vouloir t'agresser, je dirai que si tu ne veux pas utiliser l'intégrité
référentielle, tu ferais sans doute mieux de confier ce développement à une autre personne.

J-Pierre

"Olivier C." a écrit dans le message de news: 44133133$0$161$
La fenêtre des relations est vide, les relations se font en SQL directemant dans les formulaires et en VBA.

Je n'avais effectivement pas pensé à l'intégrité référentielle, néanmoins vu le nombre de table et de relation, il serait
trop fastidieux de rensigner la fenêtre des relations, à moins qu'il existe un moyen de générer toutes les relations
automatiquement dans cette fenêtre.

Sinon en l'état actuelle de mes connaissances sur le SQL, il ne semble que celui-ci ne gère pas l'intégrité
référentielle.Néanmoins, si cela existe ça pourrais être une piste intéressante.

Par conséquent, je pense que la solution, s'il y en a une, serait à chercher du coté du language VBA, mais là je ne trouve
pas de solution ormis un test sur l'ensemble des tables.

Olivier C.

"3stone" a écrit dans le message de news: %
Salut,

"Olivier C."
| Voilà mon problème :
| J'ai une trés grosse base de donnée de plus de 60 tables (Taille actuelle
| 150 Mo environ).
| Parmis ces tables j'ai des listes qui peuvent comporter plusieur champs tel
| que : Services, Particules, Catégories, Taux de TVA, Exercices comptables...
| D'autres tables sont reliées à ces listes tel que : Courriers, Tâches,
| Emails, Factures, Devis...
| J'ai un bouton suppression sur les formulaires des listes.
| Actuellement le bouton suppression affiche un message d'avertissement comme
| quoi le suppression de cet élement peut entrainer la perte de données dans
| d'autres enregistrements.
| Le problème est que cela n'ai pas d'une trés grand sécurité face à un
| utilisateur lambda.
|
| Ce que je voudrais :
| Je voudrais donc interdir la suppression d'un élément d'une liste si
| celui-ci est utilisé par un autre enregistrement d'une autre table.
| J'ai bien pensé à mettre un test avec une fonction DLookup pour chaque table
| mais vu le nombre de table à tester cela s'avère assez fastidieux.
| Aussi je me demande s'il n'existerait pas un autre moyen beaucoup plus
| simple.


Si je comprends ton problème, tu as coché la case "effacer en cascade"
dans la fenêtre des relations...

ce qu'il ne faut évidement pas faire !


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/