موفر Microsoft OLE DB لخطأ برامج تشغيل ODBC '80040e21' أنتجت عملية OLE DB متعددة الخطوات خطأ. إذا كان ذلك ممكناً، تحقق من كل قيمة حالة OLE DB. لم يتم إنجاز أي عمل. برنامج موقع حدث خطأ عند إضافة الأخبار
فيما يلي رسالة الخطأ:
خطأ موفر Microsoft OLE DB لبرامج تشغيل ODBC "80040e21"
تقوم عملية OLE DB متعددة الخطوات بإنشاء أخطاء. إذا كان ذلك ممكناً، تحقق من كل قيمة حالة OLE DB. لم يتم إنجاز أي عمل.
سبب هذا الخطأ هو أنني قمت بتغيير سلسلة اتصال الوصول إلى Driver={Micorsoft Access Driver ()};dbq= & Server.Mappath(DbPath)، بينما كانت سلسلة الاتصال الأصلية Provier=Microsoft.Jet.OLEDB .4.0; مصدر البيانات= & Server.Mappath(DbPath)، لن يحدث هذا الخطأ. يبدو أن هناك بعض الاختلافات بين هاتين الطريقتين للاتصال بقاعدة بيانات الوصول. على الأقل، تعتبر طريقة الاتصال الأخيرة أفضل من حيث التسامح مع الخطأ، ولكن من الواضح أنها أقل رسمية من حيث المواصفات.
من أجل التبسيط، سأسمي هاتين الطريقتين اتصال الموفر واتصال برنامج التشغيل أدناه.
لا يظهر الخطأ أعلاه عند تعديل الخبر. لقد نظرت إلى الكود ووجدت أنه عند الإضافة، لم يتم إغلاق مجموعة السجلات التي تم الحصول عليها باستخدام Excute. لقد قمت بإيقاف تشغيله ولم أتمكن من تشغيله بشكل صحيح.
لذلك كتبت جزءًا من التعليمات البرمجية وصممت جدولًا بسيطًا، ووجدت أنه يمكن إضافة طريقتين للاتصال في هذا الوقت، لذلك قمت بتغيير الجدول في هذا الكود مرة أخرى إلى الجدول الأصلي، لكن لا يزال يتعذر تنفيذه. هل له علاقة بالساعة؟
لذلك بدأت بدراسة النموذج بعناية ووجدت أن النموذج الأصلي يحتوي على حقل رقم تلقائي تم تعيين قيمة له في البرنامج. أتذكر أنه لا يمكن تعيين قيم للأرقام التلقائية. لذلك قمت بإزالة الترقيم التلقائي لهذا الجدول، وكانت النتيجة أنه يمكن تنفيذه بشكل طبيعي.
يبدو أنه من الممكن تعيين قيم لحقل الترقيم التلقائي من خلال الاتصال في وضع الموفر.
دعونا نتحدث عن الفرق في مكان آخر.
عندما استخدمت برنامج التشغيل للاتصال، ظهرت قيمة فارغة أثناء إعداد القناة، ولكن في الواقع كانت لها قيمة في قاعدة البيانات، ونظرت إلى نوع بيانات هذا الحقل وكان تعليقًا. هل هذا يعني أن دعم السائق للملاحظات الطويلة ليس جيدًا جدًا؟ لا، يجب أن يكون محتوى الأخبار في جدول الأخبار عبارة عن ملاحظات، ولا ينبغي أن يكون هذا هو السبب.
ما هو السبب؟ هل لأنه وراء مذكرة أخرى؟ ومع ذلك، توجد أيضًا ملاحظتان في جدول الأخبار، كما توجد ملاحظات المحتوى أيضًا خلف ملاحظات المقدمة. تم القضاء على هذا الشك أيضا.
هل لأن هذا الحقل يحتوي على كلمات رئيسية؟ لقد غيرت قيمة هذا الحقل إلى 1، ولكن النتيجة كانت خاطئة أيضًا.
ما هو السبب؟
فقط اكتب صفحة أخرى اختبرها بنفسك، رمز الاختبار هو كما يلي
وفيما يلي رمز الاختبار:
انسخ رمز الكود كما يلي:
كون خافت
تعيين conn=server.createobject(adodb.recordset)
conn.open driver={Microsoft Access driver (*.mdb)};dbq= & server.mappath(data/dd.mdb) 'طريقة اتصال برنامج التشغيل
"conn.open Provider=Microsoft.Jet.OLEDB.4.0;Data Source= & server.mappath(data/dd.mdb)" طريقة اتصال الموفر
اضبط rs=conn.execute(اختر * من s_channel حيث معرف القناة=11)
الاستجابة.كتابة rs (إعداد التحميل)
rs. Close
setrs=لا شيء
إذا وجد أن كلا الاتصالين يمكنهما الإخراج بشكل طبيعي.
لذلك قمت بإخراج (response.write) في الكود الأصلي حيث تم فتح مجموعة السجلات للتو، ووجدت أن قيمة الحقل يمكن إخراجها بشكل طبيعي في ذلك الموقع. لذلك واصلت نقل رمز الإخراج إلى الأسفل، وأخيراً قمت بنقله إلى
إليك مقتطف الكود:
انسخ رمز الكود كما يلي:
إذا كان IsNull(rs(UploadSetting)) أو rs(UploadSetting)= إذن
UploadSetting=Split(1,2,3,4@Other@2@0@jpg|gif|bmp|png@100@1@swf@500@1@rm|mp3|wav|mid|avi|mpg|mpeg| asf|wma@2048@1@rar|zip|exe|doc|xls|chm@2048@1,@)
آخر
UploadSetting=Split(rs(UploadSetting),@)
نهاية إذا
عند وضعه أعلاه، يمكن إخراج المحتوى بشكل طبيعي، ولكن لماذا يتم إخراج Null عند وضعه بعد آخر؟
وبالتالي فإن رمز الاختبار النهائي هو كما يلي
وفيما يلي رمز الاختبار:
انسخ رمز الكود كما يلي:
كون خافت
تعيين conn=server.createobject(adodb.recordset)
conn.open driver={Microsoft Access driver (*.mdb)};dbq= & server.mappath(data/dd.mdb) 'طريقة اتصال برنامج التشغيل
"conn.open Provider=Microsoft.Jet.OLEDB.4.0;Data Source= & server.mappath(data/dd.mdb)" طريقة اتصال الموفر
اضبط rs=conn.execute(اختر * من s_channel حيث معرف القناة=11)
الاستجابة.كتابة rs (إعداد التحميل)
إذا كان IsNull(Rs(UploadSetting)) أو rs(UploadSetting)= إذن
استجابة.اكتب د
آخر
الاستجابة.كتابة rs (إعداد التحميل)
نهاية إذا
rs. Close
setrs=لا شيء
يمكن للكود أعلاه إخراج القيمة بشكل صحيح في rs(uploadSetting) عند الاتصال في وضع الموفر، ولكن لا يخرج أي شيء في وضع التشغيل.
هل يمكن أن نفهم هذا: في وضع برنامج التشغيل، لا يمكن الرجوع إلى محتوى الملاحظة إلا مرة واحدة، وسيصبح قيمة فارغة عند الرجوع إليه مرة أخرى. لن يحدث هذا مع الموفر.
للتكيف مع هذا الوضع، يمكننا فقط تمرير متغير. دع محتوى حقل المذكرة يُعطى للمتغير أولاً، بدلاً من أن يتم اقتباسه مباشرةً.