2010-04-27 1 views
5

MS Access 데이터베이스에 VBA 클래스 집합이 있습니다. 새 클래스를 만들려는 데이터가있는 xml 문자열이 있습니다.VB/VBA의 XML 비 직렬화

각 속성을 개별적으로 설정하는 것 외에 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 

를 사용하여 코드를 본 적이 있지만,이 표준 클래스 모듈과 함께 작동하지 않습니다. 429 오류가 발생합니다.

ActiveX Component Cannot Be Created 

나를 도와 줄 사람이 있습니까? 내가 도움을 줄 수 있다면 손으로 각 속성을 설정하지 않아도되지만,이 클래스 중 일부는 거대합니다!

답변

2

당신은 결코 그 코드의 예를 tTLI & 나중에 참조처럼 TLI 그래서 늘 일, 429 오류가 소속 카테고리 라이브러리가 등록되어 있지 않기 때문에, 당신은 참조로 추가 않았다 될 수있다?

다음이 작동 한 경우 : 원하는 경우

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 

당신은 CallByNameInvokeHook을 대체 할 수 있습니다.

+0

Access 데이터베이스의 개인 클래스는 공개 형식 라이브러리에 포함되어 있지 않으므로 제안 된대로 오타가 수정 되어도 작동하지 않을 것으로 생각됩니다. 나는'InterfaceInfoFromObject (Me)'에 대한 관련 인터페이스가 public이 아니기 때문에'InterfaceInfoFromObject (Me)'가 성공할 수 있다고 생각하지 않는다. – MarkJ

+0

InterfaceInfoFromObject는 나를 위해 Access에서 작동하는 IDispatch :: GetTypeInfo()를 통해 작동합니다 .. 어떻게 .. 누가 알겠습니까? –

+0

감사합니다. Alex. 여전히 작동하지 않습니다. TLI = New TLIApplication을 줄로 설정하면 오류가 발생합니다. typelib 참조를 참조했습니다. (tlbinf32.dll) 올바른 것입니까? 벤. – oharab