if rs.reocrdcount>0 then if rs.bof then rs.movenext endif if rs.eof then rs.MovePrevious endif endif
我没有用ado控件的 是直接程序连接sql
combo1_change() ado.reordset.movefirst ado.refresh do while ADO.recordset.item(0).value<>combo1.text ado.recordset.movenext loop end sub
关于bof ,eof时,请在移动recordset前检查 private command1_click() if eof() or bof() then msgbox "At the Eof or Bof" exit sub endif rs.movefirst(next,last....) end sub
Dim asSql As String asSql = "SELECT sam_name,sam_unit,sam_length,sam_width,sam_height,sam_unit FROM sample where sam_code='" & Trim(txtAddCode.Text) & "'" Arst.Open asSql, adoConn txtAddName.Text = Arst("sam_name") txtAddUnit.Text = Arst("sam_unit") aL = Arst("sam_length") aW = Arst("sam_width") aH = Arst("sam_height") Arst.Close Set Arst = Nothing用SQL吧,这是我刚编的一个程序里类是这种情况的代码。
不过最好不要用控件和Data 控件一捆绑起来用,灵活大打Zhe扣
if rs.bof then
rs.movenext
endif
if rs.eof then
rs.MovePrevious
endif
endif
是直接程序连接sql
ado.reordset.movefirst
ado.refresh
do while ADO.recordset.item(0).value<>combo1.text
ado.recordset.movenext
loop
end sub
private command1_click()
if eof() or bof() then
msgbox "At the Eof or Bof"
exit sub
endif
rs.movefirst(next,last....)
end sub
这样做当数据库很大的时候会不会很慢呀?
还有其他方法吗?
请问eof(),bof()的值是随时更新的吗?
我好像试过监视eof的值,一直都是false,但程序还是出现eof错误,why?
asSql = "SELECT sam_name,sam_unit,sam_length,sam_width,sam_height,sam_unit FROM sample where sam_code='" & Trim(txtAddCode.Text) & "'"
Arst.Open asSql, adoConn
txtAddName.Text = Arst("sam_name")
txtAddUnit.Text = Arst("sam_unit")
aL = Arst("sam_length")
aW = Arst("sam_width")
aH = Arst("sam_height")
Arst.Close Set Arst = Nothing用SQL吧,这是我刚编的一个程序里类是这种情况的代码。
其实按照这个思路也可以改进.
譬如你可以编一个函数用来进行折半算法来查找所要的记录.还有在数据库里面建索影.
还有要么更简单,如果你的combo不是按照字母顺序的话,combo里面的顺序就是数据库里面记录的顺序.所以你只要获取combobox.listindex+1,它就是记录的位置,然后ADO.Movecombobox.listindex+1 , 0 就可以了.绝对简单明了.
方法多的很.其实你自己试试可能回更有收获