2009-09-22 16 views
9

एक रूप से एक मूल्य के पारित करने के लिए तो मैं कैसे एक रूप से एक मूल्य के पारित कर सकते हैं? उदाहरण के लिए: उपयोगकर्ता का चयन करें सूची में से एक संगठन है और यह एक यात्रा फार्म का है कि एक उपयोगकर्ता यात्रा के बारे में विभिन्न जानकारी दर्ज करने की अनुमति देता है को खोलता है। एक ही स्थान पर मैं एक और थोड़ा पॉप अप प्रपत्र जहां वे संगठन वे दौरा कर रहे हैं के संपर्क जानकारी (POC के लिए सिर्फ एक नाम और फोन) दर्ज कर सकते हैं जोड़ना चाहते हैं।MSAccess 2003 - VBA एक और

तो जब चयन स्क्रीन से प्रारंभिक रूप खोला गया तो इसमें दो आईडी हैं जो टेक्स्ट बॉक्स में छिपी हुई हैं (एक ट्रिपआईडी है, और दूसरा ऑर्गिड है), तो मैं इसे दूसरे छोटे पॉप में कैसे पास करूं अप फॉर्म ताकि संपर्क जानकारी के साथ सापेक्ष आईडी हो।

धन्यवाद।

+0

यह कुछ समय हो गया है क्योंकि मैंने एक्सेस के साथ काम किया है, लेकिन क्या आप दूसरे फॉर्म को कॉल कर सकते हैं, मॉड्यूल-स्तर/फॉर्म-स्तरीय चर सेट कर सकते हैं, फिर दूसरा फॉर्म बंद कर सकते हैं? –

उत्तर

16

सबसे अच्छा तरीका मदद कर सकता है नहीं कर रहा है चर का एक गुच्छा पारित करने का प्रयास करने के लिए । यह बहुत अधिक कोड है, और लचीला है। उदाहरण के लिए, यदि आपको दो मानों को पारित करने की आवश्यकता है, तो उन वर्षों में क्या होता है जब यह आवश्यकता 5 मानों तक बढ़ जाती है? मूल्यों की पूरी रकम को बनाए रखने और पास करने की कोशिश करना बहुत अधिक कोडिंग कार्य है।

ध्यान रखें कि एमएस-उपयोग में प्रत्येक प्रपत्र वास्तव में एक वर्ग के उद्देश्य यह है कि आप कोड में हेरफेर कर सकते हैं में रखें। तो, यहाँ एक वस्तु दृष्टिकोण का उपयोग करें और आप आप केवल कम कोड नहीं लिख पाते हैं, लेकिन अपने कोड, और अधिक स्वच्छ अधिक मॉड्यूलर हो जाएगा, वैश्विक वार्स की कोई आवश्यकता नहीं है, और कोड आप लिखते हैं अक्सर विभिन्न रूपों के बीच फिर से इस्तेमाल किया जा सकता।

सामान्य तौर पर जब एक रूप एक और रूप 2nd रूप में ऑन-खुला घटना रूपों में आप कर सकते हैं की शुरूआत (वास्तव में, तुम भी ऑन लोड घटना के रूप में के रूप में देर से उपयोग कर सकते हैं):

यहाँ है कैसे पिछला फॉर्म ऑब्जेक्ट का संदर्भ लें। दूसरे शब्दों में, आप यहां एक ऑब्जेक्ट दृष्टिकोण का उपयोग कर सकते हैं।

रूपों मॉड्यूल स्तर पर, फार्म के लिए मैं के रूप में एक रूप वस्तु की घोषणा:

Option Compare Database 
Option Explicit 
dim frmPrevious  as form 

फिर, रूपों में ऑन लोड घटना, हम चले:

Set frmPrevious = Screen.ActiveForm 

अब, किसी भी कोड हमारे प्रपत्र आज़ादी कोड, घटनाओं का उपयोग कर सकते में, यहां तक ​​कि कोड में है कि पिछले रूप से सार्वजनिक रूप में घोषित किया varibles।

तो, यदि आप पिछले फॉर्म की डिस्क लिखना चाहते हैं, और डेटा का पुनः लोड करना चाहते हैं।

frmPrevious.Refresh 

आप ID मान सेट करना चाहते हैं, तो यहां जाएं:

frmPrevious!ID = some value 

और, ध्यान दें कि आप भी रूप है कि फार्म के लिए एक सार्वजनिक चर के रूप में पिछले घोषणा कर सकते हैं, और इस तरह अगर आप दो रूपों गहराई में, आप जा सकते हैं:

frmPrevious.frmPrevious!ID = some value 

