Access 2007 les déclencheurs et les procédures équivalents?
Ok, quelqu'un aurait-il quelques bonnes ressources pour Access 2007 caractéristiques concernant des déclencheurs ou des procédures stockées? Peut-il même de les faire ou quelque chose de semblable à eux? Toutes les ressources que j'ai trouvé sur aide Microsoft est de référencement de retour à Access 2003, ainsi que de nombreux manuels d'aide en ligne. Tout est déplacé autour de en 2007, de sorte qu'il est un peu difficile à traduire les anciens manuels d'aide. Je voulais vraiment utiliser ms sql, mais a été forcé de faire ce petit projet dans l'accès, de sorte que toutes les ressources seraient utiles.
Cool, toutes les réponses ont été utiles. Voulais juste confirmer beaucoup de savoirs épars de l'accès que j'ai. Je pense que je peux le faire fonctionner pour ce projet. Oh, et je ne peux pas utiliser sql en raison de beaucoup de...de la paperasse.
- L'accès n'est pas une base de données, donc non, il n'a pas de fonctionnalités de base de données. Si, au lieu de cela, vous voulez dire que la base de données par défaut du moteur qui est fourni avec l'Accès, Jet/ACE, alors la réponse est non, que le moteur de base de données ne fait pas de déclencheurs ou des procédures stockées, sauf si vous définissez ces manières fondamentalement, les égoutter de toute signification. Il va de soi, puisqu'il manque un composant côté serveur avec laquelle les clients de communiquer, que ce serait l'absence de ces caractéristiques.
- J'ai aussi voulu dire que si vous utilisez un autre moteur de base de données comme votre back-end, vous aurez tout le soutien pour les procédures stockées et les déclencheurs que le moteur de base de données fournit nativement.
- W. Fenton: Arrêtez-vous si vous avez entendu cela avant (s'il vous plait, arrêter), mais pour Access2007, spécifié dans cette question, ils ont changé le nom de la base de données Access moteur. Donc, oui, l'Accès est un moteur de base de données, plus correctement (c'est votre truc, non?) en fait un système de gestion de base de données (SGBD). Et par la manière, Jet et ACE, qui sont maintenant connus collectivement sous le nom de base de données Access moteur, ne sont pas des bases de données. "base de données" désigne la collecte de données. Vous avez le sens de "SGBD", le système qui gère les données.
Vous devez vous connecter pour publier un commentaire.
Procédures stockées
L'Accès au moteur de base de données lors de l'ANSI-92 Mode de Requête prend en charge la
CREATE PROCEDURE
SQL (DDL) de la syntaxe par exempleL'objet résultant est donc un
PROCEDURE
et est stocké dans le fichier de base de données avec les tables. L'accent est mis ici sur le mot "stockées" (plutôt que "procédure") c'est à dire qu'il est "proche de la data". L'utilisation de ces objets encourage une bonne séparation de l'extrémité avant (FE) de l'extrémité arrière (ÊTRE) et je veux dire logique plutôt que physique; par exemple, Le code SQL stockées dans le code VBA ou dans les propriétés d'un Accès à des Formes de contrôle n'est pas "proche de données' et mélange le back-end "couche" avec le front-end "couche" et rend l'entretien de code SQL plus difficile par exemple, si vous avez besoin de renommer une colonne dans une table, le travail est facile si tout ce que vous devez faire est de regarder à travers laPROCEDURE
s etVIEW
s.Un autre avantage de l'utilisation d'un
PROCEDURE
est (ou plutôt était) que lorsqu'il est couplé avec la sécurité de niveau utilisateur (ULS), il peut aider à "l'utilisabilité". Pour employer un exemple, il est souvent demandé comment ajouter un created_date colonne d'une table et de maintenir sa valeur. L'ajout d'unDEFAULT
de le timestamp actuel, vous reçoit seulement une partie du chemin par exempleMais cela ne vous empêche pas de valeur explicite qui n'est pas le timestamp actuel. On pourrait bien sûr ajouter un
CHECK
contrainte ou une Règle de Validation à appliquer ce:Le problème ici est que
CHECK
contrainte et les Règles de Validation seront vérifiés au niveau de la ligne c'est à dire si vous avez déjà essayé de changer une autre colonne de la contrainte de mordre. Pas bon, donc:Quoi faire? Une approche consiste à supprimer les privilèges de la table afin que les utilisateurs finaux (et des applications dans ce contexte sont les utilisateurs) ne peut pas
INSERT
ouUPDATE
les données de la table directement, puis de créer desPROCEDURE
s pour permettre aux données d'être changé et au lieu d'accorder aux privilèges appropriés à laPROCEDURE
s par exempleJe suis en utilisant le passé parce que, comme vous le savez, l'équipe d'Accès (ou était-ce l'équipe SharePoint? :)) supprimé ULS de la nouvelle-pour-Access2007 ACE moteur. Je ne suis pas sûr que je peux recommander à l'aide d'une fonctionnalité obsolète.
Maintenant la mauvaise nouvelle. Beaucoup (la plupart?) folk dirais qu'une telle
PROCEDURE
n'est pas une procédure et ils ont obtenu un bon point parce que l'Accès de la base de données du moteur de la syntaxe SQL ne prend pas en charge le contrôle de flux, la déclaration de la variable, même la capacité d'exécuter plus d'une instruction SQL. En d'autres termes, unPROCEDURE
ne peut comporter le code de procédure. Considérons un tableau qui fait référence à des Entités:Il serait agréable d'avoir un
PROCEDURE
qui peut créer une ligne dans les Entités et éventuellement de créer une ligne dans FlyingEntitiesbased sur la valeur d'un paramètre, mais ce n'est tout simplement pas possible en une seule requête SQL. Par conséquent, une base de données Access moteurPROCEDURE
est d'une valeur limitée, surtout maintenant que l'AMT a disparu.Déclenche
Il n'y a pas de contourner le fait que l'Accès au moteur de base de données n'a pas, et n'a jamais eu, les déclencheurs. La question est de savoir si, en avez-vous besoin?
Mais je maintiens tout de même une préférence pour la simplicité de l'Accès au moteur de base de données, la vérité est qu'il ya plusieurs années j'ai déplacer tous les "sérieux" travail en plus "industrielle", et plus de la Norme SQL conformité des produits, principalement SQL Server. Toutefois, dans SQL Server-je utiliser des déclencheurs pour seulement deux choses, à la fois de ce qui peut être fait sans déclencheurs (dans une certaine mesure) dans la base de données Access moteur.
Premier de ces usages est de composer avec le fait que SQL Server
CHECK
contraintes ne prennent pas en charge les sous-requêtes; autrement dit, ils peuvent être au niveau de la colonne et de la ligne de niveau, mais pas au niveau de la table. Accès au moteur de base de donnéesCHECK
contraintes, introduit dans la Jet 4.0 et encore présente dans l'AS (2007), sont toujours au niveau de la table... et bien, ils sont en théorie. Il y a un problème (suspicion de bug) où ils sont vérifiés au niveau de la ligne, alors qu'ils devraient logiquement être vérifiée à l'instruction SQL niveau. Ils ne prennent pas en charge le SQL-92DEFERRABLE
syntaxe, donc il n'y a aucune solution de contournement pour ce problème (d'ailleurs, SQL Server souffre du même problème lors de l'utilisation d'unFUNCTION
pour contourner le pas de sous-requêtes limitation). Pas tous lesCHECK
des contraintes de ce problème, mais son existence me fait un peu méfiant.Deuxième et dernière utilisation de déclencheurs dans SQL Server pour moi, c'est dû à une autre limitation: le redoutable "CLÉ ÉTRANGÈRE...peut causer des cycles ou plusieurs cascade chemins" lorsque vous essayez de créer deux
REFERENCE
s à la même clé par exemple, ceci est autorisé dans la base de données Access moteur:Mais port ce de SQL Server (suppression de la
WITH COMPRESSION
etc) et il n'est pas permis. Dans ce cas, le cannot_marry_yourself permettra d'éviter les cycles, mais SQL Server n'est qu'un simple comptage et décide que 1 + 1 = trop nombreux. Rudimentaire mais efficace, je suppose. À l'aide de déclencheurs est la seule manière satisfaisante solution de contournement; laCASCADE
référentielle actions sont un particulier de la douleur avec des déclencheurs.D'autre part, l'Accès au moteur de base de données d'une manière qui est encore plus bête que SQL Server à cet égard, car il ne fait aucune tentative de détection de cycles à tous. Si vous décidez de créer un cycle, vous n'obtiendrez aucun avertissement, et le résultat sera une course d'écraser les données de la dernière et dans une situation difficile à déboguer.
Autres que ces usages, j'ai éviter les déclencheurs parce qu'ils sont un mal de tête d'entretien (si vous pouvez les obtenir à droite dans la première place). J'ai perdu le compte du nombre de fois des collègues m'ont demandé de l'aide, où nous avons tous les deux été sidéré de ce que le problème pourrait être seulement pour eux d'timidement dis-moi plus tard, il a été un déclencheur ils avaient oublié qu'ils ont créé.
Donc, oui, la base de données Access moteur manque déclenche mais vous pouvez trouver que vous pouvez être mieux sans eux.
Oh, et ne me lancez pas sur la documentation de la base de données Access moteur. Il est fragmenté et beaucoup de ces fragments ont disparu au fil du temps et beaucoup n'ont pas exister en premier lieu, par exemple, je l'ai mentionné
CHECK
contraintes ci-dessus, mais il n'a jamais été de détails publiés, seulement un couple de ces mauvaises exemples (tout ce que je sais à propos deCHECK
contraintes je devais apprendre par essais et d'erreurs-ce qui existe, que je ne suis pas tombé sur encore?!) Et les fragments qui existent contiennent des erreurs matérielles et les erreurs d'omission... même à tort, détaillant les fonctionnalités que n'a jamais existé! par exemple, Instruction CREATE TABLE de la Access2007 Aider mentionne les tables temporaires, nomméNOT NULL
contraintes et multi-colonneNOT NULL
contraintes qui n'existent pas, mais omet de mentionnerDEFAULT
ou le fait que certainsCONSTRAINT
s ne sont pas mises en œuvre à l'aide des indices. Mais l'omission la plus grave de l'OMI est la référence pour l'Accès au moteur de base de données d'expressions ex:IIF()
se comporte différemment queIIf()
en VBA, mais cela semble être actuellement sans papiers. Le SQL de l'Aide pour Jet 3 avait une telle liste, pas de version à partir de a et le Jet 3 aide disparu à partir de MSDN a un an ou deux. Le manque de documentation vraiment écorne l'Accès de la base de données du moteur de crédibilité.Selon wikipédia:
Ont été les ressources que vous avez trouvé pour 2003 de parler abour ADP fichiers? Je pense qu'ils peuvent être, dans ce cas peuvent être liés à des éléments déclencheurs et les procédures dans un SQL Serveur backend qui est ce qu'ils sont équipés pour.
Envisager la possibilité d'utiliser Access 2007 comme un front-end pour SQL Express. Si votre problème de domaine est quelque chose que l'Accès JET pourrait manipuler, SQL Express peut également gérer et vous obtenez des choses comme les procédures stockées et les déclencheurs "gratuitement". La chose la plus proche que native Access/JET a pour les procédures stockées sont des requêtes (action et standard) et il n'y a rien comme un déclencheur dans l'Accès natif/JET.
Il n'y a pas beaucoup de défi, est de la configuration de l'Express éditions, et l'Accès fonctionne très bien comme un front-end pour SQL Express. Vous ne remarquerez pas beaucoup de différence (sauf le style de la table des designers et tel) lorsque vous travaillez avec une telle extrémité arrière, et de vous éviter d'avoir à faire lorsque votre application s'adapte à besoin d'un vrai serveur de base de données, de toute façon.
Procédures stockées sont essentiellement au fait que les requêtes dans Access. À peu près toute la documentation pour 03 tiendra fidèle à 07 que les différences fonctionnelles sont assez rares.
Dans l'Accès, il est pas une telle chose comme un déclencheur. Cela s'applique à toutes les versions.
Comme pour les déclencheurs, si vous utilisez un projet de données access, puis vous n'avez pas de tables locales et de ne pas même à l'aide de jet. Dans ce cas déclencheurs sera conçu, créé et écrit dans SQL server. Ne gardez à l'esprit que lorsque vous créez un projet de données access, vous ne pouvez pas utiliser n'importe quel autre serveur de base de données à l'exception de SQL server. La plupart des versions de microsoft office et d'accès ont une version de SQL server sur le CD pour ce but. Cela a changé en 2007, mais néanmoins dans ce cas, vous ne pouvez pas utiliser les tables locales à accéder aux données des projets.
Donc, si vous choisissez d'utiliser un accès ADP, vous aurez par défaut ont les déclencheurs disponibles.
Si vous êtes en utilisant une norme mdb ou fichier accDB et ne sont pas à l'aide de SQL server, mais à l'aide de JET (maintenant appelé ACE), alors vous n'aurez pas les déclencheurs disponibles.