الأعراض عند استخدام كائنات بيانات ActiveX (ADO) مع صفحات الخادم النشطة (ASP)، قد تواجه الأخطاء الشائعة التالية:
خطأ موفر Microsoft OLE DB لبرامج تشغيل ODBC "80004005"
يجب أن تستخدم عملية [Microsoft] [برنامج تشغيل ODBC Microsoft Access 97] استعلامًا قابلاً للتحديث
السبب توضح هذه المقالة الأسباب الأربعة الرئيسية لهذا الخطأ والحلول البديلة. على الرغم من أن هذه المقالة تناقش قواعد بيانات Microsoft Access، إلا أن المعلومات المقدمة هنا تنطبق على أنواع أخرى من قواعد البيانات أيضًا.
الحل عادةً ما تواجه هذا الخطأ عندما يحاول البرنامج النصي الخاص بك إجراء تحديث أو تنفيذ إجراء آخر يؤدي إلى تغيير المعلومات في قاعدة البيانات. يحدث هذا الخطأ لأن ADO لا يمكنه الكتابة إلى قاعدة البيانات لأحد الأسباب التالية:
1. السبب الأكثر شيوعًا هو أن حساب ضيف الإنترنت (IUSR_MACHINE، الذي ينتمي افتراضيًا إلى مجموعة "الجميع") ليس لديه حق الوصول إلى ملف قاعدة البيانات (.mdb) إذن الكتابة. لحل هذه المشكلة، استخدم علامة التبويب "أمان" في Explorer لضبط خصائص هذا الملف بحيث يتمتع حساب Internet Guest بالأذونات الصحيحة.
ملاحظة: عند استخدام قاعدة بيانات Microsoft Access مع ADO، يجب عليك أيضًا منح حساب Internet Guest أذونات الكتابة إلى الدليل الذي يحتوي على ملف .mdb. وذلك لأن Jet يقوم بإنشاء ملف .ldb يعالج تأمين قاعدة البيانات. نظرًا لأن Jet قد يقوم بإنشاء ملفات مؤقتة في الدليل "Temp"، فقد تحتاج أيضًا إلى منح أذونات القراءة/الكتابة لهذا المجلد.
2. السبب الثاني لهذا الخطأ هو عدم فتح قاعدة البيانات في الوضع الصحيح مع أذونات الكتابة. إذا قمت بإجراء عملية فتح على كائن اتصال، فيجب عليك استخدام خاصية الوضع للإشارة إلى الأذونات التي لديك على الاتصال، كما يلي:
SQL = "تحديث مجموعة المنتجات UnitPrice = 2؛"
تعيين Conn = Server.CreateObject("ADODB.Connection")
Conn.Mode = 3 '3 = adModeReadWrite
كون.افتح "myDSN"
كون.تنفيذ (SQL)
كون.إغلاق
ملاحظة: بشكل افتراضي، يتم تعيين MODE على 0 (adModeUnknown)، والذي يسمح عادةً بالتحديثات.
3. سبب آخر لهذا الخطأ هو أنه في مسؤول ODBC، قد يتم تحديد الإعداد "للقراءة فقط" في صفحة "الخيارات" الخاصة بـ DSN.
4. تنطبق المشكلة الأخيرة والحل البديل على كافة مصادر بيانات SQL. يمكن أن تتسبب عبارات SQL التي تنتهك التكامل المرجعي لقاعدة البيانات في حدوث هذا الخطأ. فيما يلي بعض الاستعلامات الفاشلة الأكثر شيوعًا:
أبسط مجموعة من الاستعلامات هي تلك التي لا يمكنك تغييرها: الاستعلامات الجدولية، أو استعلامات SQL التمريرية، أو الاستعلامات الموحدة، أو استعلامات عملية التحديث (أي إنشاء جدول) التي تم تعيين الخاصية UniqueValue عليها إلى "نعم".
• هناك سبب آخر شائع جدًا وهو أن الصلة تحتوي على فهارس في جداول ODBC المرتبطة والتي ليست فريدة. في هذه الحالة، لا يمكن لـ SQL ضمان أن السجلات الموجودة في الجدول فريدة وأن قيم الحقول الموجودة في الجدول ستتغير مع الاستعلام.
• هناك سبب لوجود بديل يمكن الاعتماد عليه بالفعل. إذا حاولت تحديث حقل صلة على الجانب "واحد" من استعلام "واحد لأكثر"، ستفشل العملية إلا إذا قمت بتمكين التحديثات المتتالية. لأنه بعد ذلك يمكنك تفويض التكامل المرجعي إلى محرك JET.