2009-02-10 11 views
9

साथ SQLite में ऑटो वेतन वृद्धि स्तंभ के मान देने के लिए मैं SQLite में एक टेबल है:कैसे VB6

CREATE TABLE "EventType" 
(
[EventTypeID] INTEGER PRIMARY KEY, 
[EventTypeName] VARCHAR(50) NOT NULL UNIQUE 
); 

के बाद से EventTypeID एक पूर्णांक और एक प्राथमिक कुंजी है, जो अपने आप में यह एक स्वत: incrementing स्तंभ बना देता है, और यह ठीक काम करता है।

मैं तालिका में एक पंक्ति डालना चाहता हूं और वीबी 6 से नया वृद्धि मूल्य प्राप्त करना चाहता हूं।

Dim oRs as Recordset 
dim oCmd as new Command 

oCmd.ActiveConnection = GetConnection() 
oCmd.Source = "insert into EventType (EventTypeName) values ('blah')" 
oCmd.Execute 

वहाँ (EventType से चयन अधिकतम (EventTypeID)) किसी अन्य क्वेरी) जारी करने के लिए बिना नव निर्मित EventTypeID पुनः प्राप्त करने के एक स्वचालित तरीका है?

मुझे लगता है कि वीबी 6 दिनों से बहुत समय पहले मुझे याद आया कि ऐसा करने का एक तरीका था।

+0

की संभावित डुप्लिकेट [? करता है SQLite समर्थन स्कोप \ _IDENTITY] (http://stackoverflow.com/प्रश्न/304543/करता है-एसक्लाइट-सपोर्ट-स्कोप-पहचान) –

उत्तर

14

Does SQLite support SCOPE_IDENTITY?

चेक बाहर FAQsqlite3_last_insert_rowid() फ़ंक्शन यह करेगा। की सावधानी बरतें हालांकि

परीक्षण नहीं किया गया है, लेकिन आप एक कॉल में दोनों कथन भेजने में सक्षम होना चाहिए। यह कुछ समय हो गया है क्योंकि मैंने कोई वीबी 6 लिखा था। यह एसक्यूएल इंजेक्शन सुरक्षित नहीं है।

Dim oRs as Recordset 
dim sSql as String 
sSql = "INSERT INTO EventType (EventTypeName) VALUES ('blah'); SELECT last_insert_rowid() FROM EventType" 
oRs.Open sSql oConn 
+4

बीटीडब्ल्यू, ओडीबीसी ड्राइवर के साथ, आपको अपनी क्वेरी को 2 कॉल में विभाजित करना होगा। – AngryHacker

+0

तो सम्मिलित करें() फिर वापस क्या करता है? - मुझे पता है कि मैं इसे देख सकता हूं लेकिन यह पूर्णता के लिए यहां उपयोगी हो सकता है, क्योंकि इस तरह मुझे यह पोस्ट मिला। –

2

मैं वीबी का उपयोग नहीं करते, तो मैं इंटरफ़ेस आप अपने डाटाबेस के साथ प्रयोग कर रहे हैं पता नहीं है, लेकिन, के रूप में bendewey ने कहा, sqlite3_last_insert_rowid() बुलाया ग एपीआई में एक समारोह है कि वापस आ जाएगी है अंतिम सम्मिलित पंक्ति के लिए प्राथमिक पूर्णांक कुंजी, ताकि आप अपने इंटरफ़ेस में एक समान फ़ंक्शन की तलाश कर सकें।

यदि वह काम नहीं करता, तो आप SQLite विशिष्ट क्वेरी का उपयोग कर सकते हैं:

SELECT last_insert_rowid() 
2

आपको अपने निवेशन के बाद SELECT last_insert_rowid() कॉल कर सकते हैं

उपयोग

SELECT last_insert_rowid() 

रिटर्न

0

तो पिछले rowid, आप इसका उपयोग कर सकते हैं:

SELECT last_insert_rowid() AS rowid FROM table_name LIMIT 1 

+1

यह नहीं [प्रलेखन] (https://www.sqlite.org/lang_corefunc.html#last_insert_rowid) कहता है: "last_insert_rowid() SQL फ़ंक्शन sqlite3_last_insert_rowid() सी/सी ++ इंटरफ़ेस फ़ंक्शन के चारों ओर एक रैपर है।" जिसका मतलब है कि किसी व्यक्तिगत तालिका के लिए अंतिम 'पंक्ति' जैसी कोई चीज़ नहीं है। –

3

भागो अपने कोड के अंदर इस क्वेरी एक व्यक्ति तालिका के लिए पिछले rowid प्राप्त के लिए:

SELECT SEQ from sqlite_sequence WHERE name='tablename' 
संबंधित मुद्दे