有一查询语句sql="select  distinct  city  from  cutsomers"  
在SQL  server  中  能够执行找到一条记录      
在程序中执行  
dim  rst  as  adodb.recordset  
rst.Open  Trim$(sql),  cnn,  adOpenKeyset,  adLockOptimistic  
也能够找到一条记录,  
但是rst.recordcount=-1  
这是为什么呢?  
请各位老大帮帮忙!  
急!  
 

解决方案 »

  1.   

    dim  rst  as  adodb.recordset  
    rst.Open  Trim$(sql),  cnn,  adOpenKeyset,  adLockOptimistic  
    '先
    rst.movelast
    '再来取
    rst.recordcount
      

  2.   

    通常人们使用以下两种方法来执行SQL语句: 
    Set Rs=Conn.Execute(SqlStr) 
    和 
    Set Rs=Server.CreateObject(“ADODB.RecordSet“) 
    Rs.Open SqlStr,Conn,CursorType,LockType (RecordSet对象方法请看这里) 
    由于默认的记录集游标是服务器游标, 
    Rs.CursorLocation = adUseServer 
    所以返回Rs.RecordCount=-1, 
    应该把服务器游标改为客户端游标, 
    Rs.CursorLocation = adUseClient 
    Rs.Open SqlStr,Conn,CursorType,LockType rs.cursortype 光标类型 recordcount 属性 
    --------------------------------------------- 
    ForwardOnly 0(默认) 返回-1 
    Keyset 1 正确的记录数 
    Dynamic 2 -1或不正确的记录数,依数据源而定 
    Static 3 正确的记录数 所以Rs.CursorLocation = 3 可用recordset.support("属性名")进行测试是否支持该属性。 http://www.dwww.cn/new/20051128112149636.html 
      

  3.   

    用客户端游标
    rs.CursorLocation = adUseClient
      

  4.   

    dim  rst  as  adodb.recordset  
    rst.Open  Trim$(sql),  cnn, adOpenKeyset, adLockReadOnly'这样写看看
    rst.recordcount
    如果还出错的话,就看看你的rst.open这里是不是有了问题
    调试一下看看
    dim  rst  as  adodb.recordset  
    Err.Clear
    rst.Open  Trim$(sql),  cnn, adOpenKeyset, adLockReadOnly'这样写看看
    If Err.Number > 0 Then
        MsgBox Err.Description
    End If
    rst.recordcount