2013-01-03 25 views
5

संक्षिप्त प्रश्नोत्तरी समाधान की उम्मीद करते हुए त्वरित प्रश्न यहां।परिवर्तनों को सहेजे बिना बाध्य फ़ॉर्म बंद करना

मेरे पास डेटा प्रविष्टि के लिए पूरी तरह से एक बाध्य रूप है (रिकॉर्ड ब्राउज़ नहीं कर सकते हैं, केवल उन्हें सम्मिलित करें)। मेरे पास बहुत सारे उपयोगकर्ता होंगे जो खराब हो जाएंगे। गंदे डेटा से बचने के लिए, मैं चाहता हूं कि वे यह पुष्टि करें कि रिकॉर्ड जमा करने से पहले फॉर्म सही है।

समस्या है, जैसे ही मैं फॉर्म पर कुछ भी इनपुट करता हूं, पहुंच बनाता है और रिकॉर्ड बचाता है।

मैं चाहता हूं कि रिकॉर्ड केवल सहेजा जाए और किया जाए यदि उपयोगकर्ता 'सबमिट' पर क्लिक करता है। अगर वे एप्लिकेशन को बंद या बाहर निकलें क्लिक करते हैं, तो मैं डेटाबेस में आंशिक रूप से पूरा रिकॉर्ड नहीं चाहता हूं।

एक अनबाउंड फॉर्म का उपयोग किए बिना और एक सम्मिलित फ़ंक्शन को कॉल करने के बिना, क्या कोई आसान समाधान है?

+1

जब तक आपके पास उप-योग नहीं है तब तक आप रिकॉर्ड को पूर्ववत कर सकते हैं। – Fionnuala

+0

@remou यह ऑटोऑम्बर को कैसे प्रभावित करता है? मान लें कि मेरे पास फॉर्म पर दो समवर्ती उपयोगकर्ता हैं। उपयोगकर्ता 1 फॉर्म खोलता है और पहले डेटा दर्ज करना शुरू करता है। उपयोगकर्ता 2 फिर फॉर्म खोलता है और खुद डेटा दर्ज करता है। उपयोगकर्ता 1 का निर्णय है कि उसके पास डेटा एंट्री की तुलना में बेहतर चीजें हैं और 'पूर्ववत करें' बटन पर क्लिक करें। मुझे लगता है कि इसका परिणाम संख्याओं में एक अंतर होगा (जैसे किसी रोलबैक या प्रतिबद्धता की कमी के बजाय एक डिलीट, एक डिलीट की तरह?) – Scotch

+0

इसे भी देखें [: ​​आपके पास अपडेट किए जाने से पहले एक बूलियन चेक किया जा सकता है] (http://bytes.com/topic/access/insights/891249-how-stop-bound-forms-updating-automatically)। ऑटोइनक्रिएटर की स्थिरता रखने के मामले में, आपके पास हमेशा सम्मिलित होने से पहले एक सत्यापन हो सकता है ... – bonCodigo

उत्तर

6

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

Private Sub Form_BeforeUpdate(Cancel As Integer) 
If Me.AText = "Invalid" Then 
    Me.Undo 
    Cancel = True 
End If 
End Sub 

ध्यान दें कि एक उप-प्रपत्र के साथ एक रूप है, पूर्ववत के साथ काम नहीं कर सकते हैं क्योंकि रिकॉर्ड मुख्य रूप और इसके विपरीत करने के लिए उप-प्रपत्र से परिवर्तन पर प्रतिबद्ध है और यह सब काफी जटिल हो जाता है।

+0

हाँ, मेरे पास मूल रूप से कई रिश्तों के साथ एक सबफॉर्म है। अगर कोई रद्द/पूर्ववत करना था, तो मुझे संदेह है कि वे सबफॉर्म भरने के बिंदु पर पहुंच गए होंगे, इसलिए यह पर्याप्त हो सकता है। यदि नहीं, तो मैं पूर्ववत करने से पहले संबंधित तालिका पर एक डिलीट क्वेरी निष्पादित कर सकता हूं। धन्यवाद। – Scotch

3

Remou की विधि निश्चित रूप से तेज, यहाँ एक और मेरी टिप्पणी पर आधारित है;)

Option Explicit 

Private blnGood As Boolean 

Private Sub cmdSubmit_Click() 
    blnGood = True 
    Call DoCmd.RunCommand(acCmdSaveRecord) 
    blnGood = False 
End Sub 

Private Sub Form_BeforeUpdate(Cancel As Integer) 
    If Not blnGood Then 
     Cancel = True 
     Call MsgBox(Prompt:="click submit to save the record", Title:="Before Update") 
    End If 
End Sub 
2

आप एक स्पष्ट बटन मामले में उपयोगकर्ता के पास कोई गलतियां बनाने के लिए निम्नलिखित कोड का उपयोग कर सकते हैं और स्पष्ट करने के लिए चाहता है पूरा फॉर्म और शुरू करो।

Private Sub btnClear_Click() 
    If Me.Dirty = True Then 
    DoCmd.RunCommand acCmdUndo 
    Exit Sub 
    End If 
End Sub` 

मैं कभी कभी अजीब कार्य करने के लिए before_update घटना को खोजने के तो मैं आम तौर पर करीब संपत्तियों में (x) बटन को अक्षम करें और उपयोगकर्ता को संकेत देता है कि अगर वह पर डेटा का परित्याग करना चाहता है मेरे अपने के एक करीबी बटन जोड़ने स्क्रीन।

Private Sub close_Click() 
Dim Answer As Integer 
If Me.Dirty = True Then 
    Dim Response As Integer 
    ' Displays a message box with the yes and no options. 
    Response = MsgBox(Prompt:="Do you wish to discard data?", Buttons:=vbYesNo) 
    ' If statement to check if the yes button was selected. 
    If Response = vbYes Then 
     DoCmd.RunCommand acCmdUndo 
     DoCmd.Close 
     Else 
     Me.Clear.SetFocus 
    End If 
Else 
    ' The no button was selected. 
    DoCmd.Close 
    End If 
End Sub