أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

FIX: ADO مدرجات البيانات في الأعمدة خاطئة في Excel

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

اضغط هنا لرابط المقالة باللغة الانجليزية314763
إخلاء مسؤولية من محتوى قديم في قاعدة المعارف
عن تقديم الدعم التقني لهاو لذلك تظهر هذه المقالة كما هي و لن يتم تحديثها Microsoft تمت كتابة هذه المقالة بخصوص منتجات توقفت
الأعراض
عند استخدام ADO لإدراج صفوف جديدة من البيانات في ورقة عمل Microsoft Excel إذا البيانات يتضمن حقولاً تحتوي على قيم السلسلة الفارغة قد ADO إدراج قيم البيانات من الحقول الرقمية التالية في الأعمدة غير صحيح في Excel.

تحدث هذه المشكلة في كل موفر Microsoft OLE DB لـ Jet الإصدار 4.0 و Microsoft تشغيل ODBC لـ Excel. تحدث هذه المشكلة على ما إذا كنت تستخدم عبارة SQL INSERT أو AddNew أساليب تحديث كائن ADO Recordset.

لا تحدث هذه المشكلة إذا كان مفتوحاً في تطبيق Excel مصنف Excel عند ADO إدراج سجلات جديدة.

ومع ذلك، بمكافحة Microsoft التدريب العملي هذه بسبب حدوث تسرب للذاكرة إذا كان Excel مفتوحاً أثناء عمليات ADO. للحصول على معلومات إضافية، انقر فوق رقم المقالة أدناه لعرضها في "قاعدة المعارف لـ Microsoft:
319998BUG: تسرب الذاكرة عند الاستعلام فتح ورقة عمل Excel باستخدام ADO
راجع قسم "مزيد من المعلومات" للحصول على تفاصيل حول الحالات تحدث هذه المشكلة.
الحل
لحل هذه المشكلة، يجب الحصول على أحدث حزمة خدمة لـ حزمة الخدمة Jet 4.0. للحصول على معلومات إضافية، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
239114كيفية: الحصول على أحدث حزمة خدمة لـ مشغل قاعدة بيانات Microsoft Jet 4.0
تصريح
أقرت Microsoft أن هذا خطأ في منتجات Microsoft المسردة في بداية هذه المقالة.
معلومات أخرى

خطوات إعادة إنشاء السلوك

  1. فتح Microsoft Excel ثم قم بإنشاء مصنف جديد.
  2. في الورقة1 ، اكتب البيانات النموذجية التالية بدءاً من الخلية A1 في الزاوية العلوية اليسرى:
    ColumnAColumnBColumnCColumnDColumnEColumnF
    11اختبار11اختبار
    22اختبار22اختبار

  3. احفظ المصنف Test.xls. يمكنك ترك التطبيق Excel مفتوحة ولكن يجب إغلاق المصنف الجديد.
  4. في Microsoft Visual Basic، إنشاء مشروع EXE قياسي جديد. يتم إنشاء Form1 بشكل افتراضي.
  5. من القائمة المشروع انقر "مراجع". حدد من القائمة المتوفرة مراجع كائنات بيانات ActiveX في Microsoft "على 2. x مكتبة.
  6. وضع عنصر تحكم CommandButton على Form1 ثم قم بلصق التعليمة البرمجية التالية في إجراء حدث النقر لزر. لاحظ أن هذه التعليمات البرمجية إدراج سلسلة فارغة في العمود الأوسط العمود C.
    Private Sub Command1_Click()   Dim strCn As String   Dim cn As ADODB.Connection   Dim rs As ADODB.Recordset   Dim fld As ADODB.Field   'Open connection   strCn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _      "Data Source=" & App.Path & "\Test.xls;" & _      "Extended Properties=Excel 8.0"   Set cn = New ADODB.Connection   cn.Open strCn       'Add new values.   Set rs = New ADODB.Recordset   With rs      .CursorLocation = adUseClient      .Open "Select * from [Sheet1$]", cn, adOpenStatic, adLockOptimistic      .AddNew      .Fields("ColumnA").Value = 3      .Fields("ColumnB").Value = 3      .Fields("ColumnC").Value = ""      .Fields("ColumnD").Value = 3      .Fields("ColumnE").Value = 3      .Fields("ColumnF").Value = "testing"      .Update      .Close   End With   Set rs = Nothing   cn.Close   Set cn = NothingEnd Sub					
  7. حفظ مشروع اختبار Visual Basic في نفس المصنف Test.xls المجلد.
  8. تشغيل المشروع ثم انقر فوق الزر. في المرة الأولى التي تقوم فيها بتشغيل المشروع في Visual Basic Integrated تطوير بيئة (IDE) ، قد تظهر رسالة الخطأ التالية:
    خطأ وقت التشغيل-2147467259 (80004005): محدد ترتيب التسلسل غير معتمد من قبل نظام التشغيل
    هذه مشكلة معروفة.للحصول على معلومات إضافية، انقر فوق رقم المقالة أدناه لعرضها في "قاعدة المعارف لـ Microsoft:
    246167ترتيب تسلسل خطأ فتح ADODB Recordset الوقت الأول مقابل Excel XLS
  9. في مربع حوار رسالة الخطأ انقر فوق Debug واضغط المفتاح F5 ولمتابعة تشغيل المشروع. لاحظ أن يؤدي هذا إلى إدراج جديد صفين من البيانات بدلاً من أحد بسبب تشغيل تحديث مرتين.
  10. إغلاق النموذج إلى نهاية المشروع. إعادة فتح Test.xls في Excel ثم ثم اختبار البيانات الموجودة في الورقة1. تتوقع النتائج التالية:

    ColumnAColumnBColumnCColumnDColumnEColumnF
    11اختبار11اختبار
    22اختبار22اختبار
    3333اختبار

    ومع ذلك، راجع البيانات التالية:

    ColumnAColumnBColumnCColumnDColumnEColumnF
    11اختبار11اختبار
    22اختبار22اختبار
    3333اختبار

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

