为什么DO WHILE NOT RS.EOF成了死循环

maq2000 2007-12-06 10:48:29
Private Sub Form_Load()
Dim strsql, strdsn As String
Dim conn As New ADODB.Connection
Set conn = New ADODB.Connection
strsql = "select * from cd_table"
strdsn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db1.mdb;Persist Security Info=False"
conn.Open strdsn
Dim rs As New ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open strsql, conn, 1, 3
Do While Not rs.BOF
rs.MoveFirst
Loop
Do While Not rs.EOF
rs.MoveNext
Loop
End Sub
怎么这样成了死循环啊??
...全文
953 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
VlaobailaoheiV 2009-03-02
  • 打赏
  • 举报
回复
受教了
whoo529 2008-07-31
  • 打赏
  • 举报
回复
up
toury 2007-12-06
  • 打赏
  • 举报
回复
把13楼的strdsn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=f:\mysite\db1.mdb"
改回去:strdsn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db1.mdb";

我测试后忘记改了
vbman2003 2007-12-06
  • 打赏
  • 举报
回复
我晕死,看来我真是老眼昏花了.............
^_^
toury 2007-12-06
  • 打赏
  • 举报
回复

Private Sub Form_Load()
Dim i%, strsql$, strdsn$ ' As String
Dim conn As New ADODB.Connection, rs As New ADODB.Recordset

strdsn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=f:\mysite\db1.mdb"
conn.Open strdsn
strsql = "select * from cd_table"
rs.Open strsql, conn, 1, 3

If Not rs.EOF Then rs.MoveLast

Do While Not rs.BOF
i = i + 1
Debug.Print i, "MoveFirst"
''''''''''''''''''rs.MoveFirst '你永远移动到第一条记录,当然死循环!
rs.MovePrevious
Loop

i = 0

Do While Not rs.EOF
i = i + 1
Debug.Print i, "MoveNext"

rs.MoveNext
Loop
rs.Close: Set rs = Nothing
conn.Close: Set conn = Nothing
End Sub

maq2000 2007-12-06
  • 打赏
  • 举报
回复
但我这个怎么成了死循环啊??
和这个实例化有关吗
toury 2007-12-06
  • 打赏
  • 举报
回复
10楼说的不严谨;
创建记录集的两个方式:
1): Dim rs As New ADODB.Recordset '声明并经实例化
2):
Dim rs As ADODB.Recordset '声明
set rs=New ADODB.Recordset '实例化
toury 2007-12-06
  • 打赏
  • 举报
回复
知其然还要知其所以然
声明记录集的两个方式:
1): Dim rs As New ADODB.Recordset '已经实例化
2):
Dim rs As ADODB.Recordset '未实例化
set rs=New ADODB.Recordset '实例化
maq2000 2007-12-06
  • 打赏
  • 举报
回复
Dim rs As New ADODB.Recordset
''''''''''''''Set rs = New ADODB.Recordset 多此一举
这个是什么意思??
都是这样写的啊!!
Tiger_Zhao 2007-12-06
  • 打赏
  • 举报
回复
Do While Not rs.BOF 'BOF的表示移到了第一条的前面
rs.MoveFirst '移到第一条,这么可能到达BOF
Loop '整个循环属于无用代码,可删除之
toury 2007-12-06
  • 打赏
  • 举报
回复
Dim rs As New ADODB.Recordset
''''''''''''''Set rs = New ADODB.Recordset 多此一举
vbman2003 2007-12-06
  • 打赏
  • 举报
回复
哦,看错了
8好意思.........
vbman2003 2007-12-06
  • 打赏
  • 举报
回复
你的代码中有:
Do While Not rs.BOF
rs.MoveFirst '<--------这个不死才怪
Loop
maq2000 2007-12-06
  • 打赏
  • 举报
回复
for i=1 to rs.recordcount
rs.movenext
next i
这样还是是死循环,真晕了,是其他的地方出错了吗?
maq2000 2007-12-06
  • 打赏
  • 举报
回复
Do While Not rs.EOF
rs.MoveNext
Loop
这里为什么成了死循环
我在其他地方都可以的啊
非凡笨笨 2007-12-06
  • 打赏
  • 举报
回复
同LS~~~
饮水需思源 2007-12-06
  • 打赏
  • 举报
回复
for i=1 to rs.recordcount
rs.movenext
next i
maq2000 2007-12-06
  • 打赏
  • 举报
回复

改成
If Not rs.BOF Then rs.MoveFirst
就对了,谢谢大家
maq2000 2007-12-06
  • 打赏
  • 举报
回复
Do While Not rs.BOF
rs.MoveFirst
Loop
这个是没在第一个记录我就把他移到第一个记录啊!!怎么会死循环呢??

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