2009-06-05 22 views
6

मैं एक पुनर्विक्रेता वीएस -2008 डेटासेट डिजाइनर से लड़ रहा हूं, ऐसा लगता है। मैं ऐसा करने की कोशिश कर रहा हूं जो एक साधारण 2-टेबल डेटासेट समाधान प्रतीत होता है, जहां एक तालिका अन्य तालिका में संग्रहीत पूर्णांक मान के लिए केवल पाठ का अर्थ है। बुनियादी डेटा डिजाइन 101.मेरे टेबल एडाप्टर के अपडेट और हटाए गए आदेशों के साथ क्या हुआ?

Table1 
CharField1 
CharField2 
IntForeignKeyField1 
etc 

Table2 
IntPrimaryKey1 
ValueForKeyField 

यह वास्तव में, समस्या मैं कर रहा हूँ प्रभावित नहीं करता है मैं नहीं मानता कि के रूप में मैं कुछ भी लेकिन दूसरी तालिका से तो मैं यह कर सकते हैं में मूल्यों पढ़ा करना चाहते नहीं कर रहा हूँ क्लाइंट में DataGridViewComboBoxColumn में उन्हें चुनें - मैं उन्हें क्लाइंट पर कभी संपादित नहीं करूंगा। लेकिन मैं पीछे हटा।

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

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

जब मैंने अद्यतन कथन का उपयोग करने का प्रयास किया, हालांकि, मुझे एक त्रुटि मिली कि कोई वैध अद्यतन कथन नहीं था! वेब पर समान परेशानियों वाले लोगों के लिए कुछ फलहीन खोज के बाद, मैंने डेटासेट के लिए एक्सएमएल में खोला। निश्चित रूप से, कोई अद्यतन कथन नहीं, और कोई हटाएं कथन, या तो।

मैंने उसी परिणाम के साथ परियोजना से डेटासेट को पूरी तरह से हटाने और पुनर्निर्माण करने की कोशिश की। कोई अपडेट या डिलीट स्टेटमेंट नहीं बनाया गया था, भले ही इसे पूरा किया गया हो।

मैंने किसी अन्य प्रोजेक्ट से किसी अन्य डिज़ाइन किए गए डेटासेट का निरीक्षण करके अपडेट स्टेटमेंट एक्सएमएल को हाथ से बनाया, इसलिए वेब सेवा अब काम कर रही है। हालांकि, मुझे कोई विश्वास नहीं है कि मेरे परिवर्तन डिजाइनर से शुरू किए गए संपादन के माध्यम से क्या चलेंगे, और मैं इस बात पर फंस गया हूं कि यह क्यों काम नहीं कर रहा है। कोई विचार?

किसी भी प्रतिक्रिया के लिए धन्यवाद, डेव

+1

टिप्पणियों की कुल कमी से, मुझे लगता है कि यह किसी और के साथ नहीं हुआ है, इसलिए मेरे पास मेरे वीएस -2008 कार्यान्वयन में एक वास्तविक बग या गड़बड़ है। महान। और मुझे विशेषाधिकार के लिए भी एक फ्रिकिन 'टम्बलवेड बैज मिला। – DaveN59

उत्तर

13

यह हो सकता है कि वहाँ मेज के लिए परिभाषित नहीं अद्वितीय प्राथमिक कुंजी?

+0

दोह! स्पष्ट रूप से इंगित करने के लिए धन्यवाद ... – DaveN59

+0

