如何在内存创建一个MDB数据库或者同等效果?
程序通过网络获得必须的数据,但因为有大量的查询操作,显得效率极低,不能满足要求。原计划是在本地保存为一个MDB文件,但因项目对安全性要求很高,不允许在硬盘上有存储操作(存...
程序通过网络获得必须的数据,但因为有大量的查询操作,显得效率极低,不能满足要求。原计划是在本地保存为一个MDB文件,但因项目对安全性要求很高,不允许在硬盘上有存储操作(存了再删也不行),而被否。所以我想能否创建一个存储在内存中的DBConnect(或者其他类似)对象,使得我可以一次性将数据接收并保存在里面,然后可以随时通过SQL语句进行查询等操作呢?
请高手或者有这方面经验的前辈赐教。
非常感谢大家的热心支持。但感觉仍然无法完美解决这个问题。我想应该是我描述的不够完整。
程序是CS结构的,由于考虑到网络传输的安全性问题,网络信息交互是由专门接口实现的。
简单的说就是:GetInfo()可以取得单一条目的内容,GetBlock()可以取得一个大区块的内容。
很明显,在频繁查询之前,取整个区块更高效。但获得的内容无法进行SQL查询,怎么解决?
由于根本不是数据库连接,也就无法“多建几个活动状态的Recordset记录集”了……
有办法不指定文件或者DSN,直接 New 一个记录集使用吗?如何建立字段?能构造视图吗?
使用 LinQ 应该是可行的,但又会对跨平台移植产生不利的影响。真纠结啊……
提高悬赏,拜求各路高手神仙帮忙! 谢谢了~ 展开
请高手或者有这方面经验的前辈赐教。
非常感谢大家的热心支持。但感觉仍然无法完美解决这个问题。我想应该是我描述的不够完整。
程序是CS结构的,由于考虑到网络传输的安全性问题,网络信息交互是由专门接口实现的。
简单的说就是:GetInfo()可以取得单一条目的内容,GetBlock()可以取得一个大区块的内容。
很明显,在频繁查询之前,取整个区块更高效。但获得的内容无法进行SQL查询,怎么解决?
由于根本不是数据库连接,也就无法“多建几个活动状态的Recordset记录集”了……
有办法不指定文件或者DSN,直接 New 一个记录集使用吗?如何建立字段?能构造视图吗?
使用 LinQ 应该是可行的,但又会对跨平台移植产生不利的影响。真纠结啊……
提高悬赏,拜求各路高手神仙帮忙! 谢谢了~ 展开
展开全部
有内存数据库,你可以百度一下。
有办法不指定文件或者DSN,直接 New 一个记录集使用吗?如何建立字段?能构造视图吗?
可以:
Private Sub Command1_Click()
Dim rst As New ADODB.Recordset '以下我建立一个无连接Recordset
rst.ActiveConnection = Nothing
rst.CursorLocation = adUseClient
rst.CursorType = adOpenStatic
rst.LockType = adLockOptimistic
rst.Fields.Append "xx", adBSTR
rst.Fields.Append "yy", adBigInt
rst.Fields.Append "zz", adDate
rst.Open
rst.AddNew
rst(0) = "wo"
rst(1) = 12345678
rst(2) = "2012-11-15"
rst.Update
Debug.Print rst(0); rst(1); rst(2)
End Sub
再建立一个无连接记录集,进行克隆,然后删除不要字段,以构成所要的视图字段。记录可以用条件进行筛选。
有办法不指定文件或者DSN,直接 New 一个记录集使用吗?如何建立字段?能构造视图吗?
可以:
Private Sub Command1_Click()
Dim rst As New ADODB.Recordset '以下我建立一个无连接Recordset
rst.ActiveConnection = Nothing
rst.CursorLocation = adUseClient
rst.CursorType = adOpenStatic
rst.LockType = adLockOptimistic
rst.Fields.Append "xx", adBSTR
rst.Fields.Append "yy", adBigInt
rst.Fields.Append "zz", adDate
rst.Open
rst.AddNew
rst(0) = "wo"
rst(1) = 12345678
rst(2) = "2012-11-15"
rst.Update
Debug.Print rst(0); rst(1); rst(2)
End Sub
再建立一个无连接记录集,进行克隆,然后删除不要字段,以构成所要的视图字段。记录可以用条件进行筛选。
追问
试验了一上午,发现这个方法还是有硬伤。其中最头疼的就是跨表访问的问题。
这个rst创建、访问、过滤(替代Select)都没什么问题,但是两个或多个rst之间是无法Select的。我试过了各种办法都解决不了,真心觉得没治了。
不得已之下,试用了一下朋友提供的SQLite,发现真TMD简单!
真是忍不住爆粗口,前面三天绞尽脑汁全都白费……
关键语句:
Dim Conn As New SQLite.SQLiteConnection("data source= :memory:")
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-11-20
展开全部
“项目对安全性要求很高,不允许在硬盘上有存储操作(存了再删也不行),而被否。”
不要否!程序可以创建一个临时的*.mdb,在程序使用结束后由程序删除,这个*.mdb的路径由程序指定,使用者是不知道的,程序使用结束后,由程序删除,不会到回收站。
不要否!程序可以创建一个临时的*.mdb,在程序使用结束后由程序删除,这个*.mdb的路径由程序指定,使用者是不知道的,程序使用结束后,由程序删除,不会到回收站。
追问
这样是不可靠的。
因为万一程序崩溃,或者有人使用了反删除恢复工具……
即便不是如此,也可以在NTFS系统中将目录的删除权限取消,以达到窃密的目的。
追答
那就不要采用我的方法了。
其实你在服务器创建,不要在客户机创建就解决了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C/S架构还牵扯到大量数据的为何不采用SQL服务器呢?用wincock实现太费事,非要按你的功能要求的话,那只有先取得数据,然后用代码在本地建立一个临时数据库,然后创建表,将网络收到的数据存入数据库,应用退出时候,代码删除这个数据库就是了
更多追问追答
追问
原因是因为安全性要求很高。实际上通讯并不完全是基于双绞线的,总之通讯不归我管,我只能使用提供给我的接口。至于建立本地临时数据库,我在下面答复过类似提议了,安全性得不到保障。
追答
怎么能得不到保障呢?用代码创建加密的数据库,大不了再把里面关键字段用个加密算法加密一下,用的时候解密一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
接收到的数据保存在数组里,然后在数组里进行对比查找,缺点是不能使用SQL语句进行查询,但内存使用效率比别的方法高
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、构造一个特定结构的内存数据块,但不能使用SQL指令;
2、构造内存中的虚拟驱动器,并隐藏。只是思路,没实际实现过
----------------------------
内存数据库:学习了
2、构造内存中的虚拟驱动器,并隐藏。只是思路,没实际实现过
----------------------------
内存数据库:学习了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询