小弟编程遇到一个莫名其妙的问题:执行一个Select语句,想得到所取得的记录的个数。该语句在数据库工具(TOAD)中执行的结果是取得了一条记录,但recordset对象返回的RecordCount的值为0,那位大虾能帮我分析分析?下面是小弟实现的代码    Dim strSQL As String
    Dim rs As ADODB.Recordset    strSQL ="select field1 from table1 where condition=1"
    Set rs = CreateObject("ADODB.Recordset")
    
    rs.CursorLocation = adUseClient
    rs.CursorType = adOpenDynamic
    rs.LockType = adLockOptimistic
    rs.Source = sTmp
    rs.ActiveConnection = ""Provider=OraOLEDB.Oracle.1;Password=xxx;Persist Security Info=True;User ID=xxx;Data Source=xxx"
"
    rs.Open    得到的rs.RecordCount等于0,请各位高手指点,感激不尽。

解决方案 »

  1.   

    sorry, 有一句写错了应该是:“rs.Source=strSQL”,笔误
      

  2.   

    之后我尝试改用以下sql与句:
        strSQL="select count(field1) counter from table1 where condition=1"
    此时,rs.RecordCount的值为1,但rs.fields("counter")的值为0,晕倒!
      

  3.   

    刷新?能具体点么?
    对了,我在rs.open后面还漏了一句
    Set rs.ActiveConnection = Nothing
    如果你指的是这个,好像也没有效果:(
      

  4.   

    rs.CursorType = adOpenDynamic 这句错。用静态或键集RecordSet 或 把这句注释掉就可用adOpenDynamic的话RecordCount属性永远等于0(RecordCount属性不支持动态RecordSet)具体原因可看MSDN
      

  5.   

    改为
    rs.CursorType = adOpenKeyset(键集RecordSet)
      或  
    rs.CursorType =adOpenStatic (静态RecordSet)
      

  6.   

    md2d大虾,照你说的改了,还是不行啊
      

  7.   

    rs.movelast
    msgbox rs.reordcordcount
      

  8.   

    itlive兄,RecordCount=0的时候,也就是说rs.bof=rs.eof,
    这时候,rs.movelast好像是不能运行的吧:)
      

  9.   

    Dim conn As New ADODB.Connection
    Dim rs   As New ADODB.Recordset
    Dim strSQL As String
    conn.ConnectionString = "Provider=OraOLEDB.Oracle.1;Password=xxx;Persist Security Info=True;User ID=xxx;Data Source=xxx"
    conn.CommandTimeout = 30
    conn.Open
    strSQL = "select field1 from table1 where condition=1"
    rs.Open strSQL, conn, adOpenKeyset, adLockOptimistic
    Debug.Print rs.RecordCount
      

  10.   

    vc里边儿是这样:
    strSQL.Format("select COUNT(*) from %s",Table);
    pCommand->CommandText=(_bstr_t)strSQL;
    pCommand->CommandType=adCmdText;
    pCommand->Parameters->Refresh();
    MySet=pCommand->Execute(NULL,NULL,adCmdUnknown);
    _variant_t vIndex = (long)0;
    _variant_t vCount = MySet->GetCollect(vIndex);///取得第一个字段的值放入vCount变量
    m_ItemCount=vCount.lVal;
      

  11.   

    将rs.Source=strSQL 改为
    rs.open strSQL, conn, adOpenKeyset, adLockOptimistic
    试试
      

  12.   

    果然是莫名其妙的问题,一不小心重起了一遍机器,问题就莫名奇妙的好了:)
    不过我想md2d()的意见是正确的。其他人的想法也都不错,再次谢谢大家。