社区
非技术类
帖子详情
关于函数参数中byval的问题
realmayer7903
2004-05-11 10:47:20
我写了一个函数
原型如下
abc(byval rs as adodb.recordset)
原打算递归使用解决问题
但是在实际使用中发现
当rs中的游标发生变化时,传递到递归展开的函数中的rs的副本的游标居然也发生了改变,而且如果中使rs副本的游标变化后,原rs的游标也发生了相应变化,这也就意味着所有的rs及其副本使用同一个游标,这样也失去了我使用byval传递参数的本意.
是不是byval在传递对象时失效呢?
不知道谁能给我解释解释?
...全文
202
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控件,调用前请注意注册,如有什么
问题
请在此提出。
vb-EnumChildWindows所有窗口及子窗口句柄
vb-EnumChildWindows所有窗口及子窗口句柄
非技术类
743
社区成员
26,905
社区内容
发帖
与我相关
我的任务
非技术类
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
复制链接
扫一扫
分享
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章