परिचय।
पिछले हफ्ते हमने क्लास ClsArea को बेस क्लास के रूप में इस्तेमाल करते हुए एक व्युत्पन्न क्लास ClsVolume ऑब्जेक्ट बनाया है। हमने ऑब्जेक्ट यूजर प्रोग्राम के लिए बेस क्लास की प्रॉपर्टीज और फंक्शन को एक्सपोज करने के लिए व्युत्पन्न क्लास में प्रॉपर्टी प्रोसीजर बनाया है। यह विधि व्युत्पन्न वर्ग में भी बेस क्लास की सभी संपत्ति प्रक्रियाओं की पुनरावृत्ति की मांग करती है। यहां, हम बेस ClsArea क्लास की संपत्ति प्रक्रियाओं को दोहराए बिना समान व्युत्पन्न ClsVolume क्लास बनाने का तरीका तलाशते हैं।
हमने प्राप्त करें . का उपयोग सीख लिया है और चलो कक्षाओं में संपत्ति प्रक्रिया। कक्षाओं में उपयोग की जाने वाली एक और संपत्ति प्रक्रिया है:सेट संपत्ति प्रक्रिया। सेट प्रॉपर्टी प्रोसीजर सीधे एक ही प्रकार के क्लास ऑब्जेक्ट को ऑब्जेक्ट असाइन करता है।
आगे जारी रखने से पहले आप इस विषय पर पहले के पृष्ठों पर जा सकते हैं, यदि आपने पहले से ऐसा नहीं किया है, तो लिंक नीचे दिए गए हैं:
- एमएस-एक्सेस क्लास मॉड्यूल और वीबीए
- एमएस-एक्सेस वीबीए क्लास ऑब्जेक्ट एरेज़
- एमएस-एक्सेस बेस क्लास और व्युत्पन्न ऑब्जेक्ट
ClsVolume Class, The Makeover.
हम उसी ClsVolume क्लास मॉड्यूल का एक अलग संस्करण बनाएंगे, जिसे हमने पिछले सप्ताह बनाया है, ClsArea को बेस क्लास के रूप में, एक अलग दृष्टिकोण के साथ, और कम कोड के साथ।
एक नया क्लास मॉड्यूल बनाएं और उसका नाम संपत्ति मान ClsVolume2 . में बदलें ।
निम्नलिखित कोड को कॉपी करके क्लास मॉड्यूल ClsVolume2 में पेस्ट करें और मॉड्यूल को सेव करें:
Option Compare Database Option Explicit 'Method two-1 Private p_Height As Double Private p_Area As ClsArea Public Property Get dblHeight() As Double dblHeight = p_Height End Property Public Property Let dblHeight(ByVal dblNewValue As Double) p_Height = dblNewValue End Property Public Function Volume() As Double Volume = p_Area.dblLength * p_Area.dblWidth * p_Height End Function
'नया प्राप्त करें और सेट करें ClsArea ऑब्जेक्ट्स के लिए संपत्ति प्रक्रिया सार्वजनिक संपत्ति CArea प्राप्त करें () ClsArea सेट CArea =p_AreaEnd संपत्ति सार्वजनिक संपत्ति सेट CArea (ByRef क्षेत्र मान ClsArea के रूप में) सेट करें p_Area =AreaValueEnd संपत्ति
संकलित करें Select चुनें डीबग . से प्रोजेक्ट का नाम यह सुनिश्चित करने के लिए कि सभी VBA प्रोजेक्ट कोड त्रुटि रहित हैं, डेटाबेस में VBA कोड संकलित करने के लिए मेनू। यदि आपको अपने अन्य VBA प्रोग्राम में कोई त्रुटि मिली है, तो कृपया त्रुटि को ट्रैक करें, उसे ठीक करें और अपने प्रोजेक्ट को पुन:संकलित करें। अन्यथा, VBA IntelliSense जो वस्तुओं के गुणों और कार्यों की सूची प्रदर्शित करता है, वह काम नहीं करेगा। यह हमें वस्तु गुणों से/में मान निर्दिष्ट/पुनर्प्राप्त करने से नहीं रोकेगा। लेकिन, सीखते समय यह देखना महत्वपूर्ण है कि किसी वस्तु के गुण पॉप अप होते हैं और कोडिंग में सहायक के रूप में सूची प्रदर्शित करते हैं।
प्राप्त करें/सेट करें संपत्ति प्राप्त करें/जाने दें प्रक्रिया के बजाय।
हमने ClsArea की सभी प्रॉपर्टी प्रक्रियाओं को छोड़ दिया है, जिसे ClsVolume क्लास के पिछले संस्करण में बनाया गया है, और उन्हें गेट/सेट से बदल दिया गया है। प्राप्त करें/चलो . के बजाय संपत्ति प्रक्रियाएं . घोषणा क्षेत्र की जाँच करें जहाँ हमने p_Area . घोषित किया है ClsArea क्लास ऑब्जेक्ट के रूप में घोषित किया गया है।
जब कोई ऑब्जेक्ट घोषित किया जाता है तो हमें सामान्य रूप से उपरोक्त कोड में Class_Initialize() प्रक्रिया में इस ऑब्जेक्ट का एक उदाहरण बनाना चाहिए। हमने इसे यहां नहीं किया क्योंकि हम इसे उपयोगकर्ता प्रोग्राम में करने की योजना बनाते हैं और इसके गुणों को उपयुक्त मानों से भरने की योजना बनाते हैं और फिर अंतिम गणना चरण से पहले उनके मूल्यों का उपयोग करने के लिए इसे ClsVolume2 क्लास में पास कर देते हैं।
सेट CArea() . पर ध्यान दें प्रक्रिया। यह ByRef पैरामीटर है AreaValue को ClsArea ऑब्जेक्ट के रूप में घोषित किया गया है। प्रॉपर्टी सेट CArea(ByRef AreaValue as ClsArea) को पास करने पर यह ClsArea क्लास ऑब्जेक्ट को स्वीकार करेगा। , ऑब्जेक्ट वेरिएबल AreaValue, . में और p_Area . को असाइन करता है ClsVolume2 . की संपत्ति वस्तु।
CArea प्राप्त करें () संपत्ति प्रक्रिया ऑब्जेक्ट को कॉलिंग प्रोग्राम में वापस कर देती है।
हमारे पहले के कार्यक्रमों में, हमने किसी वस्तु के अलग-अलग तत्वों (लंबाई, चौड़ाई, ऊंचाई) के लिए असाइन/रिटर्न के लिए संपत्ति प्रक्रियाएं लिखी हैं। मान प्रति/से उन्हें। यहां, अंतर यह है कि हम एक संपूर्ण ऑब्जेक्ट को सेट प्रक्रिया के पैरामीटर के रूप में पास कर रहे हैं। इस वस्तु के संपत्ति मूल्य (जैसे lblHeight) को पुनः प्राप्त करने के लिए हमें इसे CArea.dblLength के रूप में संबोधित करना होगा . प्राप्त करें/सेट करें संपत्ति प्रक्रिया का नाम क्षेत्र मुख्य कार्यक्रम में घोषित होने पर मुख्य वस्तु का चाइल्ड ऑब्जेक्ट बन जाता है और उनकी संपत्ति प्रक्रियाओं को सीधे ऑब्जेक्ट एड्रेस Vol.CArea.dblLength के माध्यम से एक्सेस किया जा सकता है।
मानक मॉड्यूल में एक परीक्षण कार्यक्रम।
हम अपने नए व्युत्पन्न क्लास ऑब्जेक्ट ClsVolume2 का परीक्षण करने के लिए मानक मॉड्यूल में एक छोटा प्रोग्राम लिखेंगे।
अपने प्रोजेक्ट में एक नया मानक मॉड्यूल डालें। मॉड्यूल में निम्नलिखित कोड को कॉपी और पेस्ट करें और कोड को सेव करें:
Public Sub SetNewVol2_1() 'Method 1/2 Dim Vol As New ClsVolume2 'ClsArea Object instantiated and passed to the 'Property Procedure Set CArea in ClsVolume2. Set Vol.CArea = New ClsArea 'declare and instantiate the object in one statement Stop Vol.CArea.strDesc = "Bed Room" Vol.CArea.dblLength = 90 Vol.CArea.dblWidth = 10 Vol.dblHeight = 10 'assign height to ClsVolume2 Stop Debug.Print "Description", "Length", "Width", "Area", "Height", "Volume" Debug.Print Vol.CArea.strDesc, Vol.CArea.dblLength, Vol.CArea.dblWidth, Vol.CArea.Area, Vol.dblHeight, Vol.Volume Set Vol.CArea = Nothing Set Vol = Nothing End Sub
कोड समीक्षा पंक्ति दर पंक्ति।
आइए ऊपर दिए गए VBA कोड पर एक नज़र डालते हैं। प्रथम-पंक्ति Vol. . नाम से क्लास ClsVolume2 को इंस्टेंट करती है अगली दो टिप्पणियों के बाद सेट करें Vol.CArea . के साथ कथन संपत्ति प्रक्रिया को नया . कहा जाता है और पास करता है तत्काल ClsArea पैरामीटर के रूप में वस्तु।
मैंने एक रोकें . लगाया कार्यक्रम में विराम देने के लिए अगली पंक्ति में कथन यह देखने के लिए कि वस्तु को सेट को कैसे सौंपा जा रहा है क्षेत्र वस्तु। कैसे? हम इसे एक मिनट में खोज लेंगे?
अगली चार पंक्तियाँ ClsArea ऑब्जेक्ट और ClsVolume2 ऑब्जेक्ट की ऊँचाई गुण को मान निर्दिष्ट करती हैं।
अगला रोकें कार्यक्रम में एक विराम बनाता है ताकि हम स्मृति का निरीक्षण कर सकें कि मूल्यों को स्मृति में कैसे रखा जाता है।
अगली पंक्ति अगली पंक्ति पर मुद्रित मानों के लिए डीबग विंडो में शीर्षकों को प्रिंट करती है।
अगली पंक्ति ऑब्जेक्ट गुणों के मानों को स्मृति से डीबग विंडो में प्रिंट करती है।
कोड को अगले स्टॉप स्टेटमेंट पर चलाएँ
आइए हम कोड चलाते हैं और यह देखने के लिए मेमोरी का निरीक्षण करते हैं कि प्रत्येक चरण में वहां क्या होता है, जहां मैं स्टॉप स्टेटमेंट डालता हूं।
- कोड के बीच में कहीं क्लिक करें और F5 press दबाएं पहले स्टॉप स्टेटमेंट . पर कोड चलाने और प्रोग्राम को रोकने के लिए
- स्थानीय विंडो का चयन करें देखें . से कोड विंडो के नीचे एक नई विंडो खोलने के लिए मेनू, यह प्रदर्शित करने के लिए कि ClsArea और ClsVolume2 ऑब्जेक्ट्स, उनके गुण, और उनकी सदस्य संपत्ति प्रक्रियाओं को स्मृति में कैसे रखा जाता है। स्थानीय विंडो . की एक नमूना छवि नीचे दिया गया है।
स्थानीय विंडो देखें।
अन्य विंडोज़ साइज़िंग हैंडल को उनकी ऊंचाई कम करने के लिए ऊपर खींचें ताकि स्थानीय लोगों के प्रदर्शन के लिए अधिक स्थान दिया जा सके खिड़की। बेहतर होगा, डिबग विंडो को कुछ समय के लिए बंद कर दें, बाद में जरूरत पड़ने पर इसे वापस लाने के लिए Ctrl+G का उपयोग करें।
हम स्थानीय . में सभी वस्तुओं और उनके गुणों का चित्रमय दृश्य देख सकते हैं खिड़की। प्लस [+] प्रतीक के साथ पहला नाम मानक मॉड्यूल का नाम दिखाता है, जहां से हमारा कार्यक्रम चल रहा है।
Vol . नाम के साथ अगला प्लस [+] प्रतीक स्मृति में ClsVolume2 तत्काल वस्तु है।
- विवरणों को विस्तृत करने और प्रदर्शित करने के लिए [+] प्रतीकों पर क्लिक करें।
आपको अगले स्तर की वस्तुएँ और गुण मिलेंगे।
[+] क्षेत्र इंगित करता है कि इस ऑब्जेक्ट में अगले स्तर के गुण और उनके मान हैं।
dblHeight संपत्ति प्राप्त करें प्रक्रिया सीधे वॉल्यूम ऑब्जेक्ट के अंतर्गत आती है।
[+]p_Area निजी संपत्ति है जिसे ClsArea . के रूप में घोषित किया गया है ClsVolume2 कक्षा में कक्षा।
p_ऊंचाई ClsVolume2 में घोषित निजी संपत्ति भी है।
- प्लस पर क्लिक करें [+] वस्तुओं को उनके गुणों और मूल्यों को दिखाने के लिए विस्तारित करने के लिए प्रतीक।
[+]CArea . का विस्तार हमें ClsArea ऑब्जेक्ट का दृश्य देता है जिसे हमने CArea () संपत्ति प्रक्रिया सेट करने के लिए पारित किया है।
[+]p_Area . का विस्तार निजी घोषित ClsArea संपत्ति का दृश्य देता है।
p_Area . पर ध्यान दें ClsVolume2 क्लास ऑब्जेक्ट की निजी संपत्ति, और उसके सभी तत्व केवल CArea के माध्यम से ही पहुंच योग्य हैं ऑब्जेक्ट प्रॉपर्टी प्राप्त करें/सेट करें बाहरी दुनिया के लिए प्रक्रियाएं।
लोकल विंडो का दूसरा कॉलम ऑब्जेक्ट प्रॉपर्टीज को असाइन किए गए मान दिखाएगा और वर्तमान में उनमें कोई वैल्यू नहीं है।
तीसरा कॉलम डेटा प्रकार या ऑब्जेक्ट क्लास मॉड्यूल नाम दिखाता है।
- ऑब्जेक्ट प्रॉपर्टीज में कुछ मान निर्दिष्ट करने के लिए प्रोग्राम को आगे चलाने के लिए F5 दबाएं, जब तक कि इसे अगले स्टॉप स्टेटमेंट पर रोक न दिया जाए। कार्यक्रम अगले रोकें . पर रुक जाएगा बयान। मूल्यों के परिवर्तन के लिए स्थानीय विंडो की जाँच करें।
क्षेत्र . के अंदर मान 90, 10 के साथ पहली दो पंक्तियों पर आपत्ति करें, और "बेड रूम" मान वाली अंतिम strDesc प्राप्त करें हैं संपत्ति प्रक्रियाएं। p_Desc, p_Length, और p_width सेट . के माध्यम से असाइन किए गए मान हैं p_Area . के लिए संपत्ति प्रक्रियाएं ClsVolume2 क्लास ऑब्जेक्ट की संपत्ति।
p_Area ClsVolume2 की निजी संपत्ति के रूप में घोषित ClsArea क्लास का ऑब्जेक्ट इसके गेट/सेट के साथ देखा जाता है संपत्ति प्रक्रिया और असाइन किए गए मान।
चेक करें टाइप करें [-]क्षेत्र . का स्तंभ और [-]p_Area दोनों ऑब्जेक्ट ClsArea बेस क्लास से लिए गए हैं।
ClsArea और ClsVolume2 क्लास ऑब्जेक्ट्स का अलग-अलग उपयोग।
अगले सप्ताह हम उन्हीं दो वस्तुओं के साथ एक और दृष्टिकोण का प्रयास करेंगे। यदि आप इसे स्वयं आज़माना चाहते हैं, तो इसे स्वयं आज़माने का तरीका यहाँ दिया गया है।
- स्टैंडर्ड मॉड्यूल प्रोग्राम में दो अलग-अलग ऑब्जेक्ट के रूप में ClsVolume2 और ClsArea क्लास को इंस्टेंट करें।
- दोनों ऑब्जेक्ट प्रॉपर्टी में मान असाइन करें।
- ClsArea तत्काल ऑब्जेक्ट को CArea . को असाइन करें डीबग विंडो में मानों को प्रिंट करने से पहले ClsVolume2 क्लास ऑब्जेक्ट में ऑब्जेक्ट।
इस उदाहरण में, हम वही परिणाम प्राप्त कर सकते हैं जैसा हमने उपरोक्त उदाहरण में किया था, बिना संपत्ति प्राप्त करें/जाने दें प्रक्रियाओं को दोहराए बिना जैसा कि हमने ClsVolume क्लास मॉड्यूल में किया था।
इस विषय पर सभी पृष्ठों के लिंक।
- एमएस-एक्सेस क्लास मॉड्यूल और वीबीए
- एमएस-एक्सेस वीबीए क्लास ऑब्जेक्ट एरेज़
- एमएस-एक्सेस बेस क्लास और व्युत्पन्न ऑब्जेक्ट
- VBA बेस क्लास और व्युत्पन्न ऑब्जेक्ट-2
- आधार वर्ग और व्युत्पन्न वस्तु प्रकार
- एमएस-एक्सेस रिकॉर्डसेट और क्लास मॉड्यूल
- एक्सेस क्लास मॉड्यूल और रैपर क्लासेस
- आवरण वर्ग कार्यक्षमता परिवर्तन
- सुश्री-पहुंच और संग्रह वस्तु मूल बातें
- एमएस-एक्सेस क्लास मॉड्यूल और कलेक्शन ऑब्जेक्ट
- संग्रह वस्तु और प्रपत्र में तालिका रिकॉर्ड
- डिक्शनरी ऑब्जेक्ट बेसिक्स
- डिक्शनरी ऑब्जेक्ट बेसिक्स-2
- शब्दकोश ऑब्जेक्ट की और आइटम को सॉर्ट करना
- डिक्शनरी से फ़ॉर्म में रिकॉर्ड प्रदर्शित करें
- क्लास ऑब्जेक्ट्स को डिक्शनरी आइटम के रूप में जोड़ें
- क्लास ऑब्जेक्ट्स को डिक्शनरी आइटम के रूप में जोड़ें
- फॉर्म पर क्लास ऑब्जेक्ट डिक्शनरी आइटम अपडेट करें