讨论主题:
1、将对象变量保存至二进制数组
2、将二进制数组存储到数据库中
3、从数据库中读出此二进制数据并还原成对象变量问题:
1、如何将一个对象变量保存到二进制数组中?
2、从数据库中读出一个以二进制保存的对象变量如何还原?
3、还原后的对象变量是否可以继续正常使用?举例:
现有两个窗体form1、form2,一个类clsPeople、一个ACCESS数据库。
在form1内声明了一个对象变量cPeople为class1的一个实例设置cPeople的属性 .Name="Tom" .Age="22"
form1内的部分代码:
Private cPeople As clsPeopleSet cPeople = New clsPeople
With cPeople
    .Name = "Tom"
    .Age = "22"
End WithDim bytPeople() As Byte........   '如何将设置好属性的对象变量保存进bytPeople()数组?........   '如何将bytPeople()保存进Access数据库的Company表的People字段(字段类型为OLE对象)?在form2内读出数据库中Company表的People字段,并还原成对象变量,然后使用这个对象变量。form2内部分代码:Private cPeople As clsPeople.......    '如何从数据库中读出二进制数据并还原成对象变量cPeople?cPeople = ........'使用这个对象变量debug.Pring cPeople.Name
debug.Pring cPeople.Age
在下实在不材,昨天想了好久都解决不了这个问题,用GOOGLE搜了一下午也没搜到,查了CSDN的帖子也没有发现相关讨论,只好在这里求助各位高级别的VBer,请各位高手们不要吝啬您的才华,在下这里就虚心请教了!!!

解决方案 »

  1.   

    我在这里再提供一点昨天研究后总结的一点思路。是否要用到API函数
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
    来从内存中拷贝变量到二进制数组?或者先把对象变量以二进制的方式保存到硬盘上的一个文件,然后读取这个二进制文件到二进制数组以便保存进数据库。
      

  2.   

    不明白为什么要用二进制呢?要保存的无非就是对象的属性吧,用字符串不可以吗?
    用Ini或XML文件,串行化与反串行化吗;读出属性并赋给重新成生的对象可不可以呢?
      

  3.   

    /*
    实际使用中比这个要复杂得多,必须要把对象变量保存起来供其他程序来使用的。而且要保存的对象变量还是设置过属性的
    */
    你所要保存的这个对象,和重新生成并初始化的对象的区别,难道不是设置的属性吗?
    你写个函数作为类的方法,把所有的属性,生成XML保存就可以了呀
    反之,另外一个方法,读出XML标记,重新生成对象,设置属性,怎么不可以呢?
      

  4.   

    不能保存到XML还涉及一个加密的问题。之所以保存为二进制数据就包括有加密的考虑。
      

  5.   

    这个问题确实比较高深,牵扯到很多COM方面的知识。所以,如果哪为高手能给出解决方案,在郑州的就请吃饭,在外地的就只能送分了。呵呵
      

  6.   

    共同解决问题,帮楼主转到COM版块了.
      

  7.   

    你看这个行不'Class cc
    Option ExplicitPublic Function save() As Byte()
        Dim PropBag As PropertyBag
        Set PropBag = New PropertyBag
        
        Call PropBag.WriteProperty("a", "aaa")
        Call PropBag.WriteProperty("b", "bbb")
        
        save = PropBag.Contents
        Set PropBag = Nothing
    End FunctionPublic Function load(ByRef c() As Byte)
        Dim PropBag As PropertyBag
        Set PropBag = New PropertyBag
        
        PropBag.Contents = c
        
        MsgBox PropBag.ReadProperty("a")
        MsgBox PropBag.ReadProperty("b")
        
        Set PropBag = Nothing
    End Function
    '调用程序
        Dim content() As Byte
        Dim a As cc
        Dim b As cc
        
        Set a = New cc
        content = a.save
        Set a = Nothing
        
        Set b = New cc
        b.load content
        Set b = Nothing
      

  8.   

    我觉得bdhh(Silent)给的方法不错!