2012-01-13 10 views
5

मेरे पास नौकरी ट्रैकिंग प्रणाली है, और एक प्रश्न है जो अतिदेय सभी नौकरियों के परिणाम देता है। मेरे पास एक ऐसा फॉर्म है जो इन कार्यों में से प्रत्येक को एक-एक करके प्रदर्शित करता है, और इसमें दो बटन हैं (जॉब पूरा हो गया है, और जॉब पूरा नहीं हुआ है)। पूरा नहीं हुआ बस अगले रिकॉर्ड दिखाता है। यदि "पूरा हो गया है" बटन दबाए जाने पर मुझे इसकी सामग्री को अपडेट करने के लिए वर्तमान रिकॉर्ड तक पहुंच प्राप्त करने का कोई तरीका नहीं मिल रहा है, तो निकटतम मुझे प्राप्त होने वाला सबसे लंबा नंबर है जो फॉर्म में रिकॉर्ड स्थिति का प्रतिनिधित्व करता है।किसी फॉर्म संख्या (एक्सेस 2007) से किसी डेटाबेस में सीधे रिकॉर्ड कैसे अपडेट करें

वीबीए फॉर्म में रिकॉर्ड की अनुक्रमणिका प्राप्त करने के लिए निम्नानुसार है।

Sub Jobcompleted(frm As Form) 
    Dim curr_rec_num As Long 
    curr_rec_num = frm.CurrentRecord 
End Sub 

यह VBA में मेरा पहला शॉट, और मैं अपने समस्या को हल करने के लिए कुछ भी नहीं मिल सकता है खोज के एक घंटे के बाद है। क्या मैं इस बारे में पूरी तरह से गलत तरीके से जा रहा हूं? माइक्रोसॉफ्ट एक्सेस में काम करते हुए 2007

आगे जानकारी सभी तालिकाओं सामान्यीकृत होते हैं

वाहन तालिका: vehicle_id (पी) शामिल हैं, साथ ही रेगो और मॉडल आदि के रूप में

नौकरी तालिका: job_id (पी) शामिल हैं, वाहन_आईडी (एफके) और अगली घटना की तारीख के बारे में अन्य जानकारी, नौकरी के प्रत्येक अवसर (सभी नौकरियों को दोहराए जाने के बीच) और अन्य जानकारी

नौकरी इतिहास तालिका: job_history_id (pk), job_id (fk), तिथि पूर्ण हो गई और टिप्पणियां

जब काम पूरा बटन दबाया जाता है, यह आज की तारीख के साथ काम इतिहास तालिका में एक नई प्रविष्टि, किसी भी टिप्पणी और कार्य आईडी

बनाना चाहिए यह स्क्रिप्ट मैं काम कर पाने के लिए

कोशिश कर रहा हूँ है
Private Sub Command29_Click() 
    Dim strSQL1 As String 
    Dim strSQL2 As String 
    Set Rs = CurrentRs 
    Set db = CurrentDb 

    strSQL1 = "INSERT INTO completed_jobs(JOB_ID, DATE_COMPLETED, COMMENTS) VALUES " & Rs!job.ID & ", " & Date 
    db.Execute strSQL1, dbFailOnError 
    strSQL2 = "UPDATE job SET JOB_NEXT_OCCURANCE = JOB_NEXT_OCCURANCE+JOB_RECURRANCE_RATE WHERE job.ID = Rs!job.ID" 
    db.Execute strSQL2, dbFailOnError 
End Sub 

नोट: रेखा Set Rs = CurrentRs पूरी तरह से गलत है, मेरा मानना ​​है कि यह है कि क्या मैं यह पता लगाने की जरूरत है? इसे बटन-प्रेस

पर कॉल किया जाता है, मैं एक छवि पोस्ट कर रहा हूं जो फ़ॉर्म (निरंतर) दिखाता है।

@HansUp, मैं तुम क्या कह रहे हैं, लेकिन मैं नहीं काफी यह लागू है लगता है (मैं पर्याप्त जानकारी पहली बार नहीं प्रदान की थी आप को समझने के लिए मुझे लगता है कि)

@sarh मैं इस अभिलेख सेट विश्वास है कि आप इस बारे में बात कर रहे हैं कि मुझे क्या चाहिए, हालांकि मैं इसका उपयोग कैसे नहीं कर सकता, इसका कोई संकेत नहीं?

@ मैट मुझे 9 0% यकीन है कि मैं एक बाध्य रूप का उपयोग कर रहा हूं (जैसे मैंने कहा, एक्सेस करने के लिए नया, लोगों द्वारा सुझाए गए सब कुछ देख रहा है और सीख रहा है)। निश्चित रूप से नौकरी के लिए एक आईडी है (बस दिखाया नहीं गया है, दृश्यमान होने की कोई आवश्यकता नहीं है), लेकिन मैं इस पर एक ऑपरेशन करने के लिए इसका उपयोग कैसे करूं? आपके प्रपत्र पहले से ही स्थित - एसक्यूएल मैं

Form for ticking off jobs as they are completed, calls code shown

+1

"क्या मैं इस बारे में पूरी तरह से गलत तरीके से जा रहा हूं?" मुझे संदेह है कि आप हो सकते हैं, ठीक से किया, एक्सेस आसान है। क्या आपका फॉर्म निरंतर रूप है? आप डेटा तक पहुंच क्यों नहीं प्राप्त कर सकते हैं? क्या आपका रिकॉर्डसेट जटिल है इसलिए यह अपडेट करने योग्य नहीं है? क्या आपने एक अद्वितीय आईडी शामिल करने के लिए टेबल तैयार किए हैं? क्या आपने संबंधपरक डेटाबेस के बारे में पढ़कर अपना काम शुरू किया? क्या आपने किसी भी एक्सेस टेम्पलेट्स को देखा है? – Fionnuala