इसके बारे में गड़बड़ न करें, मैंने अभी भी वही किया है :(डीबी में पीके को सेट करना मेरे लिए एक ही मुद्दा तय करता है। – sMaN

0

मुझे एक ही समस्या है। एक से अधिक तालिका से फ़ील्ड का उपयोग करते समय TableAdapter ठीक से काम नहीं करता है। मैं निम्नलिखित आलेख से समाधान को फिर से बनाने में सक्षम था: "जॉइन का उपयोग करने के लिए तालिका एडाप्टर को अपडेट करना"।

http://www.asp.net/learn/data-access/tutorial-69-vb.aspx

समाधान बनाने शामिल है अपने स्वयं के चयन/अपडेट/सम्मिलित करें/हटाएं प्रक्रियाओं। दुर्भाग्यवश, जब मैं एक SQL सर्वर डेटाबेस के समाधान का पालन करने में सक्षम था, तब भी मैं इसे अपने स्थानीय एक्सेस डेटाबेस के लिए काम करने में सक्षम नहीं हूं। सभी संग्रहीत प्रक्रिया विकल्प भूरे रंग के होते हैं।

शुभकामनाएं!

+0

लेख के लिंक के लिए धन्यवाद। हालांकि, मेरे समस्या (और शायद तुम्हारा, साथ ही) उससे भी आसान है। मुझे केवल प्राथमिक कुंजी और एसक्यूएल स्टूडियो डिजाइनर में रिश्ते को परिभाषित करना था, और वीएस ने इसे ठीक से पसंद किया। मुझे नहीं पता कि आपका डेटा कैसा दिखता है, लेकिन वीएस को एसक्यूएल सर्वर से काफी जानकारी मिल सकती है - या नहीं, जाहिर है। – DaveN59

0

मुझे लगता है कि मुझे समाधान मिला है। 1) केवल मुख्य तालिका के लिए एक टेबल एडाप्टर बनाएं और तालिका एडाप्टर अद्यतन प्रक्रिया (तालिका एडाप्टर गुण विंडो में संग्रहीत) की प्रतिलिपि बनाएँ 2) "टेबल एडाप्टर कॉन्फ़िगरेशन विज़ार्ड क्वेरी बिल्डर" में चयन क्वेरी को दोनों टेबल और जुड़ने के फ़ील्ड को शामिल करने के लिए बदलें। 3) पुरानी अद्यतन प्रक्रिया को अब खाली तालिका एडाप्टर अद्यतन प्रक्रिया में पेस्ट करें। 4) DataGridView बनाने के बाद, आप दोनों टेबलों से फ़ील्ड प्रदर्शित कर सकते हैं और मुख्य तालिका अपडेट कर सकते हैं। INSERT & DELETE आदेशों के लिए चरणों को दोहराएं।

यदि आपका लक्ष्य दोनों टेबल अपडेट करना है, तो वेब पर TableAdapter अभिभावक/बाल अद्यतन जानकारी को देखने का प्रयास करें। यहां एक अच्छा लिंक है: http://blogs.msdn.com/bethmassi/archive/2009/05/14/using-tableadapters-to-insert-related-data-into-an-ms-access-database.aspx

+0

बहुत अधिक काम! :) यह अनिवार्य रूप से मैंने इसे काम करने के लिए किया है। हालांकि, जब मैंने प्राथमिक कुंजी और डेटाबेस में संबंधों को परिभाषित किया, तो मैन्युअल रूप से कुछ भी बदलने के बिना, यह बहुत धीमी और क्लीनर काम करता था - वीएस 2008 ने यह पता लगाया कि उस जानकारी से क्या करने की आवश्यकता है, बिना मैन्युअल हस्तक्षेप के ... – DaveN59

+0

आपको एमएस एक्सेस के लिए काम करने का यह समाधान मिला है? मुझे यह सही मुद्दा है और मैं काम करने के लिए अपनी विधि प्राप्त करने की कोशिश कर रहा हूं। –

0

बस एक ही मूल समस्या में भाग गया। मैंने डेटा डिजाइनर को सभी सम्मिलित करने, अपडेट करने, बयान हटाने के लिए कहा। जब मैं टेबल में से किसी एक को अपडेट करने गया तो कोई अपडेट उपलब्ध नहीं था। मैं अंततः डेटा डिजाइनर द्वारा बनाई गई .xsd फ़ाइल में गया (आईडीई में इसे खोलने के लिए बस डबल क्लिक किया गया)। मैंने तब तालिका के शीर्षक पट्टी पर दायाँ क्लिक किया जिसमें समस्या थी और कॉन्फ़िगरेशन विकल्प का चयन किया। वहां से मैंने 'उन्नत विकल्प' बटन पर क्लिक किया, फिर 'जेनरेट सम्मिलित करें, अपडेट करें, स्टेटमेंट हटाएं' विकल्प चुना है। ठीक कहने के बाद मैंने अपनी परियोजना की जांच की और अद्यतन तालिका एडाप्टर के लिए उपलब्ध था।

0

जॉर्ज ने जो सुझाव दिया वह महान है। हमें 'जेनरेट सम्मिलित करें, अपडेट करें, स्टेटमेंट हटाएं' विकल्प सक्षम करने की आवश्यकता है।

हालांकि वीएस2013 में, सेलिट स्टेटमेंट में अनावश्यक तालिका क्वालीफायर का उपयोग करके आईडीई परेशान हो सकता है और परिणामस्वरूप केवल चयन और INSERT कथन की पीढ़ी हो सकती है। बस इस क्वालीफायर को हटा दें और यह ठीक होना चाहिए। सुनिश्चित करें कि आपके पास एक अद्वितीय पीके भी है।

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