关于记录集的疑惑,帮帮忙!

rexyudl 2004-01-09 02:28:56
If Not (RsIn.EOF And RsIn.BOF) Then
Do While Not RsIn.EOF
If RsIn!trackno = StrTrackno Then
RsIn.Delete
Else
i = i + 1
RsIn!no = i

End If
RsIn.MoveNext
Loop
RsIn.Update
End If
现在这DO LOOP循环是个死循环!!!
...全文
42 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
AresChen 2004-01-09
  • 打赏
  • 举报
回复
把update写到delete和赋值的里面,不要放在外面。
rexyudl 2004-01-09
  • 打赏
  • 举报
回复
我换了种写法搞定了啊!
但我还是想研究一下这是为什么!!!!
Public Function FG_Stocko(StrTrackno As String) As Boolean
Dim StrSql As String
Dim Rs As New ADODB.Recordset
Dim Rsout As New ADODB.Recordset
Dim i As Integer

On Error GoTo errdo:

StrSql = "SELECT * FROM t_mmstockout WHERE trackno='" & Trim(StrTrackno) & " '"
If Rs.state = adStateOpen Then Rs.Close
Rs.Open StrSql, Conn, adOpenKeyset, adLockPessimistic
If Not (Rs.BOF And Rs.EOF) Then
Do While Not Rs.EOF

StrSql = "SELECT * FROM t_mmstockout WHERE drawingnumber='" & Rs!drawingnumber & "'AND " & _
" workcode='" & Rs!workcode & "'AND NOTE='" & Rs!note & "'order by no"
If Rsout.state = adStateOpen Then Rsout.Close
Rsout.Open StrSql, Conn, adOpenKeyset, adLockPessimistic
If Not (Rsout.EOF And Rsout.BOF) Then
Do While Not Rsout.EOF
If Rsout!trackno = StrTrackno Then
Rsout.Delete
Else
i = i + 1
Rsout!no = i
Rsout.Update
End If
Rsout.MoveNext

Loop
End If
Rs.MoveNext
Loop
End If
FG_Stocko = True
Exit Function
errdo:
FG_Stocko = False
End Function
大家研究一下吧!我也想知道为什么!
SoHo_Andy 2004-01-09
  • 打赏
  • 举报
回复
你要不要我上面做的例子的程序和数据库,要就留个邮箱
rexyudl 2004-01-09
  • 打赏
  • 举报
回复
?rsin.RecordCount
17
但是I值已经过千了啊!
好郁闷啊!
SoHo_Andy 2004-01-09
  • 打赏
  • 举报
回复
试过了,不是死循环,没出现你说的问题

If Not (rs.EOF And rs.BOF) Then
Do While Not rs.EOF
If rs!Name = "'张三'" Then
rs.Delete
Else
i = i + 1
rs!住址 = i

End If
rs.MoveNext
Loop
rs.Update
'BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
End If

在最后的Update时候报错,因为记录集已经移动到了EOF
而且数据更新了很多条,需要使用rs.UpdateBatch才行



修改后运行通过,且数据库删除及写入成功,全部代码如下
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Private Sub Form_Load()
If cn.State = 1 Then
cn.Close
End If
cn.CursorLocation = adUseClient
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db1.mdb"
Text1.Text = ""

Dim strSQl As String
Dim i As Integer
strSQl = "select * from students "
rs.Open strSQl, cn, adOpenDynamic, adLockOptimistic

If Not (rs.EOF And rs.BOF) Then
Do While Not rs.EOF
If rs!Name = "张三" Then
rs.Delete
Else
i = i + 1
rs!住址 = i

End If
rs.MoveNext
Loop
rs.UpdateBatch
End If

End Sub

rexyudl 2004-01-09
  • 打赏
  • 举报
回复
请各位星星,帮帮忙啊!
偶怀疑是不跟记录集指针有关系啊?
cslf 2004-01-09
  • 打赏
  • 举报
回复
好象没什么问题,你把if ... end if里简化,用f8 调试看看。

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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