एक तालिका में फॉर्म जानकारी जोड़ें

Option Compare Database

Private Sub cmdAdd_Click()
    CurrentDb.Execute "INSERT INTO Overtime(Todays_Date, Employee_Name, " & _
        "Start_Date, End_Date,Comments) " & _
        " VALUES(" & Me.txtCurrentday & ",'" & Me.txtName & "','" & _
        Me.txtBegin & "','" & Me.txtEnd & "','" & Me.txtComment & "')"

    Me.Refreshenter        
    cmdClear_Click
End Sub

Private Sub cmdClear_Click()
    Me.txtCurrentday = ""
    Me.txtName = ""
    Me.txtBegin = ""
    Me.txtEnd = ""
    Me.txtComment = ""

    Me.txtCurrentday.SetFocus
End Sub

Private Sub cmdClose_Click()
    DoCmd.Close
End Sub

हैलो, मैंने माइक्रोसॉफ्ट एक्सेस 2010 में एक फॉर्म और एक टेबल बनाया है। फॉर्म को pbicovertime कहा जाता है, इसमें पांच अनबाउंड टेक्स्ट बॉक्स हैं जिनमें सभी के अद्वितीय नाम और तीन बटन हैं। मैं उस बटन को ओवरटाइम नामक तालिका में जोड़ने के लिए फॉर्म में दर्ज किया गया हूं, जब ऐड बटन दबाया जाता है। उपर्युक्त कोड फॉर्म से तालिका में डेटा जोड़ता है, हालांकि मुझे रन-टाइमर त्रुटि '3061 "मिलती है: बहुत कम पैरामीटर। डेटाबेस को बंद करने और फिर से खोलने के बाद अपेक्षित 1 त्रुटि संदेश। इसलिए शुरुआत में सबकुछ ठीक काम कर रहा था। फॉर्म में दर्ज की गई सभी जानकारी को मेरे ओवरटाइम टेबल में सही कॉलम में जोड़ा जा रहा था। यह समस्या डेटाबेस को बंद करने और फिर से खोलने के बाद हुई थी। मुझे यकीन नहीं है कि इस बिंदु से कैसे आगे बढ़ना है।

एफवाईआई यह पहली बार फॉर्म में प्रवेश के साथ काम कर रहा है!

1

2 उत्तर

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

Option Compare Database
Option Explicit ' <- add this

Private Sub cmdAdd_Click()
    Dim db As DAO.database
    Dim rs As DAO.Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset("Overtime",  dbOpenTable, dbAppendOnly)
    With rs
        .AddNew
        !Todays_Date = Me.txtCurrentday
        !Employee_Name = Me.txtName
        !Start_Date = Me.txtBegin
        !End_Date = Me.txtEnd
        !Comments = Me.txtComment
        .Update
        .Close
    End With
    Me.Refreshenter ' <- what is this?
    cmdClear_Click
End Sub

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

Note: Always include Option Explicit in the Declarations sections of your code modules. And then run Debug->Compile from the VB Editor's main menu. Correct anything the compiler complains about before you spend time troubleshooting the code.

मुझे नहीं पता कि Me.Refreshenter क्या है। यह Me.Refresh की गलत वर्तनी की तरह दिखता है। यदि ऐसा है, तो यह कुछ है विकल्प स्पष्ट आपको चेतावनी देगा। हालांकि, अगर आप ताज़ा करें चाहते थे, तो मेरा सुझाव है कि आप Me.Requery को प्रतिस्थापित करें। कारण यह है कि ताज़ा करें फ़ॉर्म के रिकॉर्डसेट में मौजूद किसी भी मौजूदा पंक्ति में परिवर्तनों को खींच देगा, लेकिन नई जोड़े वाली पंक्तियां नहीं। <पंक्ति> आवश्यकता मौजूदा पंक्तियों में परिवर्तन के अलावा नई पंक्तियां पाती है।

1
जोड़ा
मैंने आपका नया कोड प्रतिस्थापित किया है और तालिका में डेटा की एक पंक्ति जोड़ा है। मुझे रन-टाइम त्रुटि मिल रही है 3251 ऑपरेशन इस प्रकार के ऑब्जेक्ट के लिए समर्थित नहीं है। कोड की .ddNew लाइन पर।
जोड़ा लेखक user3057946, स्रोत
बस एक एक्सेस टेबल
जोड़ा लेखक user3057946, स्रोत
पूरी तरह से काम करने लगता है! आपकी सहायताके लिए धन्यवाद!
जोड़ा लेखक user3057946, स्रोत
ठीक है, मुझे अभी एहसास हुआ कि मैंने OpenRecordset के लिए गलत विकल्प सुझाए हैं। कृपया अद्यतन संस्करण आज़माएं।
जोड़ा लेखक HansUp, स्रोत

मैं इस लाइन को शर्त लगाने के लिए तैयार हूं कि यह दुर्घटनाग्रस्त हो रहा है।

CurrentDb.Execute "INSERT INTO Overtime(Todays_Date, Employee_Name, " & _
    "Start_Date, End_Date,Comments) " & _
    " VALUES(" & Me.txtCurrentday & ",'" & Me.txtName & "','" & _
    Me.txtBegin & "','" & Me.txtEnd & "','" & Me.txtComment & "')"

विशेष रूप से Me.txtCurrentday , क्योंकि इसका मूल्यांकन सीधे टेक्स्ट के रूप में किया जाएगा, और यह निर्भर करता है कि आपका पीसी कैसे सेटअप है, यह SQL को भ्रमित कर सकता है। उदाहरण के लिए, यह ऐसा दिखाई दे सकता है:

INSERT INTO Overtime(Todays_Date, Employee_Name, Start_Date, End_Date,Comments) 
VALUES ( Dec 1, 2013, 'JoeSmith', 'Jan 1, 2013', 'Dec 31, 2013', 
'Some important comment');

तिथियों में आपको # एस में शामिल होना चाहिए:

INSERT INTO Overtime(Todays_Date, Employee_Name, Start_Date, End_Date,Comments) 
VALUES ( #Dec 1, 2013#, 'JoeSmith', #Jan 1, 2013#, #Dec 31, 2013#, 
'Some important comment');

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

0
जोड़ा