这段删除程序怎么改?

duoduo0009 2004-08-23 10:47:15
Private Sub CmdDelete_Click() '删除记录
Dim myval As String
myval = MsgBox("是否要删除该记录?", vbYesNo)
If myval = vbYes Then
Adodc1.Recordset.Delete
Adodc1.Recordset.MoveNext
If Adodc1.Recordset.EOF = True Then Adodc1.Recordset.Movelast
End If

End Sub


运行的时候如果记录集中只有一条记录时候,运行这段删除程序就出现“BOF或EOF中有一个是真,或者当前的记录已被删除,所需操作要求一个当前的记录”的报错。

我想是因为已经删除了最后一条记录了,再往下移一条记录的话,EOF就为真,这时记录集为空,如果还用到MOVELAST,就会报错,因为已经没有记录了。你们说我理解的对吗?

我应该怎么该呢?
...全文
66 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
duoduo0009 2004-08-24
上面的代码有误,改后是这样的:
Private Sub CmdDelete_Click() '删除记录
Dim myval As String
If Adodc1.Recordset.RecordCount = 0 Then
CmdDelete.Enabled = False
MsgBox "记录集为空!", vbOKOnly, 警告
Else
myval = MsgBox("是否要删除该记录?", vbYesNo)
If myval = vbYes Then
Adodc1.Recordset.Delete
Adodc1.Recordset.MoveNext

If Adodc1.Recordset.RecordCount > 0 And Adodc1.Recordset.EOF Then Adodc1.Recordset.Movefirst '返回到第一条记录
End If

End If




End Sub
回复
duoduo0009 2004-08-24
hdhai9451你错了,BOF或EOF中有一个是真并不一定是代表记录集为空,只有当两个都为真的时候才是代表记录集为空。

我想了后这样改,调试成了:

Private Sub CmdDelete_Click() '删除记录
Dim myval As String

'======这个IF判断可以避免记录集中虽然已经没有记录,可用户还是点击“删除”按钮。If Adodc1.Recordset.RecordCount = 0 Then '
CmdDelete.Enabled = False
MsgBox "记录集为空!", vbOKOnly, 警告
Else '记录集不为空的情况下就可以点击删除按钮
myval = MsgBox("是否要删除该记录?", vbYesNo)
If myval = vbYes Then '当用户确定是要删除了
Adodc1.Recordset.Delete '删除
Adodc1.Recordset.MoveNext '删除后移位到下一条记录

'如果游标已经指到了EOF且记录集不为空
If Adodc1.Recordset.RecordCount > 0 And Adodc1.Recordset.EOF Then Adodc1.Recordset.Movefirst '返回到第一条记录
End If

End If

End If

End Sub


看看大家还有什么意见吗?
回复
Andy__Huang 2004-08-24
// duoduo0009()
你不懂就不要亂發言,免得誤人子弟

If myval = vbYes Then
Adodc1.Recordset.Delete
Adodc1.Recordset.MoveNext

If Adodc1.Recordset.RecordCount > 0 And Adodc1.Recordset.EOF Then Adodc1.Recordset.Movefirst '返回到第一条记录
End If
End If
這段代碼這樣寫肯定不行,當你運行Adodc1.Recordset.Delete後,總記錄數少了一條,如果已經沒有記錄了,你再運行Adodc1.Recordset.MoveNext一定會報錯誤,所以應該是
If myval = vbYes Then
Adodc1.Recordset.Delete
If Adodc1.Recordset.RecordCount > 0 Then                    Adodc1.Recordset.Movefirst '返回到第一条记录
End If
End If

回复
duoduo0009 2004-08-24
hdhai9451(※★AC米兰☆※) 你看清楚我的代码先好不,我在删除前有一个判断记录集是否为空代码,如果记录集为空的话,删除按钮不可用:
If Adodc1.Recordset.RecordCount = 0 Then
CmdDelete.Enabled = False
MsgBox "记录集为空!", vbOKOnly, 警告
else
'否则才删除

回复
iiboy 2004-08-24
不好意思,错了,要将Adodc1.Recordset.MoveNext去掉
回复
iiboy 2004-08-24
Private Sub CmdDelete_Click() '删除记录
Dim myval As String
myval = MsgBox("是否要删除该记录?", vbYesNo)
If myval = vbYes Then
Adodc1.Recordset.Delete
Adodc1.Recordset.MoveNext
Adodc1.Refresh
end if
End Sub
回复
sssss342072 2004-08-23
Private Sub CmdDelete_Click() '删除记录
Dim myval As String
myval = MsgBox("是否要删除该记录?", vbYesNo)
If myval = vbYes Then
Adodc1.Recordset.Delete
Adodc1.Recordset.MoveNext
If Adodc1.Recordset.EOF = false Then end sub
End If

End Sub
回复
Andy__Huang 2004-08-23
因為BOF或EOF中有一个是真,也就是已經沒有記錄集了,所以不能用rs.movenext或rs.movelast
在移支指針之前應該先判斷是否有記錄集

if rs.recordcount>0 then
rs.movenext 或 rs.movelast
...................
endif
回复
相关推荐
发帖

1187

社区成员

VB 数据库(包含打印,安装,报表)
申请成为版主
帖子事件
创建了帖子
2004-08-23 10:47
社区公告
暂无公告