社区
非技术类
帖子详情
关于函数参数中byval的问题
realmayer7903
2004-05-11 10:47:20
我写了一个函数
原型如下
abc(byval rs as adodb.recordset)
原打算递归使用解决问题
但是在实际使用中发现
当rs中的游标发生变化时,传递到递归展开的函数中的rs的副本的游标居然也发生了改变,而且如果中使rs副本的游标变化后,原rs的游标也发生了相应变化,这也就意味着所有的rs及其副本使用同一个游标,这样也失去了我使用byval传递参数的本意.
是不是byval在传递对象时失效呢?
不知道谁能给我解释解释?
...全文
195
10
打赏
收藏
关于函数参数中byval的问题
我写了一个函数 原型如下 abc(byval rs as adodb.recordset) 原打算递归使用解决问题 但是在实际使用中发现 当rs中的游标发生变化时,传递到递归展开的函数中的rs的副本的游标居然也发生了改变,而且如果中使rs副本的游标变化后,原rs的游标也发生了相应变化,这也就意味着所有的rs及其副本使用同一个游标,这样也失去了我使用byval传递参数的本意. 是不是byval在传递对象时失效呢? 不知道谁能给我解释解释?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ryuginka
2004-05-13
打赏
举报
回复
up
lilaclone
2004-05-12
打赏
举报
回复
byval为传值引用,你在函数内容不要直接使用传入的Recordset 对象,而是在函数体中另定义一个Recordset,将其赋值后使用
null1027
2004-05-12
打赏
举报
回复
学习ing
胖河马
2004-05-12
打赏
举报
回复
private sub abc(byref rs as adodb.recordset)
……
end sub
call abc(rs.clone)
这样你可以得到一个独立的游标,但是对记录集的改动还是会反映到原纪录集中
realmayer7903
2004-05-12
打赏
举报
回复
果然对象是需要new以后才能用的
realmayer7903
2004-05-12
打赏
举报
回复
引用次数是不是只在最后销毁对象的时候起作用呢
supergreenbean
2004-05-12
打赏
举报
回复
你来看看这样行不行
Private Sub Command1_Click()
Dim oRst As Recordset
dev.cmd
Set dg.DataSource = dev.rscmd
Set oRst = CloneRecordset(dev.rscmd)
Set DataGrid1.DataSource = oRst
With dev.rscmd
.MoveNext
Debug.Print .Fields(0)
End With
With oRst
.Move 2
Debug.Print .Fields(0)
End With
End Sub
Function CloneRecordset(oRst As Recordset) As Recordset
On Error GoTo ErrHandler
If oRst Is Nothing Then Exit Function
Dim oStream As Stream
Set oStream = New Stream
oRst.Save oStream
Set CloneRecordset = New Recordset
CloneRecordset.Open oStream
Set oStream = Nothing
Exit Function
ErrHandler:
Set CloneRecordset = Nothing
Set oStream = Nothing
End Function
flyingZFX
2004-05-12
打赏
举报
回复
那怎么做呀?
pigpag
2004-05-12
打赏
举报
回复
//对对象使用ByVal是没有用的,ByVal只是把对象引用次数加了个1
想要有ByVal的效果,一定要自己New一个新的实例,然后把属性都搬过去才行。注意,搬属性的时候不能Set,否则前功尽弃 :)
supergreenbean
2004-05-11
打赏
举报
回复
对对象使用ByVal是没有用的,ByVal只是把对象引用次数加了个1
vbs(asp)
ByVal
ByRef函数调用使用说明
ByVal
传送参数内存的一个拷贝给被调用者。也就是说,栈
中
压入的直接就是所传的值。 ByRef 传送参数内存的实际地址给被调用者。也就是说,栈
中
压入的是实际内容的地址。被调用者可以直接更改该地址
中
的内容。
VB使用URLDownloadToFile下载文件实例
这是一个用VB写的带回调函数的URLDownloadToFile下载源代码。
VB 鼠标、键盘 HOOK
VB 鼠标、键盘 HOOK VB 鼠标、键盘 HOOK
实现对WORD文件进行电子签章的核心程序,并支持图片输出
实现对WORD文件进行电子签章的核心程序,仅供参考。重点介绍两个方法: 1、方法:设置虚拟打印机名称 函数原型:Public Sub SetPrinterName(
ByVal
sPrinterName As String) 参数说明:sPrinterName: 虚拟打印机名称 2、函数:对WORD文件进行电子签章,并支持将签章后的文件输出成图片。 函数原型:Public Function SignSeal(
ByVal
sFileName As String,
ByVal
sSealFile As String,
ByVal
strPassword As String, _
ByVal
sBookmark As String, Optional
ByVal
sOutFile As String = "-1", Optional
ByVal
iTimeout As Integer) As Integer 参数说明:sFileName--需签章的word文件;sSealFile--电子印章文件;strPassword--签章密码;sBookmark--签章书签名;sOutFile--输出图片文件名;iTimeout--超时时间 参数特别说明:sOutFile--输出图片文件名 为可选参数,如未使用该参数,将不输出图片文件 函数返回值:0--签章成功;1--意外错误;2--未找到需要签章的word 文件;3--未找到电子印章文件;4-- 签章书签不存在;5--签章密码错误;6--执行超时 本程序采用VB编译完是一个OCX控件,调用前请注意注册,如有什么
问题
请在此提出。
PB FTP实现方法
PB FTP实现方法 PB FTP实现方法 PB FTP实现方法 PB FTP实现方法
非技术类
743
社区成员
26,906
社区内容
发帖
与我相关
我的任务
非技术类
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
复制链接
扫一扫
分享
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章