请VB高手进来解决一个关于存储对象变量的问题,请热爱VB的朋友进来一起学习!

agame 2004-11-22 02:01:58
讨论主题:
1、将对象变量保存至二进制数组
2、将二进制数组存储到数据库中
3、从数据库中读出此二进制数据并还原成对象变量

问题:
1、如何将一个对象变量保存到二进制数组中?
2、从数据库中读出一个以二进制保存的对象变量如何还原?
3、还原后的对象变量是否可以继续正常使用?

举例:
现有两个窗体form1、form2,一个类clsPeople、一个ACCESS数据库。


在form1内声明了一个对象变量cPeople为class1的一个实例

设置cPeople的属性 .Name="Tom" .Age="22"
form1内的部分代码:


Private cPeople As clsPeople

Set cPeople = New clsPeople
With cPeople
.Name = "Tom"
.Age = "22"
End With

Dim 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,请各位高手们不要吝啬您的才华,在下这里就虚心请教了!!!







...全文
175 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
胖河马 2004-11-23
  • 打赏
  • 举报
回复
你看这个行不

'Class cc
Option Explicit

Public 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 Function

Public 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
painache 2004-11-23
  • 打赏
  • 举报
回复
我觉得bdhh(Silent)给的方法不错!
lyxhappy 2004-11-23
  • 打赏
  • 举报
回复
UP
wumylove1234 2004-11-23
  • 打赏
  • 举报
回复
mark!
agame 2004-11-22
  • 打赏
  • 举报
回复
晚上顶起来让高手看见 :)
painache 2004-11-22
  • 打赏
  • 举报
回复
共同解决问题,帮楼主转到COM版块了.
painache 2004-11-22
  • 打赏
  • 举报
回复
我也想知道这个问题!

楼主在郑州么?如果是的话咱俩一块请高手吃饭,并拜高手为师!!!
agame 2004-11-22
  • 打赏
  • 举报
回复
这个问题确实比较高深,牵扯到很多COM方面的知识。所以,如果哪为高手能给出解决方案,在郑州的就请吃饭,在外地的就只能送分了。呵呵
caimps 2004-11-22
  • 打赏
  • 举报
回复
好复杂
agame 2004-11-22
  • 打赏
  • 举报
回复
不能保存到XML还涉及一个加密的问题。之所以保存为二进制数据就包括有加密的考虑。
viena 2004-11-22
  • 打赏
  • 举报
回复
/*
实际使用中比这个要复杂得多,必须要把对象变量保存起来供其他程序来使用的。而且要保存的对象变量还是设置过属性的
*/
你所要保存的这个对象,和重新生成并初始化的对象的区别,难道不是设置的属性吗?
你写个函数作为类的方法,把所有的属性,生成XML保存就可以了呀
反之,另外一个方法,读出XML标记,重新生成对象,设置属性,怎么不可以呢?
True1024 2004-11-22
  • 打赏
  • 举报
回复
学习
gg137zeus 2004-11-22
  • 打赏
  • 举报
回复
学习
学习
agame 2004-11-22
  • 打赏
  • 举报
回复
楼上的朋友,我举的例子是一个很简单的例子,实际使用中比这个要复杂得多,必须要把对象变量保存起来供其他程序来使用的。而且要保存的对象变量还是设置过属性的。
viena 2004-11-22
  • 打赏
  • 举报
回复
不明白为什么要用二进制呢?要保存的无非就是对象的属性吧,用字符串不可以吗?
用Ini或XML文件,串行化与反串行化吗;读出属性并赋给重新成生的对象可不可以呢?
viena 2004-11-22
  • 打赏
  • 举报
回复
学习
agame 2004-11-22
  • 打赏
  • 举报
回复
我在这里再提供一点昨天研究后总结的一点思路。

是否要用到API函数
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
来从内存中拷贝变量到二进制数组?

或者先把对象变量以二进制的方式保存到硬盘上的一个文件,然后读取这个二进制文件到二进制数组以便保存进数据库。

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