2009-11-12 15 views
7

मैं अपने डेटाबेस पर एक END TRANSACTION चला रहा हूँ और कभी कभी मैं त्रुटिअगर SQLite3 लेनदेन सक्रिय

# 1 वह यह है कि निर्धारित "प्रतिबद्ध नहीं कर सकते हैं - कोई लेनदेन सक्रिय है"

वहाँ एक रास्ता है यह निर्धारित करने के लिए कि प्रतिबद्धता की कोशिश करने से पहले कोई लेनदेन सक्रिय है या नहीं? मैं अपने "BEGIN TRANSACTIONS" को हाथ से देख रहा हूं लेकिन मुझे लगता है कि एक बेहतर तरीका है।

मैं सी एपीआई

उत्तर

9

आप इस जांच करना चाह सकते:

http://www.sqlite.org/c3ref/get_autocommit.html

पृष्ठ के अनुसार, यदि आप एक सौदे में कर रहे हैं, sqlite3_get_autocommit() 0.

+0

वास्तव में अच्छा है! धन्यवाद!। – Vignesh

0

SQLite में, लेन-देन शुरू उपयोग कर बनाई गई लेन-देन का उपयोग कर रहा हूँ ... समाप्ति लेन-देन घोंसला नहीं है।

नेस्टेड लेनदेन के लिए आपको SAVEPOINT और रिलीज आदेशों का उपयोग करने की आवश्यकता है।

http://www.sqlite.org/lang_transaction.html

और http://www.sqlite.org/lang_savepoint.html

+0

आप के बारे में घोंसले जो कुछ है का जवाब दे रहे हैं वापस आ जाएगी सवाल के साथ कुछ भी नहीं करना है। –

+1

ओह, मुझे खेद है, मैंने गलत समझा। मैंने सोचा था कि आपको लेन-देन की गहराई से घबराहट की गिनती करनी होगी, जो ओबावियोसी एसक्यूएलआईटी के साथ सिंक हो जाएंगे, अगर यह इसका समर्थन नहीं करता है। जहां तक ​​मुझे पता है कि SQLite से पूछने का कोई तरीका नहीं है यदि यह लेनदेन में है। –

0

कि अजीब है देखें। मैंने सोचा था कि SQLite एक सौदे में हमेशा से था, या तो स्पष्ट रूप से आपके द्वारा बनाई गई या परोक्ष SQLite द्वारा बनाई गई:

http://www.sqlite.org/lang_transaction.html

तो मैं त्रुटि का अर्थ है कि यह एक सौदे में नहीं है कि आप शुरू की ... लगता है और अगर है कि आपको क्या जानने की ज़रूरत है, यह स्क्लाइट के लिए ठीक लगता है ताकि आप इसके साथ रह सकें। बिल्कुल पाठ्यक्रम के लिए सुविधाजनक नहीं है, लेकिन मुझे लगता है कि यह एक साधारण एपीआई की लागत है। =/

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