Access2010中调用过程带call与不带call的问题
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,今天在上课,给学生讲到了access2010中过程的调用,在印象中见过的access2010的材料都提到:过程的调用call是可以省略的。可在上课时就出现的问题了!!!一、 情境再现在讲解过程的作用之
千家信息网最后更新 2025年01月20日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安全错误
数据库的锁怎样保障安全
手机设置微博清除数据库
数据库两行属性可以不同吗
信息网络安全评估办法
广西中讯软件开发公司
access95数据库
澳门天心电脑软件开发有限公司
瀚堂典藏数据库怎么登录
天河app软件开发哪家好
上海星乾网络安全信息公司
六安网络安全周
数据库为什么要定义类型
免费共享网络安全吗
无锡服务器维修服务网点
南京邮电大学网络安全校区
珠海网络技术有限公司
长宁区手机软件开发中心
网络安全倡议的征文
数据库boot
怎么王者现在显示服务器未响应
网络安全渗透工程师网警
北京奶牛数据库
2021数据库工程师资料
怎么把游戏服务器时间改了
淘必中软件开发
互联网的科技应用领域
生产管理软件开发人员
网络安全辅警好吗
湛江聊天软件开发订制
收到软件开发费记什么科目
数据库原理与应用四