1,每次都检查,减慢速度是肯定的。它说的是有道理的,但具体是不是能有33%的速度提升,就不敢说了;
2,先movelast然后movefirst是可以确保读出的recordcount是正确值,如果不这样直接取recordcount的值,经常会莫名其妙的返回-1;
3,可以成功,刚刚测试过,我以前也不这么用,也不知道该注意什么。

解决方案 »

  1.   

    1、对33%表示怀疑,recordset.eof是一个属性,属性的调用可能只是一个附值语句,也可能是一个复杂的函数,但不会用33%这么多吧,FOR 语句也需要附值和判断的。
    2、没有必要先movelast,这么用有点本末倒置,如果设置好游标属性,不会出现recordcount不正确的情况。
    3、字段名用了Full Name,有空格,那就只好这么用了,如果是我,我宁可把字段名改为Full_Name,以免不必要的麻烦。
      

  2.   

    但是我的试着他所说的做。但是运行到
    recordset.movelast时,就报错了,说运行时错误,说“行集不支持反向取”;
    这是为什么?
      

  3.   

    代码如下:Dim icount, i As Integer
        Dim conn As New ADODB.Connection
        Dim cmd As New ADODB.Command
        Dim rst As New ADODB.Recordset    
        With conn
            .ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=pubs;Data Source=myserver"
            .Mode = adModeRead
            .Open
        End With
        With cmd
            .ActiveConnection = conn
            .CommandType = adCmdText
            .CommandText = "select * from sales"
            Set rst = .Execute
        End With
        rst.MoveLast
        icount = rst.RecordCount
        rst.MoveFirst
        For i = 1 To icount
        Combo1.AddItem rst!ord_date
        rst.MoveNext
        Next i
        rst.Close
        conn.Close
        Set rst = Nothing
        Set conn = Nothing
      

  4.   

    但是我的试着他所说的做。但是运行到
    recordset.movelast时,就报错了,说运行时错误,说“行集不支持反向取”;
    这是为什么?
    你用的是什么类型recordset呀
    如果使用rs.open sql,conn,是无法使用movelast的
    recordcount也不支持的,返回的是-1就是表示不支持,
    使用rs.open sql,conn,1,1
    和rs.open sql,conn,3,1看看找一下,ado的帮助有具体的说明的