'以下是调出数据库 F:\SWDD.mdb 中 1952-1996 年每个月的数值,并打算用数组 ZptData 作为返回值 的子程序GetData(ZptData)Public Sub GetData(ZptData)
  Dim cnn As New ADODB.Connection
  Dim rs As New ADODB.Recordset
  Dim strCnn As String
  Dim SqlStr As String
  Dim i, j, n As Integer
  
  n = 0
  strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\SWDD.mdb;Persist Security Info=False"
  Set cnn = New ADODB.Connection
  For i = 1952 To 1996
    ' Zpt 是 F:\SWDD.mdb 中的一个表名。
    SqlStr = "Select * from Zpt Where DataYear =" + Str(i)
    cnn.Open strCnn
    rs.Open SqlStr, cnn, adOpenForwardOnly, adLockReadOnly
    For j = 1 To 12
      n = n + 1
      ZptData(n) = rs.Fields(j)  
    Next j
    cnn.Close
  Next i
End Sub这是主程序调用过程:Dim abd As SingleDim ZptData() As SingleReDim ZptData(1 To 540)
GetData (ZptData)但执行完 GetData (ZptData) 后,数组 ZptData 仍然全是零,即没有被赋值。这是怎么回事?正确的该怎么调用和返回?另外,假如我要把子程序 GetData 改成函数形式,即我想这样调用:ZptData=GetData(),返回值是一个数组,请问该怎么声明和调用?

解决方案 »

  1.   

    Public Sub GetData(ZptData)
      Dim cnn As New ADODB.Connection
      Dim rs As New ADODB.Recordset
      Dim strCnn As String
      Dim SqlStr As String
      Dim i, j, n As Integer
      
      n = 0
      strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\SWDD.mdb;Persist Security Info=False"
      Set cnn = New ADODB.Connection
      cnn.Open strCnn
      For i = 1952 To 1996
        ' Zpt 是 F:\SWDD.mdb 中的一个表名。
        SqlStr = "Select * from Zpt Where DataYear =" format(i) "
            rs.Open SqlStr, cnn, adOpenForwardOnly, adLockReadOnly
        For j = 1 To 12
          n = n + 1
          ZptData(n) = rs.Fields(j)  
        Next j
        rs.Close
      Next i
    End Sub