سؤال

عند إنشاء قاعدة بيانات جديدة في Access 2007، هل يجب استخدام ADO (كائنات بيانات ActiveX) أو DAO (كائنات الوصول إلى البيانات)؟

يحرر:سيتم استيراد جزء من قاعدة البيانات هذه من جداول بيانات Excel 2007.

هل كانت مفيدة؟

المحلول

و[للسجل، والاسم الرسمي للما كان "جيت" هو الآن 'محرك قاعدة بيانات Access.]

لACE (شكل محرك .accdb Access2007) ميزات يجب أن يكون ACEDAO.

لميزات جيت 4.0 أنه لا بد من ADO الكلاسيكية.

لجت 3.51 الميزات وفي وقت سابق، واختيار إما ADO أو DAO. هناك المنافع و المساوئ لكل منهما. الغالبية العظمى من وظائف محرك قاعدة بيانات Access هو شائع إلى حد سواء؛ وظائف يستبعد بعضها بعضا هي هامش القول. وهناك خيار نمط الحياة، وربما، ولكن ليس صفقة كبيرة. المبرمج الذكي يستخدم أفضل من كلا:)

ولقد استعملت على حد سواء لا بأس به وADO هي لغتي تفضيل شخصي. ومن أكثر حداثة من DAO، لذلك معماريا أن ذلك يعد تحسنا: تملق طراز كائن، فإن أيا من هدم مشاكل DAO، الخ لمزيد من الخصائص والأساليب ويدخل الأحداث (DAO قد لا شيء) على سبيل المثال للاتصال غير متزامن وجلب السجلات. السجلات ADO يمكن فصل، الهرمية وملفقة، السجلات DAO لا يمكن. في الأساس، وأخذوا الأشياء الجيدة حول DAO وجعلها أفضل.

وDAO لا يخلو من النقاط القوية. لأحد، وسوف تجد المزيد من أمثلة التعليمات البرمجية DAO من ADO للوصول / جت.

وP.S. لسبب ما، قوم مثل DAO يكرهون حقا ADO. تجاهل الدعاية. لم يتم إهمال ADO. وACE لديه مزود OLE DB و هو حاليا الطريقة الوحيدة لاستخدام ACE في 64 بت. وقد ADO.NET لم يتم استبدال ADO الكلاسيكية أكثر من أي VB.NET حلت محل VBA6 في مشاريع Access.

وتحرير: فقط للتوضيح، "لجت 4.0 ميزات لا بد من ADO الكلاسيكية"، وذلك لأن DAO 3.6 تتلق سوى عدد قليل من التحسينات للميزات جديدة إلى Jet 4.0. على سبيل المثال، لنوع البيانات DECIMAL لا يمكنك تحديد حجم / الدقة. ميزات أخرى مفقودة تماما من DAO. على سبيل المثال، يمكنك أن تفعل ما يلي في Jet 4.0 باستخدام DAO (أو ACEDAO في ACE لهذه المسألة)؟

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
                      ))
);

و(تلميح: للانضغاط العمود النص عرض ثابت مع القيد سلامة البيانات على مستوى الجدول). لا، لا يمكنك

وAFAIK التحسينات الوحيدة لACEDAO كانت لوظائف جديدة ACE أي أنهم لم أعود وملء الثغرات Jet 4.0 في DAO. ولماذا يفعلون ذلك؟ لا يزال لدينا ADO لسد الثغرات. أفضل أن الفريق قضى وقتهم بشكل أكثر إنتاجية، مثل تحديد هذا مزعج علة DECIMAL النوع، بالنسبة لي أفضل شيء حول ACE؛ -)

نصائح أخرى

DAO هي التقنية الموصى بها هنا.لقد تم تخفيض قيمة ADO كثيرًا، ويتم استبداله الآن بـ ADO.net.

لا يعد DAO نموذج كائن البيانات الأصلي والموصى به لاستخدام الوصول إلى MS فحسب، بل يستمر في التحسين ويحتوي الآن على مجموعة كاملة من الميزات الجديدة لنقطة المشاركة.في Access 2007 لدينا الآن دعم لقوائم SharePoint.وهذا يعني أن نموذج كائن DAO الجديد لعام 2007 يسمح باستخدام قائمة نقاط المشاركة وعرضها كجدول خادم SQL.هذا يعني أنه يمكنك استخدام SQL في قوائم SharePoint (في الواقع لا يوجد حتى موفر oleDB يسمح لك باستخدام قوائم SharePoint بهذه الطريقة، ولكن مع DAO يمكنك الآن القيام بذلك).لا يوجد شيء من هذا النوع تمت إضافته إلى ADO.لذا فإن قوائم SharePoint من وجهة نظر الوصول (dao) ترى قوائم SharePoint هذه كجدول قياسي.

