在记录集里使用CopyMemory到Variant变量的问题

极语言中文编程 2012-09-01 04:06:04
不知道为什么SQL2005就是不能使用GetChunk到一个字节组,但是可以读取到Variant变量,我用StrPtr可以取得其内存的地址,用CopyMemory读取数据完全没有问题,但是写数据就不行了。
Dim mg(7) As Long, lm As Long,itm As Variant
CopyMemory mg(0), ByVal StrPtr(itm), 28
取任何指针的数据都可以,像这样
lm = StrPtr(itm) + lb1 * 6
CopyMemory mg(0), ByVal lm + 8, 28
但是我反过来写
CopyMemory ByVal lm + 8, mg(0), 28
也没出错。但是再次读取内容没变。
这里必须用StrPtr,如果用VarPtr或者直接写变量CopyMemory mg(0), itm, 28时,内存就出错了。
说明内存位置都是对的。能读应该能写啊。为什么写了之后,再读出来还没有变呢。
...全文
103 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
是的,我就是把数据库取到Variant 变量,然后再用CopyMemory到一个字节组,修改字节组。可以直接写到数据库中。
of123 2012-09-05
  • 打赏
  • 举报
回复

Variant 型变量是复合类型,情况比较复杂。可能需要你详细了解它的数据存储结构。

建议用 Variant 获取数据后,就复制到一个用作内部缓存的 Byte 数组。后续操作不再涉及 Variant,它仅用于中转。
  • 打赏
  • 举报
回复
'┏〓〓〓〓〓〓〓〓〓 GetRsByte,start 〓〓〓〓〓〓〓〓〓┓
'[简介]:
'从SQL SERVER中读取图片二进制内容,记录集中二进制的读取
Function GetRsByte(RS As ADODB.Recordset, Field As String)
'VB源码,帮你写函数,帮你写代码,帮你写模块,帮你设计软件
'--需要什么函数或功能,可以联系我。
'版权所有,请保留作者信息.QQ:1085992075
'如需商业用途请联系作者
Dim ByteSz() As Byte
ByteSz = RS(Field).GetChunk(LenB(RS(Field)))
GetRsByte = ByteSz
End Function
'┗〓〓〓〓〓〓〓〓〓 GetRsByte,end 〓〓〓〓〓〓〓〓〓┛
  • 打赏
  • 举报
回复
sql2005只是把这个值取出存在一个临时变量上,你改他是没用的,他不会存到硬盘上
写进去要用另外的方法

Set Rs = GetRs("select * from [01 table1]")
'存图片到SQL SERVER 2000 数据库
Rs("img") =二进制内容
rs.update
王二.麻子 2012-09-03
  • 打赏
  • 举报
回复
strptr和varptr的作用是不同的
到底有多少不同可以去看看返回的结果

CopyMemory mg(0), ByVal StrPtr(itm), 28
如果这里你是要吧itm的内容复制到mg(0-3),那么也不需要用28自己长度.你的访问已经超出范围了.不会出错,用mg(4)的时候不是期望的数据.

itm是variant类型,在内存占用16字节.

CopyMemory mg(0), ByVal StrPtr(itm), 28
先把itm转换为str类型,然后使用strptr得到str类型的中间变量的地址,这个中间变量不是用户程序的,是编译器给填进去的.copymemory后,编译器释放了这个字符串类型的中间变量.

如果把variant 类型的itm整个16自己的内容移动到mg(0-3),还是用varptr.
copymemory mg(0),itm,16&
add=varptr(itm)
copymemory mg(0),byval add,16&

lm = StrPtr(itm) + lb1 * 6
itm转换成字符串类型的变量x,得到x的地址add,然后给这个地址增加...,这个地址增加之后,指向未知的区域,你知道是什么意义?你肯定不知道,也许这个地址是过程的返回地址.
贝隆 2012-09-02
  • 打赏
  • 举报
回复
CopyMemory函数是怎么声明的?

7,763

社区成员

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

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