ADO 的 Find 问题? 以下这句 我连续执行两次,第二次就肯定找不到记录。Requery之后就没问题吗?但有没有更好的办法呢?m_rAnnunciator.Find "HostID = 'XXX'", 0, adSearchForward, adBookFirst 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 '描述不是很清楚,反正你不要加参数看一下搜索结果m_rAnnunciator.Find "HostID = 'XXX'"if m_rAnnunciator.eof then msgbox "没有找到"else msgbox "找到第一条符合记录"endif 不加参数可能会找不到,因为它会在当前记录开始找,而不是从第一条开始找我昨晚做了个小程序测,发现小程序里没有这个问题,所以问题就更奇怪了,不知道是什么因素会影响出现如下问题:如果我执行m_rAnnunciator.Find "HostID = 'XXX'", 0, adSearchForward, adBookFirstdebug.print rAnnunciator("HostID")m_rAnnunciator.Find "HostID = 'XXX'", 0, adSearchForward, adBookFirstdebug.print rAnnunciator("HostID")那么,第二次 debug.print 就会出错,错误信息是,记录已经删除或EOF,BOF为TRUE;而我监测EOF,第二次查找,EOF居然为TRUE 你在第二次查找之前执行m_rAnnunciator.MoveFirst。 find只从当前位置开始,要再查找整个记录,需MoveFirst m_rAnnunciator.Movefirstm_rAnnunciator.Find "HostID = 'XXX'", 0, adSearchForward, adBookFirst find效率很差的,建议自己写代码实现。 查詢時從前往后查詢就要 MoveFirst從后往前查就要 MoveLast 注意,你的查找方式是 adSearchForward:向前查找。Find 之后,如果找到匹配的记录,则指针移到匹配的第一条记录。否则移到 EOF 处。在第一种情况下,如果再次查找没有其它匹配记录,则移到 EOF 处。 你用的是向前查找的方式,再次查找肯定找不到。不推荐使用find方法,效率太差 你在第二次查找之前执行m_rAnnunciator.MoveFirst。我从来没有用过FIND的方法 谢谢大家回帖,但要声明几个问题m_rAnnunciator.Find "HostID = 'XXX'", 0, adSearchForward, adBookFirst这句带有,从第一条记录里面搜索,跳过0条记录和向前搜索的意思。而且我在之前调用movefirst也试过,但还是出错,其实自己做一个小程序测是没有问题的,但我现在在别人的一个大程序里面做改动,想不到是什么原因导致出这种问题。如果自己写代码当然可以,但问题是,如果自己写查找的话,每移动一次就会触发一次moveComplete和WillMove事件,那么我还要在这些事件里写判断代码,实在太麻烦了。 不能直接用sql筛选么?select * from tablename where HostID = 'XXX' >我在之前调用movefirst也试过,但还是出错.什么数据库?如果是非本地的且很大,可能需要一些延时。尝试:cnn.CursorLocation = adUseClient 直接用sql筛选,与find哪一个更快一些?测试过没有? m_rAnnunciator.Find "HostID = 'XXX'", 0, adSearchForward, adBookFirst第一次成功,第二次不成功.问题出在adBookFirst用m_rAnnunciator.Find "HostID = 'XXX'", 0, adSearchForward, 1试试 用SQL筛选跟find根本是两回事,find是移动指针,筛选是生成新的Recordset,如果你要简单的筛选不如用Filter,如果只是找一条记录,当然是用Find了adBookFirst 就是等于1吧,我两种都试过,因为1出错,所以才改用常数表达式,现在又莫名其妙的不出错了,真是搞不懂。 我用select * from tablename where HostID = 'XXX'提示出錯.select應接case.如果想從mydata. mytable. 中查詢"myname"字符串.sql 怎樣寫? 用adodc+datagrid. adodc1.RecordSource="select * from tablename where HostID = 'XXX'"adodc1.refreshdatagrid.DataSource=adodc1 楼主的记录类型是以什么形式打开的?有四种adOpenDynamicadOpenForwardOnly '这种是服务器游标默认的,它只能用movenext方法来导航。adOpenKeysetadOpenStatic另外Find你写成下面这样试一试m_rAnnunciator.Find "HostID = 'XXX'", , , 1Msgbox "OK"此代码在我的程序中测试成功 所谓临时表当然是使用adOpenStatic了m_rAnnunciator.Find "HostID = 'XXX'", , , 1跟我原来的是一样的,反正现在也不出问题了。只是好奇不知道是什么原因造成这种错误而已 m_rAnnunciator.refreshm_rAnnunciator.movelastm_rAnnunciator.movefirst 如果第一次查找成功,你的游标就停在当前记录,连续执行的话,就是从当前记录继续向前搜索,你可以用ado.movefirst.再执行.FIND 你注意看我使用的参数,是从第一条开始搜索,而不是从当前开始也看看前面的帖子。我已经试过加movefirse了 又出问题了:我Find "HostID ='0004*1020#'"明明数据库里没有这条记录,但EOF没有置位,而数据记录移动到第一条去了 看一下语法:Find 方法 (ADO)搜索 Recordset 中满足指定条件的记录。如果条件符合,则记录集位置设置在找到的记录上,否则位置将设置在记录集的末尾。语法Find (criteria, SkipRows, searchDirection, start)参数criteria 字符串,包含用于搜索的指定列名、比较操作符和值的语句。SkipRows 可选,长整型值,其默认值为零。它指定当前行或 start 书签的位移以开始搜索。searchDirection 可选的 SearchDirectionEnum 值,指定搜索应从当前行还是搜索方向上的下一个有效行开始。其值可为 adSearchForward 或 adSearchBackward。搜索停止在记录集的开始还是末尾则取决于 searchDirection 值。start 可选,变体型书签,用作搜索的开始位置。 对 这些我都知道 我有一本微软写的 ADO编程技术,就是觉得Find的这个功能怎么不稳定,希望有经验丰富的人帮忙分析。 不建议用ADO的方法,包括FIND、DELETE之类的,效率不高,因为其内部也是转换成SQL语句之后再执行的!所以建议用SQL语句来进行查找!! Find 语句完全正确,你应该看看 RecordSet 是如何打开的,也许是 ForwardOnly 的 高分求解!为什么我的VB程序无法将已录入的数据保存到ACCESS数据库中??? VB 中的自动编号问题 不知如何是好! 我想问的是用VB和SQLSEVER2000编程,如何在一张表中提取数据插入另一张表? 如何在读取的文件流中加入自己的信息。 关于ListBox的两个问题 如何知道CPU的速度是多少? 哪位大哥指点一下 谢谢了 100分三层问题:后台oracle activeX控件为何不能用了? 技嘉的主板质量就是好,烧了还可以用,爽..放一百分庆祝! 如何在设计期间设置每个报表对应的纸张大小呢?
m_rAnnunciator.Find "HostID = 'XXX'"
if m_rAnnunciator.eof then
msgbox "没有找到"
else
msgbox "找到第一条符合记录"
endif
我昨晚做了个小程序测,发现小程序里没有这个问题,所以问题就更奇怪了,不知道是什么因素会影响出现如下问题:
如果我执行
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
m_rAnnunciator.Find "HostID = 'XXX'", 0, adSearchForward, adBookFirst
從后往前查就要 MoveLast
在第一种情况下,如果再次查找没有其它匹配记录,则移到 EOF 处。
我从来没有用过FIND的方法
m_rAnnunciator.Find "HostID = 'XXX'", 0, adSearchForward, adBookFirst
这句带有,从第一条记录里面搜索,跳过0条记录和向前搜索的意思。
而且我在之前调用movefirst也试过,但还是出错,其实自己做一个小程序测是没有问题的,但我现在在别人的一个大程序里面做改动,想不到是什么原因导致出这种问题。
如果自己写代码当然可以,但问题是,如果自己写查找的话,每移动一次就会触发一次moveComplete和WillMove事件,那么我还要在这些事件里写判断代码,实在太麻烦了。
select * from tablename where HostID = 'XXX'
cnn.CursorLocation = adUseClient
第一次成功,第二次不成功.问题出在adBookFirst
用m_rAnnunciator.Find "HostID = 'XXX'", 0, adSearchForward, 1
试试
adBookFirst 就是等于1吧,我两种都试过,因为1出错,所以才改用常数表达式,现在又莫名其妙的不出错了,真是搞不懂。
提示出錯.select應接case.
如果想從mydata. mytable. 中查詢"myname"字符串.
sql 怎樣寫? 用adodc+datagrid.
adodc1.refresh
datagrid.DataSource=adodc1
有四种
adOpenDynamic
adOpenForwardOnly '这种是服务器游标默认的,它只能用movenext方法来导航。
adOpenKeyset
adOpenStatic另外Find你写成下面这样试一试m_rAnnunciator.Find "HostID = 'XXX'", , , 1
Msgbox "OK"此代码在我的程序中测试成功
了
m_rAnnunciator.Find "HostID = 'XXX'", , , 1
跟我原来的是一样的,
反正现在也不出问题了。只是好奇不知道是什么原因造成这种错误而已
m_rAnnunciator.movelast
m_rAnnunciator.movefirst
也看看前面的帖子。我已经试过加movefirse了
明明数据库里没有这条记录,但EOF没有置位,而数据记录移动到第一条去了
Find 方法 (ADO)
搜索 Recordset 中满足指定条件的记录。如果条件符合,则记录集位置设置在找到的记录上,否则位置将设置在记录集的末尾。
语法Find (criteria, SkipRows, searchDirection, start)参数criteria 字符串,包含用于搜索的指定列名、比较操作符和值的语句。SkipRows 可选,长整型值,其默认值为零。它指定当前行或 start 书签的位移以开始搜索。searchDirection 可选的 SearchDirectionEnum 值,指定搜索应从当前行还是搜索方向上的下一个有效行开始。其值可为 adSearchForward 或 adSearchBackward。搜索停止在记录集的开始还是末尾则取决于 searchDirection 值。start 可选,变体型书签,用作搜索的开始位置。
所以建议用SQL语句来进行查找!!