2011-01-21 10 views
5

ऐसा लगता है कि मैं इस मुद्दे के साथ अकेला नहीं हूं, लेकिन इस समस्या के लिए कोई समस्या नहीं है।एमएस एक्सेस लिंक्ड टेबल में शून्यबल बूल फ़ील्ड

मैं एक SQL सर्वर 2005 डेटाबेस (एक SQL सर्वर ओडीबीसी पाइप के माध्यम से) से जुड़ी तालिका का उपयोग कर एक्सेस 2010 में काम कर रहा हूं। उस तालिका में, बूलियन फ़ील्ड में से एक को शून्य के रूप में चिह्नित किया जाता है, और इस तालिका में कई रिकॉर्ड वास्तव में मैदान में शून्य होते हैं। अब तक सब ठीक है।

पहुंच में आता है, और जैसे ही आप लिंक की गई तालिका खोलते हैं, एक्सेस रिक्त सेल (समस्या # 1) के बजाय 0 (झूठी) दिखाती है। और यदि आप रिकॉर्ड में कुछ भी संशोधित करने का प्रयास करते हैं, तो आपको एक त्रुटि संदेश मिलता है कि रिकॉर्ड किसी और द्वारा संशोधित किया गया था और आपके परिवर्तन सहेजे नहीं जा सकते हैं। यह आखिरी समस्या इस तथ्य के कारण है कि एक्सेस नलिका बूल फ़ील्ड को बर्दाश्त नहीं करता है, और मूल्य को बचाने की कोशिश करते समय थोड़ा सा पागल हो जाता है।

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

अंत में, इस मुद्दे को कुछ समय पहले एमएस करने के लिए लाया गया है लगता है, लेकिन वहाँ उनके अंत पर कोई जवाब नहीं दिया गया है: https://connect.microsoft.com/SQLServer/feedback/details/617339/null-bit-fields-produce-spurious-ms-access-errors-when-using-the-native-odbc-driver?wa=wsignin1.0#tabs

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

Thx!

+2

यह एक्सेस 97 के बाद से ज्ञात समस्या है: http://support.microsoft.com/kb/278696/EN-US। चूंकि पिछले 14 वर्षों में कुछ भी नहीं बदला है, इसलिए मैं जल्द ही किसी भी फिक्स की उम्मीद नहीं करूँगा ... – Heinzi

उत्तर

5

एसीई जेट का अपग्रेड है (जेट 4.0 कोडबेस से फोर्क किया गया है, जिसे विंडोज टीम द्वारा बनाए रखा जाता है और आगे कोई विकास नहीं देखता है, जबकि एसीई एक्सेस टीम द्वारा पूर्ण विकास में है)। यह जेट से काफी अलग नहीं है, सिवाय इसके कि यह डेटाबेस इंजन का एक नया संस्करण है और इसमें सुविधाओं की विशेषता है कि जेट की कमी है।

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

गैर-शून्यणीय बूलियन एक्सेस/जेट/एसीई (Allen Browne has discussed one such, with LEFT JOINs) के भीतर भी समस्याएं पैदा करते हैं। मेरा सुझाव यह है कि आप फ़ील्ड को एक नलबल बिट, बाइट या इंटीजर फ़ील्ड में बदलते हैं (मुझे यकीन नहीं है कि SQL सर्वर में सटीक डेटा प्रकार क्या हैं, न ही एक्सेस/जेट/एसीई के साथ सबसे अधिक अनुकूल होने वाला क्या है)।

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

यह क्या लायक है, एसएसएमए एक्सेस के लिए जेट/एसीई बूलियन को अपरिवर्तनीय बिट फ़ील्ड में अपरिवर्तित करता है (यकीन नहीं है कि वे क्यों नुकीले हैं, हालांकि - मुझे यह सुनिश्चित करने के लिए मेरे कुछ ऐप्स जांचना पड़ सकता है कि वे सही तरीके से काम कर रहे हैं!)।

+0

नालीबल बिट ठीक है मुझे लगता है। –

+1

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

+0

एसएसएमए अपनाने वाले बूल पर निरर्थक बिट्स पर टिप्पणी दो - क्या आप उस पर विस्तार कर सकते हैं? क्या आप थियस टेबल से कनेक्ट करते समय बुल फ़ील्ड के साथ एक एक्सेस टेबल का जिक्र कर रहे हैं, जिसमें इसे शून्य करने योग्य बिट के रूप में व्याख्या किया जा रहा है? मैं एक अलग दिशा में जा रहा हूं - मेरी तालिका SQL सर्वर में है, और मैं इसे कनेक्ट करने के लिए एक्सेस का उपयोग कर रहा हूं ... –

0

इस माइक्रोसॉफ्ट केबी http://support.microsoft.com/kb/318882 में विश्लेषण के बाद हमने इस समस्या को हल करने के लिए क्या किया है।1) हमने उस तालिका में पंक्तियों को अद्यतन करने के लिए एक एसक्यूएल स्क्रिप्ट चलायी जिसमें बिट फ़ील्ड में नलियां थीं, 2) फिर हमने उन बिट फ़ील्ड में '0' के डिफ़ॉल्ट मान को शामिल करने के लिए तालिका परिभाषा को संशोधित किया।

+0

यह एक दिलचस्प लेख है। मुझे पिछले डेटाबेस I upsized (SQL Server Express 2008 R2 के साथ A2003 चलाने) के साथ ऐसी कोई समस्या नहीं है, और मैंने बूलियन फ़ील्ड के लिए डिफ़ॉल्ट मान प्रदान नहीं किया है। मुझे एक चेक करने की आवश्यकता होगी, लेकिन यदि उद्धृत समस्या आई थी, तो मुझे पिछले 6 महीनों (जो मेरे पास नहीं है) के लिए बड़ी त्रुटि रिपोर्ट मिल रही थी, इसलिए ऐसा लगता है कि कुछ और होना चाहिए । शायद एसक्यूएल 2005 और 2008 के बीच कुछ बदल गया था। मुझे आश्चर्य है कि क्या आपके टेबल में सभी के पास पीके और टाइमस्टैम्प फ़ील्ड है? –

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