Access2010中调用过程带call与不带call的问题
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,今天在上课,给学生讲到了access2010中过程的调用,在印象中见过的access2010的材料都提到:过程的调用call是可以省略的。可在上课时就出现的问题了!!!一、 情境再现在讲解过程的作用之
千家信息网最后更新 2025年11月07日Access2010中调用过程带call与不带call的问题
今天在上课,给学生讲到了access2010中过程的调用,在印象中见过的access2010的材料都提到:过程的调用call是可以省略的。可在上课时就出现的问题了!!!
一、 情境再现
在讲解过程的作用之一:可以减少代码的重复提高共享效率。用了下面这段代码:
Private Sub numSort() '产生20个[0,100]之间的整型随机数 Dim n(1 To 20) As Integer Dim i As Integer For i = 1 To 20 Randomize n(i) = Rnd() * 101 Next '打印排序前随机数 Dim outString As String outString = "排序前随机数:" For i = 1 To 20 outString = outString & Str(n(i)) & " " Next Debug.Print outString '排序 Dim temp As Integer Dim j As Integer For i = 1 To 20 For j = i To 20 If (n(i) > n(j)) Then temp = n(i) n(i) = n(j) n(j) = temp End If Next Next '打印排序后随机数 outString = "排序后随机数:" For i = 1 To 20 outString = outString & Str(n(i)) & " " Next Debug.Print outStringEnd Sub例题的目的是:产生20个随机数存于数组,数组打印出来,对20个随机数从小到大排序,数组再打印出来。
这里面用到了两次的数组打印,两段代码有共同性,可以提练成一个过程从而减少代码、提高代码复用率。于是在课堂上开始给学生修改代码了(原本以为是简单的事,事前没有先验证,结果笑话了….@~)。修改后的代码如下:
Private Sub numSort() '产生20个[0,100]之间的整型随机数 Dim n(1 To 20) As Integer Dim i As Integer For i = 1 To 20 Randomize n(i) = Rnd() * 101 Next '打印排序前随机数 printArr("排序前的随机数:",n) '排序 Dim temp As Integer Dim j As Integer For i = 1 To 20 For j = i To 20 If (n(i) > n(j)) Then temp = n(i) n(i) = n(j) n(j) = temp End If Next Next '打印排序后随机数End SubPrivate Sub printArr(s As String, k() As Integer) Dim outString As String outString = s Dim i As Integer For i = LBound(k) To UBound(k) outString = outString & Str(k(i)) & " " Next Debug.Print outStringEnd Sub在定义好printArr过程,要调用时使用不带call的调用,悲剧的事情发生了,给出如下提示:
明显printArr("排序前的随机数:",n)这个语句出问题了。可是怎么看从语法上都没有问题(唉…这就是治学不严的后果,谨记,切记,以后不再范),后面试了下把call加上,改成:
Call printArr("排序前的随机数:",n)
问题解决!!!
二、 问题总结
后面又通过几个例子试了下。发现:
如果过程的参数中包含有数组的参数,则call一定要加上;
否则call可以省略。
三、 经验教训
- 作为一名教书匠,传授给学生的知识时,自己一定要谨慎验证,谨慎、谨慎、再谨慎,验证、验证、再验证,不然容易误人子弟…
- 经验主义不可取,一定谨记
另:为了代码更方便移植、更通用,上面代码可优化成(使用符号常量与使用lbound与ubound两个系统函数)Option Compare DatabasePrivate Const ARR_LOW = 1 '数组上标Private Const ARR_UPP = 20 '数组下标
Private Sub numSort()
Dim n(ARR_LOW To ARR_UPP) As Integer
Dim i As Integer
For i = LBound(n) To UBound(n)
Randomize
n(i) = Rnd() * 101
Next
'打印排序前随机数
Call printArr("排序前的随机数:", n)
'排序Dim temp As IntegerDim j As IntegerFor i = LBound(n) To UBound(n) For j = i To UBound(n) If (n(i) > n(j)) Then temp = n(i) n(i) = n(j) n(j) = temp End If NextNext'打印排序后随机数Call printArr("排序后的随机数:", n)End Sub
随机数
排序
代码
数组
过程
问题
验证
学生
之间
参数
经验
不严
明显
误人子弟
从小到大
上标
下标
两个
主义
事情
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
初级软件开发工程师简历
软件开发时期 需求分析
软件开发需求不明确
校园网络安全教育知识竞赛
电信网络安全百度百科
计算机网络技术工程师怎么考
山南市网络安全进校园
美国十大互联网科技公司
魂师对决五一开几个新服务器
软件开发可以学哪些专业
分布式数据库是大数据技术吗
写入性能最快的数据库
社区到居民家宣传网络安全信息
网络安全法规定哪些安全服务
软件开发需要英语吗6
网络技术带来的社会变革
资深软件开发平台
恶作剧手机软件开发
java程序员转行网络安全
装配式网络技术有哪些
本特利铃声软件开发
新形势下公安机关网络安全
HANA数据库中SUM方法
网络安全 合理化建议
中央网络安全小组是
杭州运营网络技术咨询热线
海门市开网络安全会议
北京酷容网络技术有限公司
小学生网络安全教育试题
泾县巨型软件开发服务代理品牌