आपके प्रश्न का उत्तर यह है कि पोस्ट, ApplyUpdates और Commit पूरी तरह से अलग-अलग चीजें करते हैं और आम तौर पर डेटाबेस ऐप में विभिन्न स्थानों (प्रक्रियाओं) और संदर्भों में होते हैं।
Post
और ApplyUpdates
, दोनों वास्तव में क्लाइंट साइड संचालन कर रहे हैं, जबकि Commit
किसी SQL आपरेशन हो सकता है (या नहीं) स्पष्ट रूप से एक सौदे को पूरा करने सर्वर साइड पर कहा जा करने की जरूरत है कि है।
यदि आप तीन-स्तरीय सर्वर पर विचार करते हैं तो मतभेदों को समझना सबसे आसान है। SQLite एक अजीब गेंद का एक छोटा सा है, क्योंकि यह एक प्रकार का सच्चा एसक्यूएल सर्वर नहीं है जिसे विभिन्न मशीनों पर विभिन्न प्रक्रियाओं से कॉल का जवाब देने के लिए डिज़ाइन किया गया है (हालांकि यह 3-स्तरीय सिस्टम_ के बैक-एंड के रूप में ऐसा कर सकता है।
सबसे सरल पारंपरिक 3-स्तरीय व्यवस्था के बारे में एक मध्य-स्तरीय डेल्फी सर्वर है जो एसक्यूएल सर्वर के बीच बैठता है, एक एमएस एसक्यूएल सर्वर और क्लाइंट-स्तरीय कहते हैं, आमतौर पर क्लाइंट मशीन पर चल रहे आपके डेल्फी प्रोग्राम। बोर्लैंड/ईएमबीए का पारंपरिक प्रौद्योगिकी को लागू करने के लिए इस DataSnap
है।
ग्राहक स्तरीय आम तौर पर एक TClientDataSet
(या 3 पार्टी समकक्ष) है कि मध्यम स्तरीय में एक सर्वर विशेष TDataSet वंशज के माध्यम से एक बैक-एंड SQL सर्वर से डेटा प्राप्त होता है। हालांकि हो रही डेटा एफ मध्यम स्तर पर एसक्यूएल सर्वर को रोम आमतौर पर एसक्यूएल सर्वर पर एक लेनदेन शामिल करता है, एक बार डेटा क्लाइंट स्तरीय में सीडीएस में लोड होने के बाद, SQL सर्वर पर कोई लेनदेन लंबित नहीं होता है (जब तक कि आप अपने रास्ते से बाहर नहीं जाते सर्वर पर एक लेनदेन खुला है, जो सर्वर के अन्य उपयोगकर्ताओं के अनुकूल नहीं है और सर्वर पर लॉक संसाधनों का उपभोग करता है, जो सीमित हैं)।
जब आप सीडीएस (या किसी भी टीडीसेटसेट वंशज, वास्तव में) में डेटा संपादित करते हैं, जो डेटासेट को डीएसएडिट स्थिति में डालता है (TDataSetState के लिए ऑनलाइन सहायता देखें)। किए गए परिवर्तन अस्थायी हैं, जिसका अर्थ है कि जब तक आप कॉल नहीं करते हैं, उन्हें सीडीएस में पूर्ववत किया जा सकता है। पोस्ट, जो उन्हें सीडीएस के डेटा में सहेजता है (TClientDataSet के मामले में, क्लाइंट-साइड डेटा में परिवर्तन को कॉल करने के बाद वापस ले जाया जा सकता है। पोस्ट, जब तक। लागू अद्यतनों को नहीं कहा गया है)। याद रखें कि एसक्यूएल सर्वर पर लंबित कोई लेनदेन नहीं है (या कम से कम, वहां नहीं होना चाहिए)। क्लाइंट स्तरीय में सीडीएस पर पोस्ट कहा जाता है।
कॉलिंग। नहीं है क्योंकि परिवर्तनों को समकक्ष मध्य-स्तरीय डेटासेट पर वापस प्रसारित किया जा सकता है। इसे आरंभ करने के लिए, आप क्लाइंट-स्तरीय सीडीएस पर ApplyUpdates को कॉल करते हैं, जो मध्य स्तर में TDataSetProvider के माध्यम से तरंगों को घुमाता है जो सीडीएस को मध्य-स्तर के सर्वर-फेससेट डेटासेट के साथ इंटरफेस करता है। यह DataSetProvider (या, अधिक सटीक रूप से एक TSqlResolver से जुड़ा हुआ है) जो एसक्यूएल उत्पन्न करता है जो वास्तव में SQL सर्वर में परिवर्तन लागू करने के लिए SQL सर्वर को भेजा जाता है। तो, मानक डेटा स्नैप 3-स्तरीय सेट-अप में, आपके पास कमिट को बुलाया गया है या नहीं, इस पर कोई प्रत्यक्ष नियंत्रण नहीं है।
Commit
एसक्यूएल सर्वर द्वारा एक एसक्यूएल ऑपरेशन किया जाता है जो लेनदेन को पूरा करने के दो संभावित तरीकों में से एक है (दूसरा Rollback
है)। एमएस एसक्यूएल सर्वर के साथ, f.i., सर्वर से कनेक्शन को UPDATE
, INSERT
और DELETE
अंतर्निहित लेनदेन में बयानों को स्वचालित रूप से लपेटने के लिए कॉन्फ़िगर किया जा सकता है।
जिस सीमा तक आपको लेनदेन नियंत्रण के साथ खुद को चिंता करने की आवश्यकता है, वह बैक-एंड सर्वर पर निर्भर करता है और सर्वर डेटा के अन्य उपयोग के साथ सहमति के संदर्भ में आपके ऐप की आवश्यकताओं पर निर्भर करता है। यदि आप स्लाईट के लेनदेन के संचालन में रूचि रखते हैं, तो आप जिन डीकंपोनेंट्स का उपयोग कर रहे हैं या उनके स्रोत की सहायता के लिए दस्तावेज़ों से परामर्श लें।
वास्तविक SQL सर्वर के साथ काम करने के लिए कुछ डेल्फी घटक पुस्तकालय सर्वर-साइड लेनदेन को नियंत्रित करने के लिए सुविधाओं का खुलासा करते हैं, उदाहरण के लिए इंटरबेस के लिए आईबीएक्स।
बीटीडब्ल्यू, डेल्फी शर्तों में, CachedUpdates
लंबे अप्रचलित बीडीई से एक लटका हुआ है, जो बोरलैंड के विभिन्न प्रकार के बैक-एंड सर्वरों के लिए सामान्य डीबी-एक्सेस फ्रेमवर्क पर पहला प्रयास था। यह कुछ टीडीएटासेट-वंश के कार्यान्वयन में बनी हुई है और (खेदजनक रूप से, आईएमओ) ने फायरडीएसी, ईएमबीए की नवीनतम क्रॉस-डेटाबेस पेशकश में वापसी की कुछ चीज बनाई है।
आपको अपने डेल्फी कोड में कमिट कॉल करने की आवश्यकता नहीं हो सकती है। सर्वर कनेक्शन (डिफ़ॉल्ट रूप से कॉन्फ़िगर किया जा सकता है) सर्वर पर सबमिट किए गए परिवर्तनों को एक निहित लेनदेन में लपेट सकता है। SQLite के लिए, जिसमें कोई सच्चा सर्वर नहीं है, केवल एक डीएलएल है, यह आपके द्वारा उपयोग किए जा रहे TDataSet-वंशज घटक पर निर्भर हो सकता है - उनके दस्तावेज़ या स्रोत-कोड की जांच करता है। – MartynA