讨论主题:
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,请各位高手们不要吝啬您的才华,在下这里就虚心请教了!!!http://community.csdn.net/Expert/topic/3576/3576540.xml?temp=.6850397从这个连接转过来的.请高手来解决!跪谢!

解决方案 »

  1.   

    序列化就可以实现,具体就是用C++写一个COM组件,该组件的关键类继承自
    某个可以实现序列化的抽象类
      

  2.   

    vb中只有公共类可以序列化'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
      

  3.   

    感谢bdhh(Silent)所给的方法.去试试
      

  4.   

    可不可以把class1做成进程外组件?假如可以的话,把组件的dll当做二进制文件,然后用ADO.Stream存到数据库
      

  5.   

    ...dll文件中又不含有运行时数据
      

  6.   

    自定义类型或者数组可以先转换成xml再保存啊,哪有那么多现成的
      

  7.   

    com有这方面专门的解决方法“永久对象”,即实现IPersistXXX接口的对象。在VB中的确没有在C++中那什好处理。但象你举的例子,根本不需要实现永久接口;也没必要非要用二进制保存,你form1应该不是简单的表结构就能表达,要不然你不用花那么多心思。我看过“用友”的ERP软件是用这样一种方法保存、更改和重新打开各种单据界面:它把各种单据的窗口统一分成两部分,一是单项控件集(TEXT控件数组)和一个集合(类似于DataGrid).在楼主属性保存方面,它的做法是用一个ADODB分级recordset或类似的中间组件实现的。第一级{SELECT 单据ID,单据名... from 单据清单},第二级{SELECT 单据ID,单据主表ID,控件的显示属性1~N项(如位置、是否显示等),邦定的表名,邦定字段},第三级{}。用这种方法实现楼主的例子,FROM1中更改了属性,实际上只是更改表中的数据。当FROM2打开时只要一个参数——单据名。如真是想用二进制保存,还是建议楼主实现IPersistXXX接口,但VB里只有属性页实现了IPersistPropertyBag,要保存到数据库还有点难度。