علاوة على ذلك، يتمتع DAO الموجود في الوصول أيضًا بدعم لما نسميه أنواع البيانات المعقدة.وقد تم ذلك لدعم قوائم XML من Sharepoint.ضع في اعتبارك أنه في الإصدار التالي من الوصول (2010) سنرى مجموعة كاملة من الميزات الإضافية الجديدة التي تتم إضافتها إلى DAO (يُطلق على JET الآن اسم ACE).

لذا فمن دون شك أن DAO هو النموذج الصحيح والجيد للاستخدام.لا يتلقى ADO أي تحسينات إضافية، وقد تم استبداله بـ ADO.NET.

لذا فإن المستقبل ينتمي إلى DAO، ومن الواضح أن هذا هو المكان الذي تستثمر فيه Microsoft أموالها فيما يتعلق بالوصول إلى MS وشروط ترقية Access للعمل مع الأشياء المشتركة.

حصل Access 2007 على إمكانات متعددة القيم لتعريفات الحقول الخاصة به، وكان هذا مرة أخرى نتيجة للتحسينات لدعم نقطة المشاركة.ومع ذلك، تعد هذه الميزات جزءًا من JET ويمكن استخدام هذه التحسينات بدون نقطة مشاركة.هم الآن جزء من DAO.


يحرر:ربما سأتوسع في هذا الأمر قليلًا، وأحاول توضيح ما لدينا من إجابات متعارضة هنا، ويمكنني أن أؤكد لك أنه عند استخدام Access 2007، فمن الأفضل لك استخدام DAO.

مصدر الارتباك هو أنه إذا نظرت إلى مراجع الأدوات عندما تختار استخدام الوصول إلى نموذج كائن البيانات الافتراضي 2007، فإن المشكلة هنا هي أنه لم يعد يسمى DAO بعد الآن.يطلق عليه الآن ACE.

عند استخدام DAO في Access 2007، ستلاحظ في مراجع الأداة أنه لم يتم تعيين المرجع على DAO 3.6 (تم إهمال هذا الإصدار، كما أنه لم يعد جزءًا من تنزيل MDAC بعد الآن).ستلاحظ أن المرجع الجديد عند استخدام DAO في ms-access يسمى:

مكتبة كائنات محرك قاعدة بيانات الوصول إلى Microsoft Office 12.0

الآن ما ورد أعلاه ممتلئ قليلاً، ولكن ما ورد أعلاه هو الصحيح للوصول المرجعي 2007 عندما ستستخدم DAO بدلاً من ADO.

وبعبارة أخرى، ربما ينبغي لنا أن نسمي هذا DAO II.

بمعنى آخر، يستمر تحسين محرك البيانات هذا، وسيشهد بكل تأكيد إصدار 64 بت من هذا المحرك لـ Office 2010 (Office 14).

لذا فإن السؤال أو الارتباك يتمحور حول المصطلح الذي سنستخدمه عندما نشير إلى استخدام DAO في Access 2007.الارتباك هنا هو في الواقع أن الوثائق وحتى الأدوات ->المرجع لا تسميها DAO.

في نهاية اليوم في Access 2007، إذا كنت تخطط لاستخدام DAO، فهذا يعني أنك قمت بتعيين المرجع أعلاه، ولم تقم بتعيين مرجع إلى DAO 3.6.بغض النظر، ليس من المنطقي على الإطلاق البدء في استخدام ADO الآن بعد أن تم إهلاكه، ويستمر Microsoft في تحسين نموذج كائن DAO الجديد للوصول إليه والاستثمار فيه.

آمل أن يساعد هذا في إزالة الارتباك هنا.على الرغم من انخفاض قيمة DAO/JET، فإن الوصول إلى الإصدار الجديد 2007 يعتمد على نفس قاعدة التعليمات البرمجية، باستثناء استمرار تحسينه.لذلك يمكن اعتبار محرك البيانات الجديد قيد الوصول وتسميته نموذج كائن DAO الجديد.

أنا حاليًا ضمن اتفاقية عدم الإفشاء بشأن هذه المشكلة، لكن يمكنني بكل تأكيد أن أخبرك أنه بالنسبة للإصدار التالي من Office (2010) سنرى عددًا كبيرًا من التحسينات مرة أخرى.