التباين 1

تكوين بيانات الاختبار كما يلي:

ColumnAColumnBColumnCColumnDColumnE
1اختبار11اختبار
2اختبار22اختبار

في مشروع Visual Basic تعديل القسم لإضافة القيم الجديدة كالتالي:
   'Add new values.   Set rs = New ADODB.Recordset   With rs      .CursorLocation = adUseClient      .Open "Select * from [Sheet1$]", cn, adOpenStatic, adLockOptimistic      .AddNew      .Fields("ColumnA").Value = 3      .Fields("ColumnB").Value = ""      .Fields("ColumnC").Value = 3      .Fields("ColumnD").Value = 3      .Fields("ColumnE").Value = "testing"      .Update      .Close   End With   Set rs = Nothing   cn.Close   Set cn = Nothing				
عند فتح Test.xls في Excel الورقة1 يعرض البيانات التالية:

ColumnAColumnBColumnCColumnDColumnE
1اختبار11اختبار
2اختبار22اختبار
333اختبار

لاحظ أنه لا تحدث هذه المشكلة عند عمود رقمي واحد يسبق القيمة سلسلة فارغة.

التباين 2

تكوين بيانات الاختبار كما يلي:

ColumnAColumnBColumnCColumnDColumnEColumnFColumnG
11اختباراختبار11اختبار
22اختباراختبار22اختبار

في مشروع Visual Basic تعديل القسم لإضافة القيم الجديدة كالتالي:
   'Add new values.   Set rs = New ADODB.Recordset   With rs      .CursorLocation = adUseClient      .Open "Select * from [Sheet1$]", cn, adOpenStatic, adLockOptimistic      .AddNew      .Fields("ColumnA").Value = 3      .Fields("ColumnB").Value = 3      .Fields("ColumnC").Value = ""      .Fields("ColumnD").Value = ""      .Fields("ColumnE").Value = 3      .Fields("ColumnF").Value = 3      .Fields("ColumnG").Value = "testing"      .Update      .Close   End With   Set rs = Nothing   cn.Close   Set cn = Nothing				
عند فتح Test.xls في Excel الورقة1 يعرض البيانات التالية:

ColumnAColumnBColumnCColumnDColumnEColumnFColumnG
11اختباراختبار11اختبار
22اختباراختبار22اختبار
3333اختبار

إذا إدراج ADO قيمتين سلسلة فارغة ، يبدو كما لو كان يتم تجاهل السلاسل الفارغة التي تم إدراجها في ColumnC و ColumnD و اختفت. ولذلك، تعتبر أية قيم رقمية اللاحقة المدرجة عمودين إلى اليسار وجهتها المقصودين. لا تتأثر عمود سلسلة اللاحقة.
مراجع
للحصول على معلومات إضافية، انقر فوق رقمي المقالتين التاليتين لعرضهما في "قاعدة المعارف لـ Microsoft:
294410ACC2002: بالقيم الخالية المستبدلة مع البيانات في الحقل التالي عند يمكنك تصدير إلى Excel
257819HOWTO: استخدام ADO مع بيانات Excel من Visual Basic أو VBA

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 314763 - آخر مراجعة: 09/26/2005 19:41:15 - المراجعة: 1.2

Microsoft ActiveX Data Objects 2.1, Microsoft ActiveX Data Objects 2.5, Microsoft ActiveX Data Objects 2.6, Microsoft OLE DB Provider for Jet 4.0

  • kbmt kbhotfixserver kbqfe kbbug kbfix kbiisam kbjet kbqfe KB314763 KbMtar
تعليقات
>
ens track by $index -->
id=1&t=">//c1.microsoft.com/c.gif?DI=4050&did=1&t=">