2009-08-20 16 views
6

कौन सा एक डेल्फी Win32 अनुप्रयोग से एमएस एसक्यूएल, ओरेकल या Firebird से कनेक्ट करने के लिए उपयोग करने के लिए बेहतर है (और क्या कारणों के लिए) का उपयोग कर - ADO या DBX (डाटाबेस एक्सप्रेस)?ADO या DBX डेल्फी

दोनों आपको प्रमुख डेटाबेस से कनेक्ट करने की अनुमति देते हैं। मुझे एडीओ यह सब एक कनेक्शन स्ट्रिंग परिवर्तन के साथ करता है और तथ्य यह है कि एडीओ और ड्राइवर विंडोज के साथ शामिल हैं इसलिए तैनात करने के लिए अतिरिक्त कुछ नहीं (ऐसा लगता है, अगर मैं गलत हूं तो मुझे सही करें)।

DBX भी लचीला मैं नहीं है और मैं अपने एप्लिकेशन में ड्राइवरों संकलन कर सकते हैं, कर सकते हैं?

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

लेकिन जो कार्यक्रम के लिए आसान है, बेहतर प्रदर्शन करती है, सबसे अधिक कुशलता से स्मृति का उपयोग करता है? किसी भी अन्य चीजों को उन्हें अलग करने के लिए?

धन्यवाद, रिचर्ड

उत्तर

7

ADO उपयोग करने के लिए आसान है और वहाँ है, आप केवल ग्राहक के पक्ष में correponding ग्राहक ड्राइवर स्थापित करने के लिए सुनिश्चित करना चाहिए।

मैं DBX अधिक लचीला पाया जाता है और यह बेहतर आईडीई और DataSnap की तरह एक और प्रौद्योगिकियों में एकीकृत है।

आप से एक ही उद्देश्य के लिए, मैं DevArt से तीसरे पक्ष के ड्राइवर के साथ DBX इस्तेमाल किया है। यदि आप ड्राइवर स्रोत खरीदते हैं तो आप अपने एप्लिकेशन के साथ ड्राइवरों को संकलित कर सकते हैं।

4

सामान्य नियम: घटकों की प्रत्येक परत संभवतः बग की एक अतिरिक्त परत जोड़ देगी। एडीओ और डीबीएक्स दोनों मानक डेटाबेस कार्यक्षमता के आसपास घटक रैपर हैं, इस प्रकार वे दोनों समान रूप से मजबूत हैं। तो उचित विकल्प अन्य कारकों पर आधारित होना चाहिए, जैसे डेटाबेस जिन्हें आप उपयोग करना चाहते हैं। यदि आप एमएस-एक्सेस या एसक्यूएल सर्वर से कनेक्ट करना चाहते हैं, तो एडीओ बेहतर विकल्प होगा क्योंकि यह इन डेटाबेस के लिए अधिक देशी है। लेकिन फायरबर्ड और ओरेकल डीबीएक्स घटकों के लिए अधिक देशी हैं।

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

+2

महत्वपूर्ण जानकारी: 'कच्चे एडीओ एपीआई' सच 'माइक्रोसॉफ्ट ActiveX डेटा ऑब्जेक्ट' प्रकार लायब्रेरी (ADO_TLB) –

0

एडीओ माइक्रोसॉफ्ट दुनिया है

DBX क्रॉस प्लेटफॉर्म और Kylix

4

मेरे दो सेंट के लिए शुरुआत में (डेल्फी 6) में बनाया गया था: DBX काफी तेजी (दोनों ओरेकल और एसक्यूएल पर), और काफी अधिक है तैनाती और कठिन तैनाती।

यदि प्रदर्शन एक कारक है, तो मैं डीबीएक्स के साथ जाऊंगा। अन्यथा, मैं सादगी के लिए एडीओ का उपयोग करता हूं।

+1

आयात द्वारा किया जाता है का उपयोग कर? कुछ समय पहले, मैंने दोनों का रस सबसे अधिक निचोड़ने की कोशिश की और निष्कर्ष निकाला कि एडीओ थोड़ा तेज था (mssql पर)। यह क्वेरी और अन्य सामान की बजाय एडीओ कनेक्शन ऑब्जेक्ट का उपयोग करके DisableControls जैसी चीजें करने के साथ। यकीन नहीं है कि मुझे डीबीएक्स से बाहर का रस मिला है ... – Tom

2

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

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

किसी को भी है कि पिछले BDE प्रौद्योगिकी पर अनुप्रयोगों का निर्माण जब कि प्रौद्योगिकी हटा दिया गया है और अब समर्थित वजह से व्यवधान को प्रमाणित करेगा। जबकि कोई भी तकनीक यह प्रदाता द्वारा प्रतिवाद से प्रतिरक्षा, एडीओ स्पष्ट रूप से जब यह प्रौद्योगिकी प्रदाता खुद को परे उद्योग समर्थन की बात आती बढ़त है।

यही कारण है कि मैं अपने आप को अब हमेशा ADO का उपयोग करें

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

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

मेरे कैप्सूलीकरण भी अलग प्रदाता व्यवहार/इस तरह संग्रहीत प्रक्रिया कॉल वाक्य रचना में पहले उल्लेख मतभेद के रूप में आवश्यकताओं, में मामूली बदलाव से कुछ का ख्याल रखता है।

