以下这句 我连续执行两次,第二次就肯定找不到记录。
Requery之后就没问题吗?
但有没有更好的办法呢?m_rAnnunciator.Find "HostID = 'XXX'", 0, adSearchForward, adBookFirst

解决方案 »

  1.   

    '描述不是很清楚,反正你不要加参数看一下搜索结果
    m_rAnnunciator.Find "HostID = 'XXX'"
    if m_rAnnunciator.eof then
        msgbox "没有找到"
    else
        msgbox "找到第一条符合记录"
    endif
      

  2.   

    不加参数可能会找不到,因为它会在当前记录开始找,而不是从第一条开始找
    我昨晚做了个小程序测,发现小程序里没有这个问题,所以问题就更奇怪了,不知道是什么因素会影响出现如下问题:
    如果我执行
    m_rAnnunciator.Find "HostID = 'XXX'", 0, adSearchForward, adBookFirst
    debug.print rAnnunciator("HostID")
    m_rAnnunciator.Find "HostID = 'XXX'", 0, adSearchForward, adBookFirst
    debug.print rAnnunciator("HostID")那么,第二次 debug.print 就会出错,错误信息是,记录已经删除或EOF,BOF为TRUE;
    而我监测EOF,第二次查找,EOF居然为TRUE
      

  3.   

    你在第二次查找之前执行m_rAnnunciator.MoveFirst。
      

  4.   

    find只从当前位置开始,要再查找整个记录,需MoveFirst
      

  5.   

    m_rAnnunciator.Movefirst
    m_rAnnunciator.Find "HostID = 'XXX'", 0, adSearchForward, adBookFirst
      

  6.   

    find效率很差的,建议自己写代码实现。
      

  7.   

    查詢時從前往后查詢就要 MoveFirst
    從后往前查就要 MoveLast
      

  8.   

    注意,你的查找方式是 adSearchForward:向前查找。Find 之后,如果找到匹配的记录,则指针移到匹配的第一条记录。否则移到 EOF 处。
    在第一种情况下,如果再次查找没有其它匹配记录,则移到 EOF 处。
      

  9.   

    你用的是向前查找的方式,再次查找肯定找不到。不推荐使用find方法,效率太差
      

  10.   

    你在第二次查找之前执行m_rAnnunciator.MoveFirst。
    我从来没有用过FIND的方法
      

  11.   

    谢谢大家回帖,但要声明几个问题
    m_rAnnunciator.Find "HostID = 'XXX'", 0, adSearchForward, adBookFirst
    这句带有,从第一条记录里面搜索,跳过0条记录和向前搜索的意思。
    而且我在之前调用movefirst也试过,但还是出错,其实自己做一个小程序测是没有问题的,但我现在在别人的一个大程序里面做改动,想不到是什么原因导致出这种问题。
    如果自己写代码当然可以,但问题是,如果自己写查找的话,每移动一次就会触发一次moveComplete和WillMove事件,那么我还要在这些事件里写判断代码,实在太麻烦了。
      

  12.   

    不能直接用sql筛选么?
    select * from tablename where HostID = 'XXX'
      

  13.   

    >我在之前调用movefirst也试过,但还是出错.什么数据库?如果是非本地的且很大,可能需要一些延时。尝试:
    cnn.CursorLocation = adUseClient
      

  14.   

    直接用sql筛选,与find哪一个更快一些?测试过没有?
      

  15.   

    m_rAnnunciator.Find "HostID = 'XXX'", 0, adSearchForward, adBookFirst
    第一次成功,第二次不成功.问题出在adBookFirst
    用m_rAnnunciator.Find "HostID = 'XXX'", 0, adSearchForward, 1
    试试
      

  16.   

    用SQL筛选跟find根本是两回事,find是移动指针,筛选是生成新的Recordset,如果你要简单的筛选不如用Filter,如果只是找一条记录,当然是用Find了
    adBookFirst 就是等于1吧,我两种都试过,因为1出错,所以才改用常数表达式,现在又莫名其妙的不出错了,真是搞不懂。
      

  17.   

    我用select * from tablename where HostID = 'XXX'
    提示出錯.select應接case.
    如果想從mydata. mytable. 中查詢"myname"字符串.
    sql 怎樣寫? 用adodc+datagrid.
      

  18.   

    adodc1.RecordSource="select * from tablename where HostID = 'XXX'"
    adodc1.refresh
    datagrid.DataSource=adodc1
      

  19.   

    楼主的记录类型是以什么形式打开的?
    有四种
    adOpenDynamic
    adOpenForwardOnly  '这种是服务器游标默认的,它只能用movenext方法来导航。
    adOpenKeyset
    adOpenStatic另外Find你写成下面这样试一试m_rAnnunciator.Find "HostID = 'XXX'", , , 1
    Msgbox "OK"此代码在我的程序中测试成功
      

  20.   

    所谓临时表当然是使用adOpenStatic

    m_rAnnunciator.Find "HostID = 'XXX'", , , 1
    跟我原来的是一样的,
    反正现在也不出问题了。只是好奇不知道是什么原因造成这种错误而已
      

  21.   

    m_rAnnunciator.refresh
    m_rAnnunciator.movelast
    m_rAnnunciator.movefirst
      

  22.   

    如果第一次查找成功,你的游标就停在当前记录,连续执行的话,就是从当前记录继续向前搜索,你可以用ado.movefirst.再执行.FIND
      

  23.   

    你注意看我使用的参数,是从第一条开始搜索,而不是从当前开始
    也看看前面的帖子。我已经试过加movefirse了
      

  24.   

    又出问题了:我Find "HostID ='0004*1020#'"
    明明数据库里没有这条记录,但EOF没有置位,而数据记录移动到第一条去了
      

  25.   

    看一下语法:
    Find 方法 (ADO)
    搜索 Recordset 中满足指定条件的记录。如果条件符合,则记录集位置设置在找到的记录上,否则位置将设置在记录集的末尾。
    语法Find (criteria, SkipRows, searchDirection, start)参数criteria   字符串,包含用于搜索的指定列名、比较操作符和值的语句。SkipRows    可选,长整型值,其默认值为零。它指定当前行或 start 书签的位移以开始搜索。searchDirection    可选的 SearchDirectionEnum 值,指定搜索应从当前行还是搜索方向上的下一个有效行开始。其值可为 adSearchForward 或 adSearchBackward。搜索停止在记录集的开始还是末尾则取决于 searchDirection 值。start    可选,变体型书签,用作搜索的开始位置。
      

  26.   

    对 这些我都知道 我有一本微软写的 ADO编程技术,就是觉得Find的这个功能怎么不稳定,希望有经验丰富的人帮忙分析。
      

  27.   

    不建议用ADO的方法,包括FIND、DELETE之类的,效率不高,因为其内部也是转换成SQL语句之后再执行的!
    所以建议用SQL语句来进行查找!!
      

  28.   

    Find 语句完全正确,你应该看看 RecordSet 是如何打开的,也许是 ForwardOnly 的