मुझे अपने वर्तमान कार्यस्थल पर एक बड़ा वीबी 6 ऐप मिला है। मैं नौकरी पर वीबी 6 सीख रहा हूं और मेरे पास कई समस्याएं हैं I इस समय प्रमुख मुद्दा यह है कि मैं यह नहीं समझ सकता कि संग्रह वस्तु में कोई कुंजी मौजूद है या नहीं। क्या कोई मदद कर सकता है?जांचें कि वीबी 6 संग्रह में कोई रिकॉर्ड मौजूद है या नहीं?
उत्तर
मैं हमेशा इस तरह एक समारोह के साथ यह किया है:
public function keyExists(myCollection as collection, sKey as string) as Boolean
on error goto handleerror:
dim val as variant
val = myCollection(sKey)
keyExists = true
exit sub
handleerror:
keyExists = false
end function
@Mark Biek आपका keyExists बारीकी से मेरी मानक मौजूद है() फ़ंक्शन मेल खाता है। कक्षा को COM-खुला संग्रहों के लिए और अधिक उपयोगी बनाने के लिए और संख्यात्मक अनुक्रमणिका की जांच करने के लिए, मैं टाइप करने के लिए sKey और myCollection को बदलने की अनुशंसा करता हूं। यदि ऑब्जेक्ट्स के संग्रह के साथ फ़ंक्शन का उपयोग किया जा रहा है, तो 'सेट' आवश्यक है (उस लाइन पर जहां वैल सेट है)।
संपादित करें: यह मुझे परेशान कर रहा था कि मैंने कभी ऑब्जेक्ट-आधारित और मूल्य-आधारित मौजूद() फ़ंक्शन के लिए अलग-अलग आवश्यकताओं को नहीं देखा है। मैं बहुत ही कम वस्तुओं के लिए संग्रह का उपयोग करता हूं, लेकिन यह एक बग के लिए इतनी सही बाधा लगती है कि जब मुझे अस्तित्व की जांच करने की आवश्यकता होती है तो ट्रैक करना इतना मुश्किल होगा। चूंकि त्रुटि प्रबंधन विफल हो जाएगा यदि कोई त्रुटि हैंडलर पहले से सक्रिय है, तो एक नया त्रुटि स्कोप प्राप्त करने के लिए दो फ़ंक्शंस की आवश्यकता होती है। केवल मौजूद है() फ़ंक्शन कभी कहा जाता है की जरूरत:
Public Function Exists(col, index) As Boolean
On Error GoTo ExistsTryNonObject
Dim o As Object
Set o = col(index)
Exists = True
Exit Function
ExistsTryNonObject:
Exists = ExistsNonObject(col, index)
End Function
Private Function ExistsNonObject(col, index) As Boolean
On Error GoTo ExistsNonObjectErrorHandler
Dim v As Variant
v = col(index)
ExistsNonObject = True
Exit Function
ExistsNonObjectErrorHandler:
ExistsNonObject = False
End Function
और कार्यक्षमता को सत्यापित करने के लिए:
Public Sub TestExists()
Dim c As New Collection
Dim b As New Class1
c.Add "a string", "a"
c.Add b, "b"
Debug.Print "a", Exists(c, "a") ' True '
Debug.Print "b", Exists(c, "b") ' True '
Debug.Print "c", Exists(c, "c") ' False '
Debug.Print 1, Exists(c, 1) ' True '
Debug.Print 2, Exists(c, 2) ' True '
Debug.Print 3, Exists(c, 3) ' False '
End Sub
के रूप में थॉमस ने कहा, आप Let के बजाय एक वस्तु सेट की जरूरत है। यहाँ मेरी लाइब्रेरी से एक सामान्य समारोह है कि मूल्य और वस्तु प्रकार के लिए काम करता है:
Public Function Exists(ByVal key As Variant, ByRef col As Collection) As Boolean
'Returns True if item with key exists in collection
On Error Resume Next
Const ERR_OBJECT_TYPE As Long = 438
Dim item As Variant
'Try reach item by key
item = col.item(key)
'If no error occurred, key exists
If Err.Number = 0 Then
Exists = True
'In cases where error 438 is thrown, it is likely that
'the item does exist, but is an object that cannot be Let
ElseIf Err.Number = ERR_OBJECT_TYPE Then
'Try reach object by key
Set item = col.item(key)
'If an object was found, the key exists
If Not item Is Nothing Then
Exists = True
End If
End If
Err.Clear
End Function
के रूप में भी थॉमस ने सलाह दी, तो आप इस सामान्यीकरण करने के लिए वस्तु के संग्रह प्रकार बदल सकते हैं। Item (कुंजी) वाक्यविन्यास अधिकांश संग्रह वर्गों द्वारा साझा किया जाता है, ताकि वास्तव में उपयोगी हो।
संपादित करें ऐसा लगता है कि मुझे कुछ हद तक थॉमस द्वारा पेंच पर पीटा गया था। हालांकि आसान पुन: उपयोग के लिए मैं व्यक्तिगत रूप से एक एकल कार्य को प्राथमिकता देता हूं जिसमें निजी निर्भरता नहीं होती है।
संग्रह में कुंजी मौजूद नहीं होने पर मामलों को पकड़ने के लिए त्रुटि हैंडलर का उपयोग करना "सभी त्रुटियों पर तोड़ने" विकल्प को काफी परेशान कर सकता है। अवांछित त्रुटियों से बचने के लिए मैं अक्सर एक कक्षा बना देता हूं जिसमें संग्रहीत वस्तुओं को एक संग्रह में और एक शब्दकोश में सभी कुंजी होती है। शब्दकोश मौजूद है (कुंजी) -फंक्शन इसलिए संग्रह से ऑब्जेक्ट प्राप्त करने का प्रयास करने से पहले मैं इसे कॉल कर सकता हूं। आप केवल एक शब्दकोश में तारों को स्टोर कर सकते हैं, इसलिए यदि आपको वस्तुओं को स्टोर करने की आवश्यकता है तो संग्रह अभी भी आवश्यक है।
द्वारा प्रदर्शित किया गया था यह सही नहीं है: आप किसी भी प्रकार की ऑब्जेक्ट/वैल्यू को डिक्टियोनियन https://msdn.microsoft.com/en-us/library/x4k5wbx4%28v= में स्टोर कर सकते हैं बनाम.84% 29.aspx "आइटम डेटा का कोई भी रूप हो सकता है" – Clon
एक साधारण शब्दकोश पर्याप्त है जब आप चाहते हैं कि एक कुंजी के साथ कई मूल्य/वस्तुओं को स्टोर करना है, और जांचें कि शब्दकोश में कोई कुंजी मौजूद है या नहीं। यदि आप यह सुनिश्चित करना चाहते हैं कि डिक्शनरी में केवल कुछ प्रकार का डेटा है, तो आपको शब्दकोश को किसी ऑब्जेक्ट में लपेटना होगा और इसकी गुणधर्मों और विधियों को वैयक्तिकृत करना होगा। यह अन्य प्रतिक्रियाओं में दिए गए संग्रह ऑब्जेक्ट और मौजूद() विधि के साथ भी किया जा सकता है। https://msdn.microsoft.com/en-us/library/aa262338%28v=vs.60%29.aspx – Clon
बेहतर समाधान TryGet फ़ंक्शन लिखना होगा। आप जिस समय जांचने जा रहे हैं, और फिर आइटम प्राप्त करना है। एक ही समय में इसे करके समय बचाएं।
public Function TryGet(key as string, col as collection) as Variant
on error goto errhandler
Set TryGet= col(key)
exit function
errhandler:
Set TryGet = nothing
end function
http://www.visualbasic.happycodings.com/Other/code10.html देखने के कार्यान्वयन यहाँ भी वैकल्पिक पाया तत्व लौटने का लाभ दिया है, और (टिप्पणियों के अनुसार) वस्तु/देशी प्रकार के साथ काम करता है।
यहाँ reproduced के बाद से लिंक अब उपलब्ध नहीं है:
अगर एक आइटम एक संग्रह
में मौजूद निम्न कोड दिखाता है कि निर्धारित करने के लिए एक आइटम एक संग्रह के भीतर मौजूद है निर्धारित करें।
Option Explicit
'Purpose : Determines if an item already exists in a collection
'Inputs : oCollection The collection to test for the existance of the item
' vIndex The index of the item.
' [vItem] See Outputs
'Outputs : Returns True if the item already exists in the collection.
' [vItem] The value of the item, if it exists, else returns "empty".
'Notes :
'Example :
Function CollectionItemExists(vIndex As Variant, oCollection As Collection, Optional vItem As Variant) As Boolean
On Error GoTo ErrNotExist
'Clear output result
If IsObject(vItem) Then
Set vItem = Nothing
Else
vItem = Empty
End If
If VarType(vIndex) = vbString Then
'Test if item exists
If VarType(oCollection.Item(CStr(vIndex))) = vbObject Then
'Return an object
Set vItem = oCollection.Item(CStr(vIndex))
Else
'Return an standard variable
vItem = oCollection.Item(CStr(vIndex))
End If
Else
'Test if item exists
If VarType(oCollection.Item(Int(vIndex))) = vbObject Then
'Return an object
Set vItem = oCollection.Item(Int(vIndex))
Else
'Return an standard variable
vItem = oCollection.Item(Int(vIndex))
End If
End If
'Return success
CollectionItemExists = True
Exit Function
ErrNotExist:
CollectionItemExists = False
On Error GoTo 0
End Function
'Demonstration routine
Sub Test()
Dim oColl As New Collection, oValue As Variant
oColl.Add "red1", "KEYA"
oColl.Add "red2", "KEYB"
'Return the two items in the collection
Debug.Print CollectionItemExists("KEYA", oColl, oValue)
Debug.Print "Returned: " & oValue
Debug.Print "-----------"
Debug.Print CollectionItemExists(2, oColl, oValue)
Debug.Print "Returned: " & oValue
'Should fail
Debug.Print CollectionItemExists("KEYC", oColl, oValue)
Debug.Print "Returned: " & oValue
Set oColl = Nothing
End Sub
मेरे मानक समारोह बहुत सरल है। यह तत्व प्रकार के बावजूद काम करेगा, क्योंकि यह किसी भी असाइनमेंट को परेशान नहीं करता है, यह केवल संग्रह संपत्ति को निष्पादित करता है।
Public Function Exists(ByVal oCol As Collection, ByVal vKey As Variant) As Boolean
On Error Resume Next
oCol.Item vKey
Exists = (Err.Number = 0)
Err.Clear
End Function
कथन "एरर हैंडलर पहले से सक्रिय होने पर त्रुटि प्रबंधन विफल हो जाएगा" केवल आंशिक रूप से सही है।
आपके पास अपने दिनचर्या में कई त्रुटि हैंडलर हो सकते हैं।
तो, कोई एक ही कार्यक्षमता को केवल एक समारोह में समायोजित कर सकता है।
बस इस तरह अपने कोड को फिर से लिखने:
Public Function Exists(col, index) As Boolean
Dim v As Variant
TryObject:
On Error GoTo ExistsTryObject
Set v = col(index)
Exists = True
Exit Function
TryNonObject:
On Error GoTo ExistsTryNonObject
v = col(index)
Exists = True
Exit Function
ExistsTryObject:
' This will reset your Err Handler
Resume TryNonObject
ExistsTryNonObject:
Exists = False
End Function
हालांकि, अगर आप केवल दिनचर्या के TryNonObject अनुभाग में कोड शामिल करने के लिए थे, यह वही जानकारी प्राप्त करेगी।
यह ऑब्जेक्ट्स और गैर-ऑब्जेक्ट्स दोनों के लिए सफल होगा। यह गैर-ऑब्जेक्ट्स के लिए आपके कोड को तेज़ी से बढ़ाएगा, क्योंकि आपको केवल एक ही कथन करना होगा ताकि यह सुनिश्चित किया जा सके कि आइटम संग्रह में मौजूद है।
इस तरह के एक समारोह की तलाश करते हुए मैंने इसे निम्नलिखित के रूप में डिजाइन किया। यह नए चर निर्दिष्ट किए बिना ऑब्जेक्ट्स और गैर-ऑब्जेक्ट्स के साथ काम करना चाहिए।
Public Function Exists(ByRef Col As Collection, ByVal Key) As Boolean
On Error GoTo KeyError
If Not Col(Key) Is Nothing Then
Exists = True
Else
Exists = False
End If
Exit Function
KeyError:
Err.Clear
Exists = False
End Function
- 1. जांचें कि रेल में कोई लेआउट मौजूद है या नहीं?
- 2. केकफ़्प जांचें कि रिकॉर्ड मौजूद है
- 3. जांचें कि फ़ाइल मौजूद है या नहीं,
- 4. जांचें कि कोई पंक्ति मौजूद है या नहीं postgresql
- 5. Node.js - Mongoose - जांचें कि कोई संग्रह मौजूद है
- 6. कैसे जांचें कि कोई संपत्ति मौजूद है या नहीं?
- 7. जांचें कि निर्देशिका में निर्देशिका मौजूद है या नहीं?
- 8. जांचें कि NSDictionary में कुंजी मौजूद है या नहीं
- 9. जांचें कि संग्रहित प्रो डीबी में मौजूद है या नहीं?
- 10. जांचें कि डीबी में भूमिका मौजूद है या नहीं?
- 11. जांचें कि कोई SQL तालिका मौजूद है
- 12. जांचें कि कोई webservice मौजूद है
- 13. जांचें कि कोई फॉर्म इनपुट मौजूद है
- 14. जांचें कि कोई वर्ग मौजूद है
- 15. रेल I18n, जांचें कि अनुवाद मौजूद है या नहीं?
- 16. पता लगाएं कि वीबी 6
- 17. सीक्यूएल: कैसे जांचें कि कुंजीपटल मौजूद है या नहीं?
- 18. php: जांचें कि पथ मौजूद है या नहीं?
- 19. जांचें कि तत्व मौजूद है
- 20. वीबी 6
- 21. जांचें कि कॉलिंग से पहले फ़ंक्शन मौजूद है या नहीं?
- 22. कैसे जांचें कि टुकड़ा मौजूद है या नहीं?
- 23. जांचें कि तालिका मौजूद है
- 24. जांचें कि संसाधन मौजूद है
- 25. जांचें कि जावा में enum मौजूद है
- 26. कैसे जांचें कि कोई ईवेंट हैंडलर jQuery या JS का उपयोग कर मौजूद है या नहीं?
- 27. जांचें कि ईवेंट में कोई श्रोताओं है या नहीं?
- 28. जांचें कि किसी फॉर्म में कोई कुंजी है या नहीं?
- 29. जांचें कि स्ट्रिंग सामग्री में कोई HTML है या नहीं?
- 30. जांचें कि क्या स्टोर (या रिकॉर्ड) संपादित किया गया है?
इस समस्या से बचने के लिए, यह काम हिस्सा छोड़ बेहतर है, कि है, निर्देश ओ = col (इंडेक्स) या वी = col (इंडेक्स) और चर घोषणा सेट ड्रॉप, और बस col लिखें। आइटम इंडेक्स, जो ऑब्जेक्ट्स और सरल मानों के साथ समान कार्य करता है। – Clon
अब मुझे लगता है कि यह पहले से ही ईसाई हैटर – Clon