मैं भी है कि एक और पोस्टर के लिए इसी तरह कहना चाहिए, मैं भी बहुत पहले इस्तेमाल किया बंद कर दिया "डेटा जागरूक नियंत्रण" है, जो इस दृष्टिकोण को खोलता है। आप की जरूरत है या डेटा के बारे में पता नियंत्रण का उपयोग और ADO उपयोग करना चाहते हैं करना चाहते हैं, तो आप ADO सीधे उपयोग नहीं कर सकते हैं और इसके बजाय कुछ कैप्सूलीकरण कि VCL डाटासेट मॉडल के माध्यम से एडीओ को उजागर करता है खोजने होंगे।

+0

क्या आप थोड़ा विस्तार कर सकते हैं कि आप सीधे एडीओ का उपयोग क्यों नहीं कर सकते? एडीओ घटकों के साथ क्या गलत है? (मैं बीडीई से माइग्रेशन की योजना बना रहा हूं) –

+0

यदि आप डेटा जागरूक नियंत्रणों का उपयोग कर रहे हैं तो आप सीधे एडीओ का उपयोग नहीं कर सकते हैं क्योंकि वीसीएल में डेटा जागरूक नियंत्रण ढांचे के लिए आवश्यक है कि आपका डेटा SOURCES भी उस ढांचे में भाग लेता है। यदि आप सीधे एडीओ का उपयोग कर रहे हैं तो आप परिभाषा के अनुसार वीसीएल घटकों का उपयोग नहीं कर रहे हैं, लेकिन "कच्चे" COM ऑब्जेक्ट्स एडीओ रनटाइम से सीधे हैं। इसलिए वे वीसीएल डेटा जागरूक ढांचे के बारे में आवश्यक जागरूकता प्रदान नहीं करते हैं। इसका मतलब यह नहीं है कि आप सीधे एडीओ का उपयोग नहीं कर सकते हैं, इसका मतलब है कि आप एडीओ का उपयोग सीधे नहीं कर सकते हैं अगर आप चाहते हैं कि एडीओ के साथ डेटा जागरूक नियंत्रणों का उपयोग करें। इसके लिए आपको एडीओ के आसपास एक वीसीएल "रैपर" की आवश्यकता होगी। – Deltics

+0

ओह, मैं देखता हूं। मुझे एक इंप्रेशन था कि आप वीसीएल के 'TADOxxx' घटकों के बारे में बात कर रहे हैं। मुझे उलझन में 'भाग लेने के बजाय' भाग लेना चाहिए, क्योंकि आपको कुछ भी नहीं मिला है - वे पहले से ही वहां हैं। मैं उत्सुक हूं, आप उनका उपयोग क्यों नहीं कर रहे हैं ('TADOxxx')? –

5

डेल्फी की शुरुआत में, लोगों को डेल्फी में बहु डीबीएमएस समर्थन की सराहना की। हर कोई बीडीई से प्यार करता था (क्योंकि ऐसा करने का यही एकमात्र तरीका था)।

लेकिन पिछले दशक में ग्राहकों को अधिक देखते समय, मैंने अपने अनुप्रयोगों में बहु-डीबीएमएस समर्थन की लगातार कमी देखी है।

एक आवेदन से कई डीबीएमएस समर्थन की लागत बहुत अधिक है।

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

इसके अलावा, कुछ डीबीएमएस एडीओ के साथ बेहतर काम करते हैं, कुछ सीधे कनेक्शन के साथ बेहतर होते हैं (जैसे आपके ओरेकल क्लाइंट को एक साथ छोड़ना)।

अंत में बहु- DBMS सिस्टम के साथ अपने सॉफ़्टवेयर के सभी संयोजनों का परीक्षण बहुत गहन है।

मैं कुछ परियोजनाओं में शामिल रहा हूं जहां हमें डीबीएमएस बैकएंड और/या डेटा एक्सेस टेक्नोलॉजी (यानी बीडीई से डीबीएक्स, या डीबीएक्स से सीधे कनेक्शन में) बदलना पड़ा था। डेटा एक्सेस प्रौद्योगिकी को बदलने से बैकएंड बदलना हमेशा अधिक दर्दनाक था। मल्टी-स्तरीय दृष्टिकोण ने उन्हें कुछ हद तक आसान बना दिया, लेकिन स्वतंत्रता की डिग्री में वृद्धि की और परीक्षण प्रयासों के लिए।

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

तो आपको डीबीएमएस के संयोजनों के बारे में सोचना चाहिए, न केवल कार्यक्षमता के मामले में, बल्कि लागत के संदर्भ में भी।

यदि आप एक डीबीएमएस से चिपके रहते हैं, तो बीडीई, डीबीएक्स या एडीओ जैसी सामान्य डेटा एक्सेस लेयर के लिए जाने का कोई मतलब नहीं है: यह जितना संभव हो सके कनेक्शन को बंद करने का भुगतान करता है। मेरे अनुभव ने मुझे सिखाया है कि इन संयोजनों अच्छी तरह से काम करते हैं:

  • Interbase या Firebird FIBPlus साथ, AnyDAC, IBO या IBX *
  • ADO साथ AnyDAC, DOA या ODAC
  • Microsoft SQL सर्वर के साथ ओरेकल

    • आईबीएक्स को फाई पसंद नहीं है बहुत ज्यादा विद्रोही

आशा इस आप संभावनाओं और अपने डेल्फी अनुप्रयोगों से कई डीबीएमएस समर्थन की सीमाओं में कुछ जानकारी मिलती है।

--jeroen

+2

मैं डेवलपर को आरडीबीएमएस तटस्थ बैकएंड करने की अनुमति देने के लिए ज़ीओएसबीबी को एक ओपन सोर्स पहल जोड़ूंगा। –