J'ai une table qui contient plusieurs centaines d'enregistrements mais j'ai une propriété spéciale. Je veux seulement que l'utilisateur puisse sélectionner cette propriété 50 fois cependant. Comment puis-je définir une limite et renvoyer une erreur lorsque la limite est atteinte?Définition d'une limite d'enregistrement maximale en accès
Répondre
Je crois que ce Renick voulait dire était avant votre opération de sauvegarde que vous pourriez faire quelque chose comme
SELECT Count(*)
FROM tblFoo
WHERE Bar=’Thing_you_only_want_50_of’
alors vous vérifier si ce chiffre est supérieur ou égal à 50, si c'est alors retourner une erreur et ne pas laisser l'utilisateur sauvegarder. Autant que je sache, il n'y a aucun moyen de restreindre cela au niveau de DB mais l'accès 2010 a plus de contrôles tels que les déclencheurs etc. Pas sûr quelle version vous utilisez mais si vous êtes sur 2010, il pourrait être utile de vérifier out
"Autant que je sache, il n'y a aucun moyen de restreindre cela au niveau DB" - voir la réponse que je viens de poster sur les contraintes 'CHECK'. – onedaywhen
La question est très floue. Il n'est pas clair si «sélectionner» signifie «afficher limité à 50 éléments» ou «permettre à l'utilisateur de créer des enregistrements de données limités à 50 éléments». Je ne parlerai pas de la première interprétation, car cela ne me semble pas pertinent. En supposant que certaines autres choses, comme un backend Jet/ACE (la seule façon dont la question a du sens pour moi), comment vous accomplir cela dépend de votre version d'Access.
jusqu'à et y compris Access 2007: vous devrez appliquer la limitation dans l'interface utilisateur de votre application. EDIT: Comme @onedayqui l'a souligné dans sa réponse, il est possible d'utiliser DDL en mode SQL 92 pour ajouter une CHECK CONSTRAINT qui fonctionne sur l'enregistrement en cours basé sur des groupes d'autres enregistrements. Je ne savais pas que c'était possible quand j'ai posté.
Dans Access 2010, vous pouvez utiliser les nouvelles macros de données de niveau table (qui fonctionnent comme des déclencheurs) et limiter l'utilisateur aux 50 sélections.
Je ne fournis pas de détails pour l'un ou l'autre de ces éléments, car il n'y a tout simplement pas assez d'informations pour le faire.
"jusqu'à et y compris Access 2007: vous devrez appliquer la limitation dans l'interface utilisateur de votre application" - incorrect. Le plus simple est d'utiliser une contrainte 'CHECK'; plus compliqué est d'ajouter une colonne de séquence, des règles de validation et des contraintes composées 'UNIQUE'. Voir ma réponse juste posté. – onedaywhen
Pour ajouter à @Kevin Ross, le mécanisme "au niveau DB" pour appliquer la règle est une contrainte CHECK
.
ALTER TABLE tblFoo ADD
CONSTRAINT tblFoo_bar__50_limit
CHECK (NOT EXISTS (
SELECT T1.Bar
FROM tblFoo AS T1
WHERE T1.Bar = 'Thing_you_only_want_50_of'
GROUP
BY T1.Bar
HAVING COUNT(*) > 50
));
CHECK
contraintes existent dans Jet de la version 4.0 (vers Access 2000) et existe toujours dans ACE (par exemple Access 2010).
Vous devez créer la contrainte CHECK
à l'aide de SQL DDL dans ANSI-92 Query Mode. Non, vous ne pouvez pas créer des contraintes CHECK
en utilisant DAO ou l'interface d'accès mais cela ne signifie pas qu'elles n'existent pas;)
Si pour une raison quelconque vous avez une objection philosophique à SQL DDL, vous pourriez faire des choses similaires avec une colonne 'sequence' supplémentaire, des règles de validation au niveau des lignes et une contrainte composée UNIQUE
, qui peuvent toutes être créées à l'aide de DAO ou de l'interface d'accès et sont disponibles dans Jet depuis plusieurs années.
Voici une esquisse de ce que cette approche alternative pourrait ressembler à:
ALTER TABLE tblFoo ADD
Bar__sequence INTEGER;
ALTER TABLE tblFoo ADD
CONSTRAINT tblFoo_bar_sequence__values
CHECK (
(
Bar <> 'Thing_you_only_want_50_of'
AND Bar__sequence IS NULL
)
OR (
Bar = 'Thing_you_only_want_50_of'
AND Bar__sequence BETWEEN 1 AND 50
)
);
ALTER TABLE tblFoo ADD
CONSTRAINT tblFoo_bar__50_limit
UNIQUE (Bar__sequence);
Dans ce cas, les résultats des trois instructions SQL DDL ci-dessus peuvent être obtenus en utilisant le Concepteur de table dans l'interface utilisateur Accès-à-dire ajouter la colonne, modifiez la règle de validation de table et ajoutez un index unique.
Eh bien, c'est nouveau pour moi. Je ne savais pas que Jet/ACE supportait ce genre de contrainte. C'est dommage que MS n'expose pas cela dans l'interface utilisateur Access, ni ne l'implémente dans DAO. Vous pouvez obtenir la valeur de toutes les contraintes via DAO en examinant la propriété CheckConstraints d'un TableDef. Cela impliquerait que vous pouvez créer une CheckConstraint en créant cette propriété et en lui affectant une instruction valide, mais cela ne semble pas fonctionner de cette façon, malheureusement (juste essayé). Apparemment, toutes les données pertinentes sur CheckConstraint ne sont pas stockées dans la propriété par ce nom. –
tblFoo_bar__50_limit: 'CHECK ((SELECT Count (Barre) FROM tblFoo O WH Bar =" Thing_you_only_want_50_of ") <= 50)' – HansUp
@HansUp: En effet, il y a plus d'une façon de skinner le chat;) – onedaywhen
- 1. Limite WebClient Taille maximale du fichier DownloadFile
- 2. Sélectionnez la limite maximale 1 du groupe
- 3. Définition d'une largeur maximale pour LinearLayout
- 4. Limite maximale pour un champ de formulaire unique?
- 5. Windows Server 2008 IIS 7.5 limite maximale d'acceptation de fichier
- 6. Excel Commentaires - Longueur maximale en 2003
- 7. Paramètre de définition de code et accès
- 8. Définition de la distance maximale OpenGL ES sur Android
- 9. Définition de l'utilisation maximale du processeur par processus dans Windows
- 10. Définition d'une valeur maximale du curseur jQuery sur illimité?
- 11. Définition d'une taille maximale pour les fenêtres verticales dans vim
- 12. Définition de la taille maximale du journal des événements
- 13. Définition d'une limite à une taille de file d'attente
- 14. Accès MDB: accès Les fichiers MDB ont une taille limite supérieure?
- 15. Limite d'affichage en vb6
- 16. Taille maximale du cache ASP.NET
- 17. Taille maximale des baies .NET
- 18. CEdit contrôle la longueur maximale? (en caractères qu'il peut afficher)
- 19. Crystal Reports Erreur: La limite maximale des tâches de traitement de rapport
- 20. Quelle est la limite de téléchargement maximale de fichiers dans Internet Explorer?
- 21. Nom d'utilisateur Windows longueur maximale
- 22. Comment empêcher l'utilisateur d'entrer plus de données que la limite maximale?
- 23. Quelle est la taille maximale d'un fichier mappé en mémoire?
- 24. Quelle est la limite de mémoire maximale par application pour Android 2.2?
- 25. Quelle est la limite de taille maximale pour la réponse SOAP pour JAX-WS?
- 26. Limite de caractères en HTML
- 27. Limite en courant total SQLite
- 28. Limite de sortie en C
- 29. Limite supérieure en Python time.sleep()?
- 30. Limite limite de MovieClip (AS3)
Une table userID SpProperty est-elle une possibilité pour vous? – Fionnuala