में "SELECT SCOPE_IDENTITY()" का उपयोग Excel में एक VBA स्क्रिप्ट का उपयोग करके, मैं एक तालिका में एक नई पंक्ति डालने की कोशिश कर रहा हूं और फिर उस पंक्ति का पहचान मान वापस प्राप्त कर रहा हूं। यदि मैं चलाता हूं:एडीओडीबी रिकॉर्ड्स
INSERT INTO DataSheet(databaseUserID, currentTimestamp)
VALUES (1, CURRENT_TIMESTAMP);
SELECT SCOPE_IDENTITY()
प्रबंधन स्टूडियो में, पंक्ति डाली गई है और यह मुझे अपेक्षित रूप से वापस लौटा पहचान मूल्य देता है। हालांकि, जब मैं वीबीए में एडीओडीबी रिकॉर्डसेट के माध्यम से सटीक वही क्वेरी चलाता हूं, तो मुझे परेशानी हो रही है। पंक्ति वास्तव में डाली गई है, लेकिन मैं पहचान मान तक नहीं पहुंच सकता। रिकॉर्डसेट 0 फ़ील्ड सूचीबद्ध करता है और वास्तव में भी बंद कर दिया गया है। मैंने अर्धविराम के साथ और उसके बिना प्रयास किया है, और मैंने क्वेरी को एक ही लेनदेन के रूप में चलाने की भी कोशिश की। वही सौदा, कोई पासा नहीं। कोई अंदाज़ा है कि क्या चल रहा है?
यहाँ मेरी VBA है:
Dim rs As ADODB.Recordset
Dim cn As Connection
Dim SQLStr As String
Dim serverName As String
Dim databaseName As String
serverName = "MSSQLServer"
databaseName = "QA"
cxnStr = "Driver={SQL Server};Server=" & serverName & ";Database=" & databaseName & ";"
SQLStr = "INSERT INTO DataSheet(databaseUserID, currentTimestamp)
VALUES (1, CURRENT_TIMESTAMP); SELECT SCOPE_IDENTITY()"
Set cn = New ADODB.Connection
cn.Open cxnStr
Set rs = New ADODB.Recordset
rs.Open SQLStr, cn, adOpenKeyset, adLockOptimistic
MsgBox (rs.Fields(0).Value)
और संदेश बॉक्स प्रदर्शित करने के लिए क्योंकि rs.Fields(0).Value
रिटर्न नल विफल रहता है। मैंने आरएस के लिए एक घड़ी जोड़ा, और, जैसे मैंने कहा, क्वेरी के बाद 0 फ़ील्ड दिखाता है और यह भी बंद होता है (राज्य = 0)।
सुंदर! पूरी तरह से काम करता है, धन्यवाद! – JoeCool