Access2010中调用过程带call与不带call的问题
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,今天在上课,给学生讲到了access2010中过程的调用,在印象中见过的access2010的材料都提到:过程的调用call是可以省略的。可在上课时就出现的问题了!!!一、 情境再现在讲解过程的作用之
千家信息网最后更新 2026年10月31日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安全错误
数据库的锁怎样保障安全
咖啡
互联网络科技
互联网属科技
互联网中国科技
重庆互联网络科技
互联网科技战争
中国 科技 互联网
北京互联网络科技有限公司
天下捷融互联网科技
火传媒上海互联网科技
互联网金融和金融科技
央行互联网金融科技公司
江阴互联网智能科技产品进口
互联网科技人工智能实验室
互联网公司属于科技吗
科技互联网公司两年变化
互联网科技对化妆品行业
科技互联网专业工作会议发言稿
长沙易易互联网科技有限公司
上海互联网科技园景观
咖啡豆
南京欣网互联网络科技
佩信高科技互联网
黑科技闪耀互联网之光
互联网科技革命什么开始
山东有哪些互联网科技公司
宁波跨境商互联网科技有限公司
互联网科技品牌
互联网科技自媒体灵感
每日互联网科技新闻