تصحيح: ADO إدراج البيانات في الأعمدة غير صحيح في Excel

الأعراض

عند استخدام ADO لإدراج صفوف جديدة من البيانات في ورقة عمل Microsoft Excel، إذا كانت البيانات تتضمن الحقول التي تحتوي على قيم سلسلة فارغة، قد ADO من إدراج قيم البيانات من الحقول الرقمية التالية في الأعمدة غير صحيح في Excel.


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


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


ومع ذلك، Microsoft بمكافحة هذه الممارسة بسبب حدوث تسرب لذاكرة إذا كان Excel مفتوحاً أثناء عمليات ADO.
للحصول على معلومات إضافية، انقر فوق رقم المقال التالي لعرضه في "قاعدة معارف Microsoft":

الخطأ 319998 : حدوث تسرب للذاكرة عند فتح الاستعلام في Excel ورقة العمل باستخدام ADO
راجع قسم "مزيد من المعلومات" للحصول على تفاصيل حول الظروف التي تحدث بها هذه المشكلة.

الحل

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

الحالة

أقرت Microsoft أن هذا هو الشوائب في منتجات Microsoft المسردة في بداية هذه المقالة.

مزيد من المعلومات

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

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

  3. حفظ المصنف ك Test.xls. يمكنك ترك التطبيق Excel مفتوحاً، ولكن يجب إغلاق المصنف الجديد.
  4. في Microsoft Visual Basic، قم بإنشاء مشروع EXE قياسي جديد. يتم إنشاء Form1 افتراضياً.
  5. من القائمة المشروع انقر فوق المراجع. من قائمة المراجع المتوفرة، حدد 2 كائنات بيانات ActiveX Microsoft . س مكتبة.
  6. قم بوضع عنصر تحكم CommandButton في Form1، وقم بلصق التعليمة البرمجية التالية في إجراء الحدث Click للزر. لاحظ أن هذه التعليمات البرمجية إدراج سلسلة فارغة في العمود الأوسط "العمود 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 = Nothing
    End Sub

  7. حفظ مشروع اختبار Visual Basic في نفس المجلد مثل المصنف، Test.xls.
  8. تشغيل المشروع، ومن ثم انقر فوق الزر. في المرة الأولى تشغيل المشروع في Visual Basic المتكاملة تطوير بيئة (IDE)، قد تتلقى رسالة الخطأ التالية:
    خطأ في وقت التشغيل '-2147467259 (80004005)': المحدد غير معتمد من قبل نظام التشغيل تسلسل ترتيب النسخ
    هذا مشكلة معروفة. للحصول على معلومات إضافية، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

    246167 ترتيب تسلسل السجلات ADODB فتح خطأ المرة الأولى ضد Excel XLS
  9. في مربع حوار رسالة الخطأ، انقر فوق التصحيحومن ثم اضغط المفتاح F5 لمتابعة تشغيل المشروع. لاحظ ذلك إدراج جديد صفين من البيانات بدلاً من واحد لأنه يتم تشغيل تحديث مرتين.
  10. قم بإغلاق النموذج لإنهاء المشروع. إعادة فتح Test.xls في Excel، وقم باختبار البيانات الموجودة في الورقة 1. تتوقع النتائج التالية:

    لومناكولومنبكولومنككولومندكولومنيكولومنف
    11اختبار11اختبار
    22اختبار22اختبار
    3333اختبار

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

    لومناكولومنبكولومنككولومندكولومنيكولومنف
    11اختبار11اختبار
    22اختبار22اختبار
    3333اختبار

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

تباين 1

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

لومناكولومنبكولومنككولومندكولومني
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 البيانات التالية:

لومناكولومنبكولومنككولومندكولومني
1اختبار11اختبار
2اختبار22اختبار
333اختبار

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

اختلاف 2

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

لومناكولومنبكولومنككولومندكولومنيكولومنفكولومنج
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 البيانات التالية:

لومناكولومنبكولومنككولومندكولومنيكولومنفكولومنج
11اختباراختبار11اختبار
22اختباراختبار22اختبار
3333اختبار

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

المراجع

لمزيد من المعلومات، انقر فوق أرقام المقالات التالية لعرضها في "قاعدة معارف Microsoft":

294410 ACC2002: استبدال القيم الخالية ببيانات الحقل التالي عند التصدير إلى Excel
257819 HOWTO: استخدام ADO مع بيانات Excel من Visual Basic أو VBA
خصائص

رقم الموضوع: 314763 - آخر مراجعة: 18‏/01‏/2017 - المراجعة: 1

تعليقات