Est-il préférable d'utiliser ADO ou DAO dans Access 2007?
lors de la création d'une nouvelle base de données dans Access 2007, faut-il utiliser ADO (ActiveX Data Objects) ou DAO (Data Access Objects)?
éditer: une partie de cette base de données sera l'importation de données à partir de feuilles de calcul Excel 2007.
7 réponses
[pour mémoire, le nom officiel de ce qui était autrefois " Jet "est maintenant" Access database engine".]
pour ACE (le moteur Access2007 .accdb format), il doit être ACEDAO.
pour les caractéristiques du Jet 4.0, il doit être classique.
pour Jet 3.51 caractéristiques et plus tôt, choisissez soit ADO ou DAO. Les deux présentent des avantages et des inconvénients. La grande majorité des fonctionnalités du moteur de base de données Access sont communes aux deux; l'mutuellement exclusifs fonctionnalité est défendable frange. Un choix de style de vie, peut-être, mais pas grand chose. Le smart codeur utilise le meilleur des deux :)
j'ai utilisé les deux assez et ADO est ma préférence personnelle. Il est plus moderne que DAO, donc c'est une amélioration sur le plan architectural: modèle d'objet plus plat, aucun des problèmes de démontage de DAO, etc. Plus de propriétés et de méthodes et introduit des événements (DAO n'en a pas) par exemple pour la connexion asynchrone et la récupération des enregistrements. ADO les ensembles d'enregistrements peuvent être déconnectés, hiérarchisés et fabriqués, ce qui n'est pas le cas des ensembles D'enregistrements DAO. En gros, ils ont pris les bonnes choses à propos de DAO et les ont rendues meilleures.
DAO n'est pas sans ses points forts. Par exemple, vous trouverez plus d'exemples de code DAO que D'ADO pour Access/Jet.
P. S. pour une raison quelconque, les gens qui aiment DAO n'aime vraiment pas ADO. Ignorez la propagande. ADO n'est pas déprécié. L'ACE dispose d'un fournisseur OLE DB et est actuellement le seul moyen d'utiliser ACE en 64 bits. ADO.NET N'a pas remplacé ADO classic Plus de VB.NET a remplacé la VBA6 dans les projets D'accès.
EDIT: juste pour clarifier, " pour les fonctionnalités Jet 4.0, il doit être ADO classic," c'est parce que DAO 3.6 n'a reçu que quelques améliorations pour les fonctionnalités nouvelles À Jet 4.0. Par exemple, pour le type de données DECIMAL
, vous ne pouvez pas spécifier l'échelle/la précision. D'autres caractéristiques sont complètement absentes de DAO. Par exemple, Pouvez-vous faire ce qui suit dans Jet 4.0 en utilisant DAO (ou ACEDAO dans ACE pour cette question)?
CREATE TABLE Test (
col1 CHAR(4) WITH COMPRESSION DEFAULT '0000' NOT NULL,
CHECK (NOT EXISTS (
SELECT T1.col1
FROM Test AS T1
WHERE T1.col1 <> '0000'
GROUP
BY T1.col1
HAVING COUNT(*) > 1
))
);
(conseil: colonne de texte compressible à Largeur fixe avec contrainte d'intégrité des données au niveau du tableau.) Non, vous ne pouvez pas.
AFAIK les seules améliorations apportées à ACEDAO concernaient la nouvelle fonctionnalité ACE, c'est-à-dire qu'elles ne sont pas revenues en arrière et n'ont pas comblé les lacunes de Jet 4.0 dans L'OAC. Et pourquoi devraient-ils? Il nous reste ADO pour combler les lacunes. Mieux vaut que l'équipe ait passé son temps de façon plus productive, comme réparer ce bug de tri DECIMAL
ennuyeux, pour moi la meilleure chose à propos de ACE ;-)
DAO est la technologie recommandée ici. L'ADO a été fortement déprécié et est maintenant remplacé par ADO.net.
N'est pas seulement DAO le modèle d'objet de données natif et recommandé pour l'utilisation de MS access, il continue à être amélioré et a maintenant un tas de nouvelles fonctionnalités pour sharepoint. Dans access 2007 nous avons maintenant la prise en charge des listes SharePoint. Cela signifie que le nouveau modèle d'objet DAO pour 2007 permet d'utiliser une liste sharepoint et de la visualiser comme un serveur SQL. table. Cela signifie que vous pouvez utiliser SQL sur les listes de sharepoint (en fac il n'y a même pas un fournisseur d'oleDB qui vous permet d'utiliser les listes de SharePoint de cette façon, mais avec DAO vous pouvez maintenant le faire). Il n'y a rien de ce genre qui a été ajouté à ADO. Ainsi, SharePoint listes du point de vue de l'accès (dao) voit ces SharePoint listes comme une table standard.
en outre DAO dans l'accès a également le soutien pour ce que nous appelons des types de données complexes. Ceci a été fait pour supporter les listes XML de sharepoint. Gardez à l'esprit pour la prochaine version d'access (2010) nous allons voir un tas de nouvelles fonctionnalités supplémentaires ajoutées à DAO (JET est maintenant appelé ACE).
il ne fait donc aucun doute que DAO est le modèle correct et bon à utiliser. ADO ne reçoit plus aucune amélioration, et a été remplacé par ADO.NET.
donc le futur appartient à DAO, et il est clair que C'est là où Microsoft investit son argent en termes de MS access et de termes de améliorer L'accès au travail avec choses sharepoint.
Access 2007 a reçu des fonctionnalités multi-valeurs pour ses définitions de champ, et encore une fois ceci était le résultat d'améliorations pour le support sharepoint. Cependant, ces fonctionnalités font partie du JET et ces améliorations peuvent être utilisées sans sharepoint. ils font maintenant partie de DAO.
modifier: Peut-être que je vais développer un peu, et de tenter de clarifier ce que nous avons si opposées réponses ici, je peux vous assurer que lors de l'utilisation d'access 2007, vous êtes beaucoup mieux d'utiliser DAO.
où la confusion provient, est si vous regardez les références des outils lorsque vous choisissez d'utiliser le modèle d'objet de données par défaut access 2007, le problème ici est qu'il n'est plus appelé DAO. Il s'appelle maintenant ACE.
lorsque vous utilisez DAO dans access 2007, vous noterez dans l'outil références, que la référence n'est pas définie à DAO 3.6 ( cette version a été dépréciée, et aussi ne fait plus partie du téléchargement de MDAC). Vous remarquerez que la nouvelle référence lors de L'utilisation de DAO dans ms-access s'appelle:
Microsoft office access 12.0 moteur de base de données de la Bibliothèque d'Objets
maintenant ce qui précède est un peu d'une bouche pleine, mais ce qui précède est le correct pour l'accès de référence 2007 lorsque vous allez utiliser DAO à la place de ADO.
en d'autres termes, peut-être devrions-nous appeler ce DAO II.
en autres mots, ce moteur de données continue à être améliorée, et verra très certainement une version 64 bits de ce moteur pour office 2010 (office 14).
ainsi, la question ou la confusion est centrée sur ce que le terme allait utiliser lorsque nous nous référons à l'utilisation de DAO dans access 2007. La confusion ici est en fait que la documentation et même les outils ->référence ne l'appelle pas DAO.
à la fin de la journée dans access 2007, si vous prévoyez d'utiliser DAO, cela signifie que vous mettez la référence ci-dessus, et ne mettez pas une référence à DAO 3.6. Quoi qu'il en soit, cela n'a absolument aucun sens de commencer à utiliser ADO maintenant qu'il a été déprécié, et le nouveau modèle d'objet DAO pour l'accès continue d'être amélioré et investi par Microsoft.
j'espère que cela aidera à clarifier la confusion ici. Alors que DAO/JET est déprécié, la nouvelle version access 2007 est basée sur la même base de code, sauf qu'elle continue à être améliorée. Donc le nouveau moteur de données l'accès peut être considéré et appelé le nouveau modèle d'objet DAO.
je suis actuellement sous NDA sur cette question, mais je peux très certainement vous dire que pour la prochaine version de office (2010) nous allons voir une série d'améliorations à nouveau.
il est donc presque unanime parmi les développeurs D'accès que lors du développement des applications d'accès et en utilisant le moteur de données natif, la préférence est d'utiliser le modèle d'objet DAO ( mais gardez à l'esprit que nous n'appelons pas il plus que, nous l'avons appelé ACE).
La réponse à la question dépend de ce que vous faites. Si vous utilisez L'accès pour travailler avec des données qui est dans un format dont l'interface ADO est plus polyvalent, puis utiliser ADO. Si vous utilisez Jet data, ou si vous utilisez le moteur de base de données Jet pour travailler avec un autre moteur de base de données (via ODBC), alors DAO est le bon choix.
mais cette réponse suppose que vous travaillez à partir D'Access. Si vous travaillez à partir d'un autre environnement de programmation, les réponses seront probablement complètement différent.
Cela dépend de vos besoins. Aucun de ces outils ne devrait disparaître bientôt.
si vous n'avez pas d'expérience dans L'ADO ou DAO, vous trouverez DAO est beaucoup, beaucoup plus facile. Donc à moins que tu aies besoin D'AIDE, utilise DAO.
vous avez ajouté cet élément critique: "j'essaie de tirer des données d'une source externe dans un accès DB."Cette connectivité peut exiger une oda.
ADO est actuellement recommandées méthode d'accès. Je pense que DAO est déprécié depuis un certain nombre d'années.
ressemble à son été depuis accès 2000 - selon ce lien ,
List of obsolete data access technologies - http://msdn.microsoft.com/en-us/library/ms810810.aspx#mdac carte routière des technologies old_topic9
Citation de l'article ci-dessus, qui a été révisé en Décembre 2008 - " Data Access Objects (DAO): Dao fournit l'accès aux bases de données JET (Access). Cette API peut être utilisée à partir des langages Visual Basic, Visual C++ et scripting de Microsoft. Il a été inclus avec Microsoft Office 2000 et Office XP. DAO 3.6 est la version finale de cette technologie. Il ne sera pas disponible sur le système d'exploitation Windows 64-bit."
DAO juste roches en termes de performance par rapport à l'ADO. Il n'y a pas de comparaison.
S'excuse qu'il s'agisse d'une réponse, alors que cela aurait dû être un commentaire (je n'ai pas le représentant), mais je voulais clarifier une affirmation erronée que DAO/ACEDAO ne supporte pas Jet 4.0 record-locking. Il le fait, et c'est le comportement par défaut, indépendamment de ce que certains articles de MS prétendent.
le problème est que cela peut introduire un énorme bloat (fichier DB extrêmement fragmenté) lorsque vous utilisez DAO edit/update et vous ne pouvez pas l'éteindre dans DAO/ACEDAO.
si vous avez ce problème, vous pouvez l'éteindre en ouvrant d'abord la base de données via une connexion OLEDB en utilisant les paramètres corrects du Mode de verrouillage Jet OLEDB:Database, ce qui vous permettra de régler le verrouillage de la base de données au niveau de la page. Cette propriété sera alors respecté par les connexions conséquentes, DAO ou autre, de sorte que vous pouvez alors utiliser DAO pour les mises à jour rapides, etc.
cela permettra alors à DAO de revenir à la performance 8X habituelle par rapport à l'exécution des instructions SQL.
voici quelques liens pointant vers le problème:
est-ce que ACEDAO prend en charge le verrouillage de niveau de rangée?
http://www.access-programmers.co.uk/forums/showthread.php?t=47040
article MS KB, y compris le code de réglage du mode de verrouillage avec ADO, puis en utilisant DAO sur ce DB - http://support.microsoft.com/?id=306435