谢谢!!时间匆忙,有不明白请提出。
问题:用ado.recordset 的 updatebatch 保存修改时出错,提示无法为更新定位行,一些值可能在最后一次已更改。'aSet.Open sql, gCN, adOpenStatic, adLockBatchOptimistic 程序已经打开纪录集Private Sub cmdSave_Click()
On Error GoTo errHandle If aSet Is Nothing Or bSet Is Nothing Then
Exit Sub
End If
If aSet.State = 0 Then
Exit Sub
End If If MsgBox("Save?", vbYesNo) = vbNo Then
Exit Sub
End If ConnectDB gCN, EDI_REGION Set grid1.DataSource = Nothing gCN.BeginTrans
Set aSet.ActiveConnection = gCN If aSet.RecordCount > 0 Then
aSet.MoveFirst
Do While Not aSet.EOF
aSet(7).Value = aSet(5).Value - aSet(6).Value
aSet.MoveNext
Loop
End If
aSet.UpdateBatch adAffectAll '程序到此总出错,提示无法为更新定位行,一些值可能在最后一次已更改。
gCN.CommitTrans
Set aSet.ActiveConnection = Nothing Set grid1.DataSource = aSet
grid1.Refresh
aSet.Requery '到此处表格控件中仍然是修改后的纪录
DisConnectDB gCN
Screen.MousePointer = vbDefault MsgBox "Save OK"
SetStatus "Save OK"
Exit Sub
errHandle:
MsgBox Err.Description
gCN.RollbackTrans
SetStatus Err.Description
Set aSet.ActiveConnection = Nothing
DisConnectDB gCN
End Sub
问题:用ado.recordset 的 updatebatch 保存修改时出错,提示无法为更新定位行,一些值可能在最后一次已更改。'aSet.Open sql, gCN, adOpenStatic, adLockBatchOptimistic 程序已经打开纪录集Private Sub cmdSave_Click()
On Error GoTo errHandle If aSet Is Nothing Or bSet Is Nothing Then
Exit Sub
End If
If aSet.State = 0 Then
Exit Sub
End If If MsgBox("Save?", vbYesNo) = vbNo Then
Exit Sub
End If ConnectDB gCN, EDI_REGION Set grid1.DataSource = Nothing gCN.BeginTrans
Set aSet.ActiveConnection = gCN If aSet.RecordCount > 0 Then
aSet.MoveFirst
Do While Not aSet.EOF
aSet(7).Value = aSet(5).Value - aSet(6).Value
aSet.MoveNext
Loop
End If
aSet.UpdateBatch adAffectAll '程序到此总出错,提示无法为更新定位行,一些值可能在最后一次已更改。
gCN.CommitTrans
Set aSet.ActiveConnection = Nothing Set grid1.DataSource = aSet
grid1.Refresh
aSet.Requery '到此处表格控件中仍然是修改后的纪录
DisConnectDB gCN
Screen.MousePointer = vbDefault MsgBox "Save OK"
SetStatus "Save OK"
Exit Sub
errHandle:
MsgBox Err.Description
gCN.RollbackTrans
SetStatus Err.Description
Set aSet.ActiveConnection = Nothing
DisConnectDB gCN
End Sub
把这一句aSet.UpdateBatch adAffectAll放到循环里面去看看?
aSet(7).Value = aSet(5).Value - aSet(6).Value
aSet.MoveNext
aset.update '记得以前这样做过,楼主试一下
LoopaSet(7).Value ??是一个同名数组?
而且记录集什么也没做啊
adUseClient 设置了吗?
Private Rstn As New ADODB.RecordsetPrivate Sub Command1_Click()
If Rstn.RecordCount > 0 Then
Rstn.MoveFirst
Do While Not Rstn.EOF
Rstn(2).Value = Rstn(1).Value - Rstn(0).Value
'Rstn.Update
Rstn.MoveNext
'Rstn.UpdateBatch adAffectAll
Loop
End IfRstn.UpdateBatch adAffectAll
End Sub Private Sub Command2_Click()
Conn.Execute "Alter Table aa Drop DD"
Conn.Execute "Alter Table aa Add DD long null"
Rstn.Requery
End SubPrivate Sub Form_Load()
Conn.CursorLocation = adUseClient
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=f:\db.mdb;User ID=admin;Password=;Jet OLEDB:Database Password="
Rstn.Open "Select * From aa", Conn, adOpenStatic, adLockBatchOptimistic
End Sub
你的代码没有问题我是用上面的代码试的如果你在批更新后又删除了,然后再想批更新的话请你用 Rstn.Requery 刷新一下记录集再进行批更新,就不会出现这个错误了在
Rstn.UpdateBatch adAffectAll 前加上 Rstn.Requery
也可把 Rstn.UpdateBatch adAffectAll 改成 Rst.UpdateBatch adAffectAllChapters 试试
aSet.UpdateBatch adAffectAll