तो, बस की घोषणा एक रूपों प्रत्येक रूपों कोड मॉड्यूल में वस्तु (या लोगों जहां कोड में मूल्यों का उपयोग करने की आवश्यकता है कृपया कम से कम)। उपरोक्त का अर्थ है कि किसी भी कोड के पिछले फॉर्म ऑब्जेक्ट के लिए एक तैयार संदर्भ है। कुछ और सेटअप उत्पन्न करने के लिए पिछले प्रपत्र मजबूर करने के लिए विकल्प की तरह

frmPrevious.MyCustomRefresh 

या यहां तक ​​कि चीजें एक चालान नंबर:: कार्य घोषित एक रूप में जघन के रूप में रूप की एक विधि बन जाएगा, और की तरह चलाया जा सकता है

frmPrevous.SetInvoice 

या frmPrevious.SetProjectStatusOn

तो आप न केवल मूल्यों और डेटा आगे पीछे शफ़ल सकते हैं, लेकिन आप आसानी से सुविधाओं और कार्यों कि तुम prevous फार्म के लिए कोड में निर्माण पर अमल कर सकते हैं।

वास्तव में एक कोडिंग मानक के रूप में, मेरे अधिकांश रूपों में माइक्रिफ्रेश नामक एक जघन्य कार्य होता है।

ध्यान दें कि इस दृष्टिकोण की सुंदरता यह है कि आप इस प्रकार के पिछले फॉर्म से + उपयोग + सेट मान पढ़ सकते हैं। यह आपके कोड को न केवल मान प्राप्त करने की अनुमति देता है, बल्कि उस पिछले रूप में मान भी सेट करता है। तो यह दृष्टिकोण द्वि-दिशात्मक है। आप फ़ॉर्म के बीच डेटा और मूल्यों को आगे और पीछे घुमा सकते हैं। यहां दूसरा लाभ यह है कि आप केवल चर के लिए ही सीमित नहीं हैं, लेकिन फ़ील्ड का उपयोग कर सकते हैं, मूल्यों (घटनाओं, गुणों) आदि को नियंत्रित कर सकते हैं

इस दृष्टिकोण का अर्थ है कि पिछले का अधिकांश रूप अब आपकी उंगलियों पर है।

तो चर के पूरे झटके को पारित करने की कोशिश न करें। फॉर्म के संदर्भ को पास करें और आपके पास अपनी उंगलियों पर एक अच्छी तैयार वस्तु है और यह इस प्रकार की कोडिंग समस्या को हवा बनाता है।

+1

बहुत बहुत धन्यवाद! मैं विशेष रूप से व्याख्या की सराहना करता हूं; मुझे सीखने में मदद करता है! धन्यवाद अल्बर्ट! – Justin

+0

दृष्टिकोण बहुत दिलचस्प है। मैं व्यक्तिगत रूप से एक विशिष्ट वस्तु के साथ कुछ समान (कम से कम आत्मा में) का उपयोग करता हूं जिसमें सभी खुली खिड़कियों का संग्रह होता है, और जहां खिड़कियों को रूपों के उदाहरण के रूप में घोषित किया जाता है। यह मुझे मानक रूप विधियों और गुणों के अतिरिक्त विशिष्ट 'विंडो' विधियों और गुणों की एक सेरी रखने की अनुमति देता है। –

+1

यह बहुत अच्छा है, लेकिन सिर्फ एक नोट है। मुझे नहीं लगता कि यह सक्रिय सबफॉर्म का संदर्भ प्राप्त करने के लिए काम करता है। संदर्भ हमेशा मुख्य रूप में होगा। – HK1

6

हमेशा की तरह पॉपअप रूप से प्रारंभिक रूप में बक्सें संदर्भ के लिए, इस तरह होगा:

Forms!frmInitialForm!tripID 
Forms!frmInitialForm!OrgID 

बहरहाल, यह कसकर प्रारंभिक रूप को पॉपअप फार्म, बांधता है इतना है कि यह नहीं हो सकता आवेदन में कहीं और इस्तेमाल किया।

एक बेहतर दृष्टिकोण OpenArgs उपयोग करने के लिए है:

DoCmd.OpenForm "frmPopup", OpenArgs:=Me.tripID & ", " & me.OrgID 

यह एक स्ट्रिंग है, जो पॉपअप रूप में भेजा जाता है में अपने दो मानों देता है। फिर आप स्प्लिट फ़ंक्शन का उपयोग करके ओपनएआरजी से दो मानों को पार्स कर सकते हैं।

OpenArgs का उपयोग कर पैरामीटर प्रदान करने के बारे में अधिक जानकारी के लिए देखें: http://www.fmsinc.com/free/NewTips/Access/accesstip13.asp

+0

धन्यवाद! संसाधन के लिए भी धन्यवाद! – Justin