2010-04-27 12 views
5

MS Access veritabanında bir dizi VBA sınıfları var. Yeni sınıflar oluşturmak istediğim verilerle birlikte bir xml dizim var.VB/VBA'da XML Deserialization

Her özelliği tek tek ayarlamak yerine, XML'i nesneme dönüştürmek için kolay bir yol var mı?

Ben TypeLib kütüphanesini

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 

kullanarak kodu gördüm ama bu standart sınıf modülleri ile çalışmak için görünmüyor. Ben bir 429 hatası alıyorum:

ActiveX Component Cannot Be Created 

Başka biri bana yardımcı olabilir mi? Eğer yardımcı olabilirsem, her bir idareyi elle ayarlamak zorunda kalmamayı tercih ederim, bu sınıfların bazıları çok büyük!

cevap

2

Sen asla kodda örnek tTLI & ve sonra başvurmanız olarak sadece TLI yüzden alışkanlık eser 429 hata TypeInfo kütüphane kayıtlı olmadığından, bir referans olarak mı eklediniz olabilir?

sen şu çalışacaktır yaptıysak: İsterseniz

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 

Sen CallByName ile InvokeHook yerini alabilir.

+0

Access veritabanındaki özel sınıflar herhangi bir genel tür kitaplığı içinde yer almaz. Bu nedenle, önerdiğiniz gibi giderilen yazım hataları olsa bile bunun işe yaramayacağını düşünmüyorum. "InterfaceInfoFromObject (Me)" nin, "Me" nin ilgili arabirimleri herkese açık olmadığı için başarılı olabileceğini sanmıyorum. – MarkJ

+0

InterfaceInfoFromObject, benim için Access'te çalışan IDispatch :: GetTypeInfo() aracılığıyla çalışır .. nasıl .. kim bilir? –

+0

Teşekkürler Alex. Hala çalışmıyor, Set TLI = Yeni TLIApplication hattında artık aynı hatayla başarısız oluyor. Ben typelib başvuru başvuruyor, (tlbinf32.dll) bu doğru olanı mı? Ben. – oharab