下面是程序,不知哪错了
Private Sub Command1_Click()
    Dim cdia() As Single
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strcnn As String
    strcnn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=C:\Documents and Settings\Administrator\桌面\软件\djgl.mdb;initial catalog=pubs;user id=sa;password=;"
    Set cn = New ADODB.Connection
    cn.Open strcnn
    Set rs = New ADODB.Recordset
    Set DataGrid.DataSource = rs
    rs.CursorLocation = adUseClient
    rs.CursorType = adOpenKeyset
    rs.LockType = adLockOptimistic
    Set rs = cn.Execute("select * from 刀具直径")
    Do While Not rs.EOF()
        For i = 1 To rs.RecordCount
            cdia(i) = rs!直径
        Next i
    Print "cdia(" & i & ")" = cdia(i)
    Print
    Loop
    
End Sub

解决方案 »

  1.   

    Documents and Settings --> docume~1也可以把数据库放在程序所在目录下,在代码中用app.path表示程序所在目录: data source="& app.path & "\djgl.mdb"
      

  2.   

    i=0
    Do While Not rs.EOF() 
        cdia(i) = rs!直径  
        Print "cdia(" & i & ") = " cdia(i)
        i=i+1  
    Loop 
    用cn.execute方法返回的记录集是只读向前的,所以 
    rs.CursorLocation = adUseClient 
    rs.CursorType = adOpenKeyset 
    rs.LockType = adLockOptimistic
    这几行代码可以注释掉
     
      

  3.   

    i=0 
    Do While Not rs.EOF()  
        cdia(i) = rs!直径   
        Print "cdia(" & i & ") = " cdia(i) 
        i=i+1   
    Loop  
    这种方法也不行,和我的没什么区别系统提示这有错误:
    cn.Open strcnn 
    但不知道错在哪
      

  4.   

    哦,SORRY!我的代码有问题,应该:i=0 
    Do While Not rs.EOF()  
        cdia(i) = rs!直径   
        Print "cdia(" & i & ") = " cdia(i)
        rs.movenext 
        i=i+1   
    Loop  不过和你的代码还是有区别的
    如果你的代码可以在FOR循环中完成,那么DO循环就没有意义了,是多余的你不能连接数据库,必一下连接字符串,类似如下:"Provider=Microsoft.Jet.OLEDB.4.0; " _
    & "Data Source=" & App.Path & "\db1.mdb; " _
    & "Persist Security Info=False;Jet OLEDB:Database Password=123"你的下面这二项肯定是不对的:
    initial catalog=pubs;user id=sa;password=;"
     
      

  5.   

    还有你既然用cn.execute方法返回数据,记录集就应该说用rs.CursorLocation = adUseServer(默认),这样效率高,这种情况下是不返回 rs.RecordCount的,所以建设你用DO循环
    如果一定要用FOR循环,那么就:
    dim RScount as integer
    cn.execute sql,RScount
    for i=0 to RScount-1
       '......
    next i
      

  6.   

        strcnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\djgl.mdb;Persist Security Info=False;Jet OLEDB:Database Password=123"
        Set cn = New ADODB.Connection
        cn.Open strcnn
        Set rs = New ADODB.Recordset
        
        rs.CursorLocation = adUseClient
        rs.CursorType = adOpenKeyset
        rs.LockType = adLockOptimistic
        rs.Open ("select * from 刀具直径")
        i = 1
        Do While Not rs.EOF()
            cdia(i) = rs!直径
            rs.MoveNext
            Print "cdia(" & i & ")="; cdia(i)
            i = i + 1
        Loop
    上面是改过的,可提示说上面红的部分有错误,“连接无法用于执行此操作,在此上下文中它可能已被关闭或无效”
      

  7.   


        strcnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\djgl.mdb;Persist Security Info=False;Jet OLEDB:Database Password=123" 
        Set cn = New ADODB.Connection 
        cn.Open strcnn 
    debug.print cn.state'看看cn是否连接上(1-连通 0-未通)
        if cn.state=0 then msgbox "没连上数据库啊"
        Set rs = New ADODB.Recordset 
         
        rs.Open "刀具直径",cn,1,1 
        i = 1 
        Do While Not rs.EOF() 
            cdia(i) = rs!直径 
            rs.MoveNext 
            Print "cdia(" & i & ")="; cdia(i) 
            i = i + 1 
        Loop 
      

  8.   

    连上了
    cdia(i) = rs!直径--->下标越界(系统提示)这个问题有这么难吗
      

  9.   

    cdia()定义了吗?    rs.Open "刀具直径",cn,1,1 
        i = 0 
        Do While Not rs.EOF() 
            cdia(i) = rs!直径 
            rs.MoveNext 
            Print "cdia(" & i & ")="; cdia(i) 
            i = i + 1 
        Loop 
      

  10.   

        Dim cdia() As Single  '刀盘直径
        Dim cn As New ADODB.Connection
        Dim rs As New ADODB.Recordset
        Dim strcnn As String
        Dim i As Integer
     i = 0 也是同样的错误
      

  11.   

        Dim cdia() As Single   '刀盘直径 
        Dim cn As ADODB.Connection 
        Dim rs As ADODB.Recordset 
        Dim strcnn As String 
        Dim i As Integer     strcnn = "Provider=Microsoft.Jet.OLEDB.4.0;" _
            &"Data Source=" & App.Path & "\djgl.mdb;" _
            &"Persist Security Info=False;" _
            &"Jet OLEDB:Database Password=123" 
        Set cn = New ADODB.Connection 
        cn.Open strcnn     Set rs = New ADODB.Recordset 
        rs.CursorLocation = adUseClient 
        rs.Open ("select * from 刀具直径"),cn, _
            adOpenKeyset, adLockOptimistic    redim cdia(rs.recordcount)  
        Do While Not rs.EOF() 
            cdia(i) = rs!直径 
             rs.MoveNext 
            Print "cdia(" & i & ")="; cdia(i) 
            i = i + 1 
        Loop 
        
        set rs = nothing
        set cn = nothing
        
      

  12.   

    Dim cdia() As Single 之后,使用前一定要redim呀
      

  13.   

    终于解决了,果然是高手,佩服
    不过do语句前还是要初始化i=1