2010-08-13 21 views
12

में फ़ॉर्म के बीच पैरामीटर पास करना मैंने लॉगिन नाम का एक लॉगिन फॉर्म बनाया है जहां उपयोगकर्ता नाम txtEmployee टेक्स्टबॉक्स में टाइप किया गया है, और मुझे इसे एमएस एक्सेस में दूसरे फॉर्म में दूसरे पृष्ठ में प्रदर्शित करने की आवश्यकता है।एमएस एक्सेस

+0

उपयोगकर्ता है विंडोज लॉगिन उपयोगकर्ता नाम के समान नाम? यदि ऐसा है, तो आप इसका नाम प्राप्त कर सकते हैं: http://www.mvps.org/access/api/api0008.htm – Fionnuala

+1

इसके अलावा, आपको उपयोगकर्ता नाम प्रदर्शित करने की आवश्यकता क्यों है, निश्चित रूप से उपयोगकर्ता जानता है कि वे कौन हैं? अगर आपको किसी अन्य कारण के लिए नाम की आवश्यकता है, तो आपको ऐसा कहना चाहिए, क्योंकि जानकारी पास करने के एक से अधिक तरीके हैं। उदाहरण के लिए, यदि नाम रिकॉर्ड करने के लिए नाम का उपयोग किया जाता है, तो ओपनफॉर्म विधि का तर्क शायद सबसे अच्छा है। – Fionnuala

+2

ऐसा लगता है जैसे आपने नकली सुरक्षा के साथ एक प्रणाली बनाई है। जेट यूएलएस या विंडोज एनटीएफएस सुरक्षा या सक्रिय निर्देशिका का उपयोग करने के बजाय, आपने ऐसा क्यों किया? –

उत्तर

24

DoCmd.OpenForm आपको अंतिम पैरामीटर के रूप में मनमाने ढंग से मूल्य पारित करने की अनुमति देता है। यह मान Me.OpenArgs के रूप में नए रूप में पहुँचा जा सकता है:

' Invoked by some Button on the first form ' 
Sub GoToSecondPage() 
    DoCmd.OpenForm "MySecondPage", acNormal, , , , , txtEmployee.Value 
End Sub 

' Second form ' 
Sub Form_Open(Cancel As Integer) 
    If Not IsNull(Me.OpenArgs) Then 
     lblShowEmployeeName.Value = Me.OpenArgs 
    End If 
End Sub 

(। कोड उदाहरण अपरीक्षित)

4

व्यक्तिगत तौर पर मैं उन्हें खुले तर्क के माध्यम से पारित होगा जब प्रपत्र खोलने। प्रपत्र एक से उदाहरण के लिए अपने

DoCmd.OpenForm "frmB", , , , , acDialog,”Badger” 

लिखते थे और फिर प्रपत्र बी करें OnOpen स्थिति में आप पर कब्जा कर सकते हैं क्या आप इस

Me.txtSomething=Me.OpenArgs 

की तरह भेजा है तो आप केवल एक बात मैं करता हूँ लेकिन क्या पारित कर सकते हैं खुले तर्कों में एक पाइप सीमित स्ट्रिंग पास है और फिर इसे विभाजित करें।

+0

आप ACDialog के साथ क्यों खुल रहे हैं? – Fionnuala

+0

वैसे यह उदाहरण पॉपअप फॉर्म की तरह लिया गया था, इसलिए मैं इसे मोडल करना चाहता था, अगर ओपी सिर्फ सामान्य फॉर्म –

0

एक जोड़े विचारों ...

, एक वैश्विक चर के नाम लिखने के लिए तो OnLoad इवेंट के साथ दूसरे पृष्ठ पर क्षेत्र को पॉप्युलेट लॉगिन उपयोगकर्ता नाम मैदान पर AfterUpdate घटना का प्रयोग करें।

या, आप सीधे = करने के लिए क्षेत्र का डिफ़ॉल्ट मान सेट कर सकते हैं यदि आप हर समय खुला रूप में लॉग छोड़ने पर योजना [फार्म]! [LogInForm]! [उपयोगकर्ता नाम]

0

क्यों एक नहीं बना सार्वजनिक फ़ंक्शन जो & स्टोर करता है/या आपके द्वारा पहले फॉर्म के बाद स्टोर किए जाने वाले वैश्विक चर को पुनर्प्राप्त करता है? यह आपको न केवल एक या एक से अधिक रूपों पर इसका उपयोग करने की अनुमति देगा, बल्कि एक क्वेरी के मानदंड के रूप में भी (उदाहरण के लिए, रिकॉर्ड को वापस करने के लिए जो आपके द्वारा संग्रहीत उपयोगकर्ता नाम से मेल खाता है)।

मैं मानता हूं कि यह "नकली" सुरक्षा है, लेकिन कई बार आपकी आवश्यकताओं के लिए पर्याप्त है। मैंने इसे पहले कार्यान्वित किया है, जहां मैं उपयोगकर्ता स्ट्रिंग उपयोगकर्ता नाम से उपयोगकर्ता तालिका में प्रविष्टि से मेल खाता हूं।

बीटीडब्ल्यू, मैं इस सुविधा को निजीकरण के रूप में संदर्भित करता हूं, सुरक्षा नहीं।

बस एक विचार।

DoCmd.OpenForm FormName:="miscForm", OpenArgs:=paramstring 

यहाँ एक पाइप-सीमांकित स्ट्रिंग DoCmd.OpenForm को पैरामीटर के रूप में पारित कर दिया प्रसंस्करण के लिए एक नियमित है::

+1

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

5

आप OpenArgs पैरामीटर के रूप में एक सीमांकित स्ट्रिंग पारित कर सकते हैं

Dim Pstring As Variant 

If Len(Me.OpenArgs) > 0 Then 
    Pstring = Split(Me.OpenArgs, "|") 
    var1 = Pstring(0) 
    <etc..> 
End If 
+1

मुझे आमतौर पर डिज़ाइन समस्या के संकेत के रूप में ऐसा करने की आवश्यकता दिखाई देती है। यही है, अगर आपको फॉर्म में उस जानकारी को पास करना है, तो मूल रूप से ऐसा करने के कुछ प्रकार के संरचित तरीके का उपयोग करना चाहिए। –

+0

@ डेविड, क्या आप 'स्ट्रक्चर' टाइप वैरिएबल का जिक्र कर रहे हैं? मैं केवल अपने वर्तमान एक्सेस ऐप में एक फॉर्म के लिए इसका उपयोग करता हूं, ताकि फॉर्म बनाने से पहले मुझे डेटाबेस में सामान डालना पड़े, और फिर जब मैं फॉर्म में हूं। मैं एक बेहतर विचार के लिए खुला हूं, मैं कोई एक्सेस फॉर्म विशेषज्ञ नहीं हूं। –

+0

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

संबंधित मुद्दे