RTD Server لا يرسل رسائل إعلام التحديث إلى مثيلات متعددة من Excel

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

اضغط هنا لرابط المقالة باللغة الانجليزية284883
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
الأعراض
عند استخدام مثيلات متعددة من Microsoft Office Excel مع ملقم RealTimeData (RTD) ، قد تتلقى الرسالة التالية:
ملقم بيانات الوقت الحقيقي 'servername.classname' لا يستجيب. هل ترغب في أن يقوم Microsoft Excel محاولة إعادة تشغيل الملقم
لذلك، الملقم RTD غير قادر على إرسال رسائل إعلام بواسطة التحديث إلى مثيلات متعددة من Excel.
السبب
قد تتلقى هذه الرسالة إذا كان الملقم RTD EXE ActiveX تم إنشاؤه MultiUse المثيلات ، وهو إعداد افتراضي للمشاريع ActiveX EXE في Visual Basic. يمكن مشاركة EXE ActiveX هو MultiUse بين العملاء. لا يمكن مشاركة مثيلات Excel منفصلة ملقمات RTD. عند بدء تشغيل Excel على خادم RTD ، Excel باستدعاء أسلوب Server RTD ServerStart ويمرره ثم مرجعاً إلى كائن رد الاتصال لذلك المثيل من Excel. لذلك، إذا حاول مثيلين من Excel في مشاركة نفس الملقم RTD ، يستبدل المثيل الثاني كائن رد الاتصال الخاص المثيل الأول. هذا السلوك إبطال كائن رد الاتصال الخاص المثيل الأول.
الحل
استخدام المثيلات SingleUse مكونات ActiveX EXE التي سوف تعمل كملقمات RTD لـ Excel. عند إنشاء ActiveX EXE المكونات كما SingleUse قم لكل مثيل من Excel له مثيل RTD الخاصة به الملقم.

يتم حل آخر لاستخدام DLL ActiveX لملقم RTD بدلاً من EXE ActiveX. تحميل DLL ActiveX في نفس مساحة العملية الخاصة بها كعملاء ويكون لكل مثيل من Excel دائماً مثيل الملقم RTD الخاصة به.
معلومات أخرى

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

  1. في Visual Basic، EXE ActiveX جديدة إنشاء المشروع.
  2. من القائمة المشروع انقر "مراجع".
  3. حدد مكتبة كائنات Microsoft Excel 2002 ثم انقر فوق موافق.
  4. من القائمة المشروع انقر فوق خصائص مشروع1.
  5. تغيير "اسم المشروع" إلى "RTDExe" ثم انقر فوق موافق.
  6. قم بتغيير الخاصية اسم فئة الوحدة النمطية Class1 "مثال".
  7. قم بإضافة التعليمة البرمجية التالية إلى فئة الوحدة النمطية.
    Option ExplicitImplements IRtdServer  'Interface allows Excel to contact this RealTimeData server.Dim nCounter As LongPrivate Function IRtdServer_ConnectData(ByVal TopicID As Long, Strings() As Variant, _   GetNewValues As Boolean) As Variant    IRtdServer_ConnectData = nCounterEnd FunctionPrivate Sub IRtdServer_DisconnectData(ByVal TopicID As Long)    nCounter = 0End SubPrivate Function IRtdServer_Heartbeat() As Long    'Do nothing.End FunctionPrivate Function IRtdServer_RefreshData(TopicCount As Long) As Variant()    Dim aUpdates(0 To 1, 0 To 0) As Variant    nCounter = nCounter + 1    aUpdates(0, 0) = 0   'For this sample, we only refresh topic id = 0    aUpdates(1, 0) = nCounter    TopicCount = 1    IRtdServer_RefreshData = aUpdatesEnd FunctionPrivate Function IRtdServer_ServerStart(ByVal CallbackObject As Excel.IRTDUpdateEvent) As Long    nCounter = 0    Set oCallBack = CallbackObject    g_TimerID = SetTimer(0, 0, TIMER_INTERVAL, AddressOf TimerCallback)    If g_TimerID > 0 Then IRtdServer_ServerStart = 1       'Any value <1 indicates failure.End FunctionPrivate Sub IRtdServer_ServerTerminate()    KillTimer 0, g_TimerIDEnd Sub					
  8. من القائمة المشروع حدد إضافة الوحدة النمطية.
  9. قم بإضافة التعليمة البرمجية التالية إلى وحدة نمطية جديدة.
    Public Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, _   ByVal uElapse As Long, ByVal lpTimerFunc As Long) As LongPublic Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As LongPublic Const TIMER_INTERVAL = 5000Public oCallBack As Excel.IRTDUpdateEventPublic g_TimerID As LongPublic Sub TimerCallback(ByVal hWnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, _   ByVal dwTime As Long)    oCallBack.UpdateNotifyEnd Sub					
  10. من القائمة ملف، انقر فوق جعله RTDExe.exe إنشاء المكون.
  11. في Excel، قم بإنشاء مصنف جديد.
  12. في الخلية A1، اكتب الصيغة التالية:
    =RTD("RTDExe.Example",,"X")
    تقوم الدالة بإرجاع 0.
  13. بعد خمس ثواني، القيمة بزيادات A1 تشير إلى أن يتم إعلام الخادم Excel تحديثات.
  14. بدء تشغيل مثيل آخر من Excel ثم قم بإضافة مصنف جديد.
  15. في الخلية A1، اكتب الصيغة التالية:
    =RTD("RTDExe.Example",,"X")
    تقوم الدالة بإرجاع 0.
  16. يستمر تحديث القيمة في A1 المثيل الثاني من Excel. لكن لا القيمة في A1 المثيل الأول. بعد نبضات انقضاء الفاصل الزمني (15 ثانية هو الافتراضي) ، المثيل الأول من Excel يعرض رسالة الخطأ التالية:
    ملقم بيانات الوقت الحقيقي 'rtdexe.example' لا يستجيب. هل ترغب في أن يقوم Microsoft Excel محاولة إعادة تشغيل الملقم
    إذا نقرت نعم ، تشغيل الملقم وتلقيها المثيل الأول من Excel التحديث إعلامات من الملقم. ومع ذلك، بعد إعادة تشغيل الملقم المثيل الثاني من Excel ثم ينشئ نفس الرسالة بعد الوصول إلى الفاصل الزمني لنبض العمل.
لتصحيح المشكلة بحيث لا تتلقى هذا الخطأ انتقل إلى المشروع في Visual Basic تغيير خاصية Instancing فئة مثال إلى SingleUse فيه ثم قم بإعادة إنشاء ملقم RTD.
مراجع
لمزيد من المعلومات، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
285339كيفية إنشاء ملقم RealTimeData لـ Excel
rtdserver realtimedata الوقت الحقيقي بيانات الملقم rtd الوقت الحقيقي prb XL2007 XL2003 XL2002 XL2002

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

خصائص

رقم الموضوع: 284883 - آخر مراجعة: 01/12/2015 17:24:02 - المراجعة: 3.2

Microsoft Office Excel 2007, Microsoft Office Excel 2003, Microsoft Excel 2002 Standard Edition, Microsoft Visual Basic 6.0 Professional Edition

  • kbnosurvey kbarchive kbmt kberrmsg kbpending kbprb KB284883 KbMtar
تعليقات