用VB连接ACCESS后使用SQL查询,得到记录集rs1,在将rs1的记录输出时,使用了下面的语句.不知为何,只能输出前面两条记录(不管应该匹配的记录条是多少条).是不是我的输出方式有问题呢? 
If Not rs1.EOF Then
   For i = 0 To rs1.RecordCount
     List1.AddItem rs1.Fields.Item("编号")
     rs1.MoveNext
   Next
 Else
     List1.AddItem "没有找到您要检索的项,请输入其他检索条件!"
     List1.Refresh
 End If

解决方案 »

  1.   

    首先你的SQL语句要正确。
    while not rs.eof
        List1.AddItem rs1!编号
        rs1.MoveNext
    wend
      

  2.   

    你的方法用到了RecordCount,所以要用客户端记录集set rs = new adodb.recordset
    rs.cursorlocation = aduseclient   '加上这句应该就没问题了
      

  3.   

    set rs = new adodb.recordset
    rs.cursorlocation = aduseclient 
    这个加上去了也没用,还是原来的结果.
    set rs = new adodb.recordset
    这个在查询之前就已经建立了,cursorlocation 这个在自动输出里找不到.是一个什么样的属性\事件\方法?
      

  4.   

    你把代码改一改:
    If rs1.recordcount>=0 Then
       rs1.movefirst
       do while rs1.eof=false
         List1.AddItem rs1.Fields.Item("编号")
         rs1.MoveNext
       Next
     Else
         List1.AddItem "没有找到您要检索的项,请输入其他检索条件!"
         List1.Refresh
     End If
      

  5.   

    If Not rs1.EOF Then
       For i = 0 To rs1.RecordCount - 1      '如果I从0开始,这里应该减1
         List1.AddItem rs1.Fields("编号")    '<----偶一般这样写
         rs1.MoveNext
       Next
     Else
         List1.AddItem "没有找到您要检索的项,请输入其他检索条件!"
         List1.Refresh
     End If
      

  6.   

    断点调试:看下list1.additem执行了几次?
      

  7.   

    set rs = new adodb.recordset
    这个在查询之前就已经建立了,cursorlocation 这个在自动输出里找不到.是一个什么样的属性\事件\方法?
    ************************************************************
    你是用ADO吗?摘录一段:
    CursorLocation 属性 (ADO)
            
    设置或返回游标引擎的位置。设置和返回值设置或返回可设置为以下某个常量的长整型值。常量 说明 
    adUseNone   没有使用游标服务。(该常量已过时并且只为了向后兼容才出现)。 
    adUseClient 使用由本地游标库提供的客户端游标。本地游标引擎通常允许使用的
                许多功能可能是驱动程序提供的游标无法使用的,因此使用该设置对
                于那些将要启用的功能是有好处的。adUseClientBatch 与 adUseClient 
                同义,也支持向后兼容性。 
    adUseServer 默认值。使用数据提供者或驱动程序提供的游标。这些游标有时非
                常灵活,对于其他用户对数据源所作的更改具有额外的敏感性。但是,
                Microsoft Client Cursor Provider(如已断开关联的记录集)
                的某些功能无法由服务器端游标模拟,通过该设置将无法使用这些功能。 -----------------------------
    你试试:
    dim cn as adodb.connection
    dim rs as adodb.recordset
    dim sql as string
    dim i
    '连接数据库略......
    set rs = new adodb.recordset
    rs.cursorlocation = aduseclient   
    sql="select distinct 编号 from tb "
    rs.open sql,cn, adOpenKeyset, adLockOptimistic
    if rs.RecordCount = 0 then 
        List1.AddItem "没有找到您要检索的项,请输入其他检索条件!"
        exit sub
    end if
    For i = 1 To rs1.RecordCount
         List1.AddItem rs.Fields("编号")
         rs.MoveNext
    Next ior:
    while not rs.eof
        List1.AddItem rs!编号
        rs.MoveNext
    wendrs.close
    cn.close
      

  8.   

    while not rs.eof
        List1.AddItem rs!编号
        rs.MoveNext
    wend
      

  9.   

    不知为何,只能输出前面两条记录(不管应该匹配的记录条是多少条).
    =================
    先不要添加到list中去,先用循环debub.print rs1.Fields.Item("编号")看有没有数据
    既然前面两条记录能输出,一般不会是数据库连接的问题留意一下你的记录里有没有些特别的值,例如某些记录的“编号”字段为空或是不可打印字符之类。。