数据库程序的问题!!!麻烦大家进来看看!

hongzm 2002-03-21 11:35:22
窗体包括一个ADODC控件和一组和控件相连的文本框,一组按钮,按钮的代码是向导产生的!但现在发现如果在增加一个新纪录后(即点增加--》在文本框输入---》保存后)再立即删除,会出错提示:“无法为更新行集定位,一些值可能在最扣读取时改变”,试了很多次都不行!:)
删除的代码如下:
Private Sub cmdDelete_Click()
If MsgBox("确认要删除此条纪录吗?", 33, "注意!") = vbOK Then
On Error GoTo DeleteErr
With datPrimaryRS.Recordset
.Delete
.MoveNext
If .RecordCount < 1 Then
cmdDelete.Enabled = False
cmdedit.Enabled = False
End If
End With
End If
DeleteErr:
MsgBox Err.Description
End Sub

...全文
40 点赞 收藏 22
写回复
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongzm 2002-03-25
to:vicsue
requery是什么意思啊?
回复
hongzm 2002-03-25
TMD,是MDAC的问题,装了SP5就好象可以了,谢谢各位了!
回复
daryl715 2002-03-22
upup
回复
网络咖啡 2002-03-22
reflesh呢?
回复
hongzm 2002-03-22
加上update也不行啊,这是向导产生的代码
没有加update而用movenext是因为:
ADO的说明上说:
执行了更新后移动指针操作就会自动保存!
但现在看起来不是这样
就算UPDATE也不行
如果添加后关闭窗体,再打开就可以删除了!
这种情况该怎么解决呢???
回复
tony_jian 2002-03-22
用ADODB
回复
hongzm 2002-03-22
加上update也不行啊,这是向导产生的代码
执行了.movenext后好象数据库就会更新,这种情况该怎么解决呢???
回复
无言无忌 2002-03-22
无论用ADODC控件,还是直接用代码,在新增加一记录后须执行Requery。本人认为还是直接用代码好些。
回复
MarGo 2002-03-22
这也许是绑定的问题吧,还是用ADO CONNECTION 吧

回复
hongzm 2002-03-22
UPUPUPUPUP
回复
hongzm 2002-03-22
refresh我也试过!
删除是删除了,但是文本框的值没有清空啊!!!感觉好象还有纪录一样,
但关闭窗体再打开就清空了,!!
TO seafarer777(★ 最爱是谁 ★)
我的代码也是一样啊,只是我加了一些其他的东西,如检查权限之类,
你的代码不会出错吗??我是指正常反复操作!如添加完删除,添加完后编辑!。。。。但都是正常操作,在实际中也会应用得到!
可是这样就会出错,
连由数据向导产生的跟你的代码一样,我一行自己的代码都不写,也一样出错!
回复
newchar 2002-03-22
rs.eof ?
please try on


rs.move 0
回复
oo渣渣oo 2002-03-22
添加后删除前作个查询吧.
回复
small_haozi 2002-03-22
我也觉得应该是由于你的ADO没有刷新而造成的后果
一般没有刷新,再次操作时出问题,以前我也碰到过
回复
warbug 2002-03-22
经过测试,发现你的问题是由于,添加后没有及时对adodc进行刷新造成的,你可以参考一下代码:
Private Sub cmdAdd_Click()
With Adodc1.Recordset
.AddNew "entityname", Trim(Text1.Text)
.Update
End With
Adodc1.Refresh
End Sub

Private Sub cmdDel_Click()
With Adodc1.Recordset
.Delete
.MoveNext
End With
End Sub

这样的代码应该是没有问题,经过试验证明。最主要是经过Adodc1.Refresh后在操作就不会存在问题了。
回复
seafarer777 2002-03-22
数据源绑定使用额是连接字符串
PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=E:\db1.mdb;
回复
seafarer777 2002-03-22
Option Explicit


Private Sub Form_Unload(Cancel As Integer)
Screen.MousePointer = vbDefault
End Sub

Private Sub datPrimaryRS_Error(ByVal ErrorNumber As Long, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, fCancelDisplay As Boolean)
'错误处理程序代码置于此处
'想要忽略错误,注释掉下一行
'想要捕获它们,在此添加代码以处理它们
MsgBox "Data error event hit err:" & Description
End Sub

Private Sub frmEmployees_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'为这个 recordset 显示当前记录位置
datPrimaryRS.Caption = "Record: " & CStr(datPrimaryRS.Recordset.AbsolutePosition)
End Sub

Private Sub frmEmployees_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'验证代码置于此处
'下列动作发生时该事件被调用
Dim bCancel As Boolean

Select Case adReason
Case adRsnAddNew
Case adRsnClose
Case adRsnDelete
Case adRsnFirstChange
Case adRsnMove
Case adRsnRequery
Case adRsnResynch
Case adRsnUndoAddNew
Case adRsnUndoDelete
Case adRsnUndoUpdate
Case adRsnUpdate
End Select

If bCancel Then adStatus = adStatusCancel
End Sub

Private Sub cmdAdd_Click()
On Error GoTo AddErr
datPrimaryRS.Recordset.AddNew

Exit Sub
AddErr:
MsgBox Err.Description
End Sub

Private Sub cmdDelete_Click()
On Error GoTo DeleteErr
With datPrimaryRS.Recordset
.Delete
.MoveNext
If .EOF Then .MoveLast
End With
Exit Sub
DeleteErr:
MsgBox Err.Description
End Sub

Private Sub cmdRefresh_Click()
'只有多用户应用程序需要
On Error GoTo RefreshErr
datPrimaryRS.Refresh
Exit Sub
RefreshErr:
MsgBox Err.Description
End Sub

Private Sub cmdUpdate_Click()
On Error GoTo UpdateErr

datPrimaryRS.Recordset.UpdateBatch adAffectAll
Exit Sub
UpdateErr:
MsgBox Err.Description
End Sub

Private Sub cmdClose_Click()
Unload Me
End Sub

回复
hongzm 2002-03-22
refresh也不行,我试过很多次!!
我的表单上有添加,删除,修改,保存,取消这些功能,
而且我想问问大家用文本控件+adodc时候有没有出现这样的一些问题!!!
我就算完全用数据向导生成程序和代码
执行起来也会有错!
哪位大侠有哪怕一个最简单的例子(有上述功能的表单但操作不会出错~)
能提供给我看看吗?

回复
hongzm 2002-03-21
UPUP
回复
warbug 2002-03-21
使用记录集添加的数据记录是存放在最后一行的,如果你添加完又立刻闪出的话,.MoveNext地方应该出错,提示如你描述的一样。
另外,要根据打开方式来决定什么时候应该更新记录集,你的代码中好像没有更新记录集,这样对数据库记录是不起作用的。
回复
发动态
发帖子

1180

社区成员

VB 数据库(包含打印,安装,报表)
申请成为版主
社区公告
暂无公告