Access
 sql >> डेटाबेस >  >> RDS >> Access

सावधान जो आप देखते हैं

मैं दूसरे दिन स्टैक ओवरफ्लो पर इस उत्तर में आया और इस पर कुछ ध्यान देना चाहता था (जोर मेरा):

डिबगिंग के दौरान मुझे यह समस्या स्वयं प्रकट हुई थी जब मेरे पास एक घड़ी थी जिसने "लापता" कुंजी के आइटम को वापस करने का प्रयास किया था . वास्तव में, आगे निराश डिबगिंग में वही समस्या थी जब मेरे पास सचमुच [scriptingdictonaryObject].exists() condtional के लिए एक घड़ी थी; मेरा सुझाव है कि घड़ी की वजह से "गायब" कुंजी जोड़ी जाती है . जब मैंने घड़ी को हटा दिया और इसके बजाय चलने के दौरान सरणी को कॉपी करने के लिए एक अस्थायी वर्कशीट बनाई, तो अवांछित कुंजियाँ अब नहीं जोड़ी गईं।
डिक्शनरी ऑब्जेक्ट जोड़ने से पहले आइटम जोड़ना () कहा जाता हैमैं एमएस स्क्रिप्टिंग रनटाइम लाइब्रेरी से एक डिक्शनरी ऑब्जेक्ट का उपयोग कर रहा हूं ताकि सरणी की एक श्रृंखला को स्टोर किया जा सके और आवश्यकतानुसार सरणी कोशिकाओं पर संचालन किया जा सके। प्रक्रियाओं के माध्यम से जाने के लिए लूप के लिए है ... Stack Overflowriddley_w

यहाँ क्या हो रहा है?

डिक्शनरी ऑब्जेक्ट की "फीचर्स" में से एक यह है कि यह निहित रूप से . होगा कॉल करने की आवश्यकता के बिना नए आइटम बनाएं। विधि जोड़ें स्पष्ट रूप से . निहित और स्पष्ट में क्या अंतर है?

नोट:डिक्शनरी ऑब्जेक्ट के प्रारंभिक-बाध्य उपयोग के लिए "माइक्रोसॉफ्ट स्क्रिप्टिंग रनटाइम" (विवरण यहां) के संदर्भ की आवश्यकता है।

Dim MyDict As New Dictionary

'Explicit add
MyDict.Add "KeyA", "Item A"

'Implicit add
MyDict.Item("KeyB") = "Item B"

Debug.Print MyDict("KeyA"); vbNewLine; MyDict("KeyB")

अंतर्निहित . के संबंध में दस्तावेज़ीकरण का प्रासंगिक भाग यहां दिया गया है मुख्य निर्माण:

टिप्पणी
अगर कुंजी आइटम . बदलते समय नहीं मिला , एक नई कुंजी निर्दिष्ट newitem . के साथ बनाया गया है . अगर कुंजी किसी मौजूदा आइटम, एक नई कुंजी . को वापस करने का प्रयास करते समय नहीं मिला बनाया गया है और उसके संगत आइटम को खाली छोड़ दिया गया है।

समस्या का पुनरुत्पादन

आइए समस्या को पुन:पेश करते हैं यह देखने के लिए कि चीजें कहां जाती हैं।

अपेक्षित व्यवहार

निम्नलिखित नमूना दिनचर्या बनाएं:

Sub WatchOut()
    Dim MyDict As Dictionary
    Set MyDict = New Dictionary
    
    Debug.Print "KeyA exists? "; MyDict.Exists("KeyA")
End Sub

उपरोक्त रूटीन को तत्काल विंडो से चलाएं और इसे वापस करना चाहिए False:

WatchOut
KeyA exists? False

घड़ी जोड़ें

अब, "कीए" आइटम की एक घड़ी जोड़ें:

आइए वॉचआउट . चलाने का प्रयास करें फिर से दिनचर्या:

WatchOut
KeyA exists? False

अब तक सब ठीक है. शायद यह कोई समस्या नहीं है।

कोड के माध्यम से कदम

आइए एक रोकें . जोड़ें कोड को तोड़ने के लिए बाध्य करने के लिए कथन:

Sub WatchOut()
    Dim MyDict As Dictionary
    Set MyDict = New Dictionary
    
    Stop
    Debug.Print "KeyA exists? "; MyDict.Exists("KeyA")
End Sub

अब, आइए वॉचआउट . को चलाने का प्रयास करें दिनचर्या:

WatchOut
KeyA exists? True

आह! घड़ी का संयोजन और डिबगर में टूटना "बग" को प्रकट होने के लिए मजबूर करने के लिए पर्याप्त है। मैंने बग लगाया डरावने उद्धरणों में क्योंकि यह वास्तव में डीबगर के लिए अपेक्षित व्यवहार है। लेकिन यह लगभग निश्चित रूप से डेवलपर के लिए अप्रत्याशित व्यवहार है।

(ध्यान दें कि रोकें . के बारे में कुछ खास नहीं है आदेश जो इस व्यवहार का कारण बनता है। आप रोकें . को हटा सकते हैं लाइन और कोड पर ब्रेकपॉइंट सेट करें और वही व्यवहार होगा।)

आप देख सकते हैं कि डिबगिंग करते समय इस तरह की चीज़ आपके बालों को बाहर निकालने का कारण बन सकती है। जब भी आपके प्रोग्राम का व्यवहार सामान्य रूप से चलने के दौरान डिबगिंग के दौरान भिन्न होता है, तो आपको एक उत्तेजक डिबगिंग सत्र का लाभ मिलता है।

सारांश

समस्या को पुन:उत्पन्न करने के लिए कदम:

  1. एक विशिष्ट शब्दकोश आइटम के लिए एक घड़ी बनाएं
  2. कोड निष्पादित करते समय डीबगर में तोड़ दें

यह शायद केवल एक या दो डेवलपर्स की मदद करेगा। लेकिन यह संभावित रूप से उन डेवलपरों को घंटे बचाएगा हताशा का। और, अगर मैं ईमानदारी से कहूं, तो मेरे उन डेवलपर्स में से एक होने की भी संभावना है;-)।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्रॉसटैब क्वेरी को एक्सेस में वापस सामान्य क्वेरी में कैसे बदलें

  2. एक्सेस 2016 में मेल मर्ज कैसे करें

  3. विश्व बैकअप दिवस:जानने के लिए 4 दिलचस्प डेटा हानि तथ्य

  4. एक्सेस 2019 ओपनिंग वर्कस्पेस को कैसे नेविगेट करें

  5. एमएस-एक्सेस बेस क्लास और व्युत्पन्न वस्तुएं