لذلك، هناك شبه إجماع بين مطوري Access أنه عند تطوير تطبيقات الوصول واستخدام محرك البيانات الأصلي، فإن التفضيل هنا هو استخدام نموذج كائن DAO (ولكن ضع في اعتبارك أننا لم نعد نطلق عليه هذا الاسم بعد الآن، بل أطلقنا عليه اسم ACE).

والجواب على السؤال يتوقف على ما تفعلونه. إذا كنت تستخدم الوصول للعمل مع البيانات التي هو في شكل الذي هو أكثر تنوعا واجهة ADO، ثم استخدام ADO. إذا كنت تستخدم البيانات جيت، أو باستخدام محرك قاعدة بيانات Jet للعمل مع مشغل آخر قاعدة البيانات (عبر ODBC)، ثم DAO هو الخيار الصحيح.

ولكن هذا الجواب يفترض أنك تعمل من Access. إذا كنت تعمل من بعض بيئة البرمجة الأخرى، فإن الأجوبة من المرجح أن تكون مختلفة تماما.

وهذا يتوقف على احتياجاتك. ومن المتوقع أن تختفي قريبا ولا الأداة.

إذا لم يكن لديك خبرة في أي ADO أو DAO، ستجد DAO غير ذلك بكثير، أسهل بكثير. لذلك إلا إذا كنت بحاجة ADO، استخدام DAO.

ولقد قمت بإضافة هذا البند الحاسم: "أنا أحاول أن سحب البيانات من مصدر خارجي إلى DB الوصول". قد يتطلب هذا الربط ADO.

وADO هو أسلوب الوصول إلى الموصى الحالي. أعتقد أن تم إهمال DAO لعدد لا بأس به من سنوات.

ويبدو لها منذ ذلك الحين وصول 2000 - وفقا ل هذا الرابط ،

وقائمة من تقنيات الوصول إلى بيانات عفا عليها الزمن - HTTP: // MSDN. microsoft.com/en-us/library/ms810810.aspx#mdac خريطة التقنيات الطريق old_topic9

اقتباس من المادة المذكورة أعلاه، والذي تم تعديله ديسمبر 2008 - "كائنات الوصول إلى البيانات (DAO): DAO يوفر الوصول إلى (الوصول) قواعد البيانات JET ويمكن استخدام هذا API من مايكروسوفت فيجوال بيسك، مايكروسوفت البصرية C ++، ولغات البرمجة تم تضمينه مع Microsoft Office 2000 و Office XP. DAO 3.6 هو الإصدار النهائي من هذه التقنية. لن تكون متاحة على 64 بت نظام التشغيل ويندوز. "

وDAO الصخور فقط من حيث الأداء مقارنة مع ADO. هناك لا مجال للمقارنة.

والاعتذار أن هذا هو الجواب، عندما كان ينبغي أن يكون تعليق (ليس لدي مندوب)، ولكن أردت أن تصل واضحة مطالبة الخاطئة التي DAO / ACEDAO لا يدعم جيت 4.0 السجلات قفل. فعلت ذلك، وهذا هو السلوك الافتراضي، بغض النظر عن ما تدعي بعض المواد MS.

والمشكلة هي أن هذا قد يعرض سخام ضخمة (ملف DB مجزأة بشكل كبير) عند استخدام DAO تحرير / تحديث ولا يمكنك إيقاف تشغيله في DAO / ACEDAO.

إذا كان لديك هذه المشكلة، يمكنك إيقاف تشغيله عن طريق فتح أول قاعدة البيانات عبر اتصال OLEDB باستخدام OLEDB جيت الصحيح: قاعدة بيانات تأمين إعدادات الوضع، والتي سوف تسمح لك لتحديد قاعدة البيانات إلى التأمين على مستوى الصفحة. وبعد ذلك يتم احترام هذا العقار عن طريق وصلات يترتب على ذلك، DAO أو غير ذلك، لذلك يمكنك بعد ذلك استخدام DAO للحصول على تحديثات سريعة الخ.

وهذا سوف يسمح DAO ثم العودة إلى أداء 8X المعتاد مقارنة مع تنفيذ عبارات SQL.

وهنا زوجين من الروابط التي تشير إلى المشكلة:

هل مستوى ACEDAO الصف الدعم قفل؟

http://www.access-programmers.co .uk / منتديات / showthread.php؟ ر = 47040

وMS KB المادة، بما في ذلك رمز لتحديد وضع قفل مع ADO، ثم باستخدام DAO على أن DB - http://support.microsoft.com/؟id=306435

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top