2010-04-27 26 views
5

में एक्सएमएल डिसेरियलाइजेशन मेरे पास एमएस एक्सेस डेटाबेस में वीबीए कक्षाओं का एक सेट है। मेरे पास डेटा के साथ एक एक्सएमएल स्ट्रिंग है जिसके साथ मैं नई कक्षाएं बनाना चाहता हूं।वीबी/वीबीए

व्यक्तिगत रूप से प्रत्येक संपत्ति को सेट करने के अलावा, क्या मेरे ऑब्जेक्ट में XML को deserialize करने का एक आसान तरीका है?

मैं TypeLib पुस्तकालय

Public Sub ISerializable_Deserialize(xml As IXMLDOMNode) 

    Dim tTLI As TLIApplication 
    Dim tInvoke As InvokeKinds 
    Dim tName As String 
    Dim tMem As MemberInfo 

    tInvoke = VbLet 

    For Each tMem In TLI.ClassInfoFromObject(Me).Members 

    tName = LCase(tMem.Name) 

    CallByName Me, tMem.Name, VbLet, xml.Attributes.getNamedItem(tName).Text 

    Next tMem 
End Sub 

का उपयोग कर कोड को देखा है लेकिन इस मानक वर्ग मॉड्यूल के साथ काम करने के लिए प्रतीत नहीं होता। मुझे 42 9 त्रुटि मिलती है:

ActiveX Component Cannot Be Created 

क्या कोई और मेरी मदद कर सकता है? अगर मैं इसकी मदद कर सकता हूं तो मुझे प्रत्येक प्रस्ताव को हाथ से सेट नहीं करना पड़ेगा, इनमें से कुछ कक्षाएं बहुत बड़ी हैं!

उत्तर

2

तुम कभी उस कोड में उदाहरण tTLI & और बाद में इसे का उल्लेख के रूप में सिर्फ TLI तो यह अभ्यस्त काम, 429 त्रुटि क्योंकि TypeInfo पुस्तकालय पंजीकृत नहीं है, आप एक संदर्भ के रूप में जोड़ा हो सकता है?

आप निम्नलिखित काम करेंगे किया है:

Dim TLI As TLIApplication 
Dim II As InterfaceInfo 
Dim MI As MemberInfo 

Set TLI = New TLIApplication 
Set II = TLI.InterfaceInfoFromObject(Me) 

For Each MI In II.Members 
    If MI.InvokeKind = InvokeKinds.INVOKE_PROPERTYPUT Then 
     Debug.Print MI.Name 
     TLI.InvokeHook Me, MI.Name, InvokeKinds.INVOKE_PROPERTYPUT, "PROPVALUE" 
    End If 
Next 

आप CallByName साथ InvokeHook की जगह यदि आप चाहें तो कर सकते हैं।

+0

किसी एक्सेस डेटाबेस में निजी कक्षाएं किसी भी सार्वजनिक प्रकार की लाइब्रेरी में शामिल नहीं हैं, इसलिए मुझे नहीं लगता कि यह कभी भी काम करने जा रहा है, यहां तक ​​कि आपके द्वारा सुझाए गए टाइपो के साथ भी। मुझे नहीं लगता कि 'InterfaceInfoFromObject (Me)' सफल हो सकता है क्योंकि 'Me' के लिए प्रासंगिक इंटरफेस सार्वजनिक नहीं हैं। – MarkJ

+0

InterfaceInfoFromObject IDispatch :: GetTypeInfo() के माध्यम से काम करता है जो मेरे लिए एक्सेस में काम करता है .. कैसे .. कौन जानता है? –

+0

धन्यवाद एलेक्स। यह अभी भी काम नहीं कर रहा है, यह पर असफल रहा है TLI = नया TLIAplication लाइन अब एक ही त्रुटि के साथ सेट करें। मैंने टाइपेलिब संदर्भ का संदर्भ दिया है, (tlbinf32.dll) क्या यह सही है? बेन। – oharab