溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Access2010中調用過程帶call與不帶call的問題

發布時間:2020-07-23 13:54:27 來源:網絡 閱讀:7088 作者:百年求索 欄目:數據庫

今天在上課,給學生講到了access2010中過程的調用,在印象中見過的access2010的材料都提到:過程的調用call是可以省略的??稍谏险n時就出現的問題了?。?!
一、 情境再現
在講解過程的作用之一:可以減少代碼的重復提高共享效率。用了下面這段代碼:

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 outString
End 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 Sub
Private 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 outString
End Sub

在定義好printArr過程,要調用時使用不帶call的調用,悲劇的事情發生了,給出如下提示:
Access2010中調用過程帶call與不帶call的問題
明顯printArr("排序前的隨機數:",n)這個語句出問題了??墒窃趺纯磸恼Z法上都沒有問題(唉…這就是治學不嚴的后果,謹記,切記,以后不再范),后面試了下把call加上,改成:
Call printArr("排序前的隨機數:",n)
問題解決?。?!
二、 問題總結
后面又通過幾個例子試了下。發現:
如果過程的參數中包含有數組的參數,則call一定要加上;
否則call可以省略。
三、 經驗教訓

  1. 作為一名教書匠,傳授給學生的知識時,自己一定要謹慎驗證,謹慎、謹慎、再謹慎,驗證、驗證、再驗證,不然容易誤人子弟…
  2. 經驗主義不可取,一定謹記
    另:為了代碼更方便移植、更通用,上面代碼可優化成(使用符號常量與使用lbound與ubound兩個系統函數)
    
    Option Compare Database
    Private 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 Integer
Dim j As Integer
For 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
    Next
Next
'打印排序后隨機數
Call printArr("排序后的隨機數:", n)

End Sub

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女