+1

बीटीडब्लू अगर कोई अन्य व्यक्ति आपके प्रश्न को भी ऊपर उठाता है, तो आपके पास अपने फॉर्म की एक छवि पोस्ट करने के लिए पर्याप्त प्रतिष्ठा होगी, जो सहायक हो सकती है, फिर फिर यह नहीं हो सकती है :) – Fionnuala

+0

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

उत्तर

2

पर, कर सकते हैं पहुँच/VBA के साथ एकीकृत मैं नया हूँ मैं अपनी स्थिति को समझने के रूप में, अपने प्रपत्र डेटा बाध्य बाध्य (आप रिकॉर्ड सूचकांक प्राप्त कर सकते हैं), इसलिए है इस रिकॉर्ड पर।आप अंतर्निहित डाटासेट के कुछ क्षेत्र अद्यतन करने की जरूरत है, तो आप की तरह

Me!SomeField = ... 
DoCmd.RunCommand acCmdSaveRecord 

कुछ लिख सकते हैं अपने फार्म "SomeField" करने के लिए बाध्य नियंत्रण, तो फॉर्म स्वतः अद्यतन किया जाएगा गया है।

यदि इससे सहायता नहीं करेंगे, तो आप एक और दिशाओं की एक जोड़ी के लिए देख सकते हैं:

1) एसक्यूएल कोड का उपयोग कर रिकॉर्ड अपडेट करें। उदाहरण के लिए, आप, रिकॉर्ड की आईडी उस प्रपत्र डेटा सेट में अद्यतन किया जाना चाहिए ताकि आप की तरह कुछ लिख सकते हैं:

Call CurrentDB.Execute(_ 
"UPDATE SomeTable SET SomeField = SomeValue WHERE SomeTableID = " & Me!SomeTableID, dbSeeChanges) 

2) आप बुकमार्क संपत्ति देख सकते हैं - दोनों अभिलेख सेट और फार्म इस संपत्ति है, यह रिकॉर्ड स्थिति का वर्णन करता है। तो आप इस तरह कुछ लिख सकते हैं (सबसे अच्छा उदाहरण नहीं है, लेकिन आपको एक विचार प्राप्त करने में मदद कर सकता है):

Dim Rs as Recordset 
Set Rs = Me.RecordsetClone 'make a reference copy of the form recordset 
Rs.Bookmark = Me.Bookmark 'locate this recordset to the form current record 
+0

स्टैक ओवरफ़्लो अलर्ट कैसे काम करते हैं, इस बारे में अनिश्चितता है, लेकिन मैंने – StandOff

+0

@StandOff I से अधिक जानकारी पोस्ट की है। आपके फॉर्म के बेलीव रिकॉर्ड स्रोत में फ़ील्ड JOB_ID है, इसलिए इसका उपयोग करने के लिए आप मुझे केवल लिख सकते हैं! JOB_ID (CurrentRs जोड़ने की कोई आवश्यकता नहीं है)। तो strSQL1 (लेकिन बिना टिप्पणियाँ) मैं "के रूप में completed_jobs (job_id, DATE_COMPLETED) मान में डालने पुनर्लेखन हैं (" & रुपये! Job.ID और ", तारीख())" – sarh

+0

बस देखा, मैं पहली बार कोड में एक छापे की ग़लती कर दिया है स्निपेट - यह मुझे होना चाहिए! कुछ फील्ड की बजाय कुछ फ़ील्ड! कुछ फ़ील्ड, क्षमा करें, तय करें। – sarh

1

एक सरल दृष्टिकोण पर विचार करें। मुझे संदेह है कि आपको फ़ॉर्म की CurrentRecord संपत्ति से चिंतित होने की आवश्यकता है। और मुझे नहीं लगता कि आपको "पूरा किया गया" के लिए कमांड बटन क्यों चाहिए और दूसरा "पूरा नहीं हुआ" है।

तालिका में "हां/नहीं" डेटा प्रकार फ़ील्ड जोड़ें जो आपके फॉर्म के रिकॉर्ड स्रोत द्वारा उपयोग किया जाता है। इसे डिफ़ॉल्ट मान संपत्ति 0 पर सेट करें, जो झूठी या संख्या का प्रतिनिधित्व करती है इसे "complet_status" कहते हैं। उस रिकॉर्ड स्रोत का उपयोग कर एक नया फॉर्म बनाएं। फिर आपके फॉर्म में complet_status के लिए चेक बॉक्स नियंत्रण हो सकता है।

नए जोड़े गए रिकॉर्ड में false/no complet_status के रूप में होगा --- चेक बॉक्स अनचेक दिखाई देगा। फॉर्म में अन्य रिकॉर्ड्स के लिए complet_status को चेक बॉक्स नियंत्रण का उपयोग करके हां (चेक) और नहीं (अनचेक) के बीच टॉगल किया जा सकता है।

+0

स्टैक ओवरफ़्लो अलर्ट कैसे काम करते हैं, इस बारे में अनिश्चितता है, लेकिन मैंने अधिक जानकारी पोस्ट की है – StandOff

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