我写了如下代码,那条sql语句始终查询不出记录,而实际上数据库表中是有相应记录的。我把代码放在其他地方就可以查询出记录。
Public Function DirQueryByDirID(dirid As Long) As ADODB.Recordset
    Dim rs As New Recordset
    Dim sql As String
    
    sql = "select dirid, dirname, dirpath from mm_dir where dirid = " & CStr(dirid)
    rs.Open sql, LmsPub.GetConnection, adOpenStatic, adLockReadOnly
    Set DirQueryByDirID = rs
End Function

解决方案 »

  1.   

    sql = "select dirid, dirname, dirpath from mm_dir where dirid = '" & CStr(dirid)& &"'
    if rs.state=adstateopen then rs.close
    rs.open sql,lmspub.getconnection,adopenkeyset,adlockreadonly
      

  2.   

    对于字符串在Sql中进行操作时别忘了加上''
      

  3.   

    你的查询语句有问题如果你的dirid字段为数字类型则改为
    sql = "select dirid, dirname, dirpath from mm_dir where dirid = " & dirid & ""
    如果你的dirid字段为字符类型则改为
    sql = "select dirid, dirname, dirpath from mm_dir where dirid = '" & dirid & "'"
      

  4.   

    dirid是数字型的字段。
    我照Leftie(左手)的改了下还是不行的。 
    我觉得好象是open时出错了,可是没有任何提示信息。
      

  5.   

    照 SoHo_Andy(冰)说的改成
    sql = "select dirid, dirname, dirpath from mm_dir where dirid = " & dirid & ""
    一样不行。
    我这段代码随便拷到其他的按纽代码中去就可以得出我预想的结果。
      

  6.   

    在连接时设定的游标对ADO有一定影响,我原来好象也出现过这种事情,重设一下游标就好了,你试试!
      

  7.   

    Leftie(左手)的是查询字符的,你试试我的
    sql = "select dirid, dirname, dirpath from mm_dir where dirid = " & dirid & ""
    看看再说
      

  8.   

    LmsPub.GetConnection
    调用Connection对象是否有问题?
      

  9.   

    有可能是访问不到你的connection对象
      

  10.   

    ok,我原来一直关注rs.RecordCount属性,因为一直是-1,我以为没有取出来,用msgbox试了一下其实查询出记录了。不过奇怪为什么rs.RecordCount是-1?
      

  11.   

    RecordCount 属性
          指示  Recordset 对象中记录的当前数目。返回值返回长整型值。说明使用 RecordCount 属性可确定 Recordset 对象中记录的数目。ADO 无法确定记录数时,或者如果提供者或游标类型不支持 RecordCount,则该属性返回 –1。读已关闭的 Recordset 上的 RecordCount 属性将产生错误。如果 Recordset 对象支持近似定位或书签(即 Supports (adApproxPosition) 或 Supports (adBook) 各自返回 True),不管是否完全填充该值,该值将为 Recordset 中记录的精确数目。如果 Recordset 对象不支持近似定位,该属性可能由于必须对所有记录进行检索和计数以返回精确 RecordCount 值而严重消耗资源。Recordset 对象的游标类型会影响是否能够确定记录的数目。对仅向前游标,RecordCount 属性将返回 -1,对静态或键集游标返回实际计数,对动态游标取决于数据源返回 -1 或实际计数。
      

  12.   

    我的数据库是oracle,难道不支持么?
      

  13.   

    这个原因不清楚,但是我也遇到过有这样的问题所以我在程序中都是这样使用
    if not rs.EOF and not rs.BOF then
       '查询到记录
    end if刚才注意力没放到这上面,呵呵
      

  14.   

    sql = "select dirid, dirname, dirpath from mm_dir where dirid = " & CStr(dirid)
        rs.cursorlocation = aduseclient
        rs.open sql,lmspub.getconnection,adopenkeyset,adlockreadonly