社区
非技术类
帖子详情
关于函数参数中byval的问题
realmayer7903
2004-05-11 10:47:20
我写了一个函数
原型如下
abc(byval rs as adodb.recordset)
原打算递归使用解决问题
但是在实际使用中发现
当rs中的游标发生变化时,传递到递归展开的函数中的rs的副本的游标居然也发生了改变,而且如果中使rs副本的游标变化后,原rs的游标也发生了相应变化,这也就意味着所有的rs及其副本使用同一个游标,这样也失去了我使用byval传递参数的本意.
是不是byval在传递对象时失效呢?
不知道谁能给我解释解释?
...全文
181
10
打赏
收藏
关于函数参数中byval的问题
我写了一个函数 原型如下 abc(byval rs as adodb.recordset) 原打算递归使用解决问题 但是在实际使用中发现 当rs中的游标发生变化时,传递到递归展开的函数中的rs的副本的游标居然也发生了改变,而且如果中使rs副本的游标变化后,原rs的游标也发生了相应变化,这也就意味着所有的rs及其副本使用同一个游标,这样也失去了我使用byval传递参数的本意. 是不是byval在传递对象时失效呢? 不知道谁能给我解释解释?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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 传送参数内存的实际地址给被调用者。也就是说,栈
中
压入的是实际内容的地址。被调用者可以直接更改该地址
中
的内容。
windows api函数
windows api函数查看,c,vb 添加模块。
VB版的api函数集合及用法
用VB的朋友请进 本压缩文件写的是关于API的函数全集,包括用法都在里面了 下面举例吧: PostMessage, PostMessageBynum, PostMessageBystring VB声明 Declare Function PostMessage& Lib "user32" Alias "PostMessageA" (
ByVal
hwnd As Long,
ByVal
wMsg As Long,
ByVal
wParam As Long, lParam As Any) Declare Function PostMessageByNum& Lib "user32" Alias "PostMessageA" (
ByVal
hwnd As Long,
ByVal
wMsg As Long,
ByVal
wParam As Long,
ByVal
lParam As Long) Declare Function PostMessageByString& Lib "user32" Alias "PostMessageA" (
ByVal
hwnd As Long,
ByVal
wMsg As Long,
ByVal
wParam As Long,
ByVal
lParam As String) 说明 将一条消息投递到指定窗口的消息队列。投递的消息会在Windows事件处理过程
中
得到处理。在那个时候,会随同投递的消息调用指定窗口的窗口函数。特别适合那些不需要立即处理的窗口消息的发送 返回值 Long,如消息投递成功,则返回TRUE(非零)。会设置GetLastError 参数表 参数 类型及说明 hwnd Long,接收消息的那个窗口的句柄。如设为HWND_BROADCAST,表示投递给系统
中
的所有顶级窗口。如设为零,表示投递一条线程消息(参考PostThreadMessage) wMsg Long,消息标识符 wParam Long,具体由消息决定 lParam Any,具体由消息决定
VB 实现读写内存教程
VB读写内存。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
VB使用URLDownloadToFile下载文件实例
这是一个用VB写的带回调函数的URLDownloadToFile下载源代码。
非技术类
743
社区成员
26,912
社区内容
发帖
与我相关
我的任务
非技术类
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
复制链接
扫一扫
分享
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章