recordset关闭出错!

royvb 2005-04-22 04:03:38
在SQL数据库有一表单,将第一个字段设为主关键字,不允许重复.在测试时,插入一重复值,正常结果会从SQL返回一错误信息.可是我的程式有SQL返回信息后,不能关闭我打开的RECORDSET.关闭出错!
例如: 有一表单为test1,有一字段为T1,设T1为关键字段,不允许重复.我定义一RECORDSET,假设名为RST_TEST,本T1有一值为TTTT,现为测试再插一下TTTT值,在调用UPDATE时,SQL SERVER会返回一错误信息,但当我再调用RST_TEST.CLOSE方法时出错!不知该如何解决!请赐教!谢谢!

...全文
266 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
royvb 2005-05-05
  • 打赏
  • 举报
回复
仍然没有找到更佳的答案!结贴!
ALEXincn 2005-05-03
  • 打赏
  • 举报
回复
Dim rst As New ADODB.Recordset

Private Sub Form_Load()

rst.Open "tb", Adodc1.ConnectionString, adOpenStatic, adLockOptimistic, adCmdTable
On Error GoTo ErrDeal:
rst.AddNew
rst.Fields("www").Value = "22"
rst.Update
Exit Sub
ErrDeal:
rst.CancelUpdate
rst.Close
End Sub

Private Sub Form_Unload(Cancel As Integer)
if rst.State = adStateOpen then rst.Close

Set rst = Nothing

End Sub



royvb 2005-04-30
  • 打赏
  • 举报
回复
再頂一次,如果無人回答就結貼
icedut 2005-04-30
  • 打赏
  • 举报
回复
打开rs前
if rs.state then rs.close
royvb 2005-04-28
  • 打赏
  • 举报
回复
再次頂上,尋求最佳解決方法!
royvb 2005-04-26
  • 打赏
  • 举报
回复
rst.close語句放在form_unload事件中,因為我用datagrid顯示該數據表,所在退出窗體時關閉recordset.問題的實質是update出錯,所以recodset的關閉出錯!該如何解決!謝謝!
royvb 2005-04-25
  • 打赏
  • 举报
回复
Private Sub CmdSave_Click()
On Error GoTo ErrHandler
If TxtC_No.Text = "" Then
MsgBox "請輸入幣別代號!", vbInformation, "傳票系統--提示"
Exit Sub
End If

If Not L_Save Then
MsgBox "輸入的數據有錯誤!,請檢查!", vbInformation, "傳票系統--提示"
Exit Sub
End If
If L_Add Then
Rst_code.AddNew
Rst_code.Fields(0) = Trim(TxtC_No.Text)
End If
Rst_code.Fields(1) = Trim(TxtC_Nm.Text)
Rst_code.Fields(2) = Val(TxtC_Rate.Text)
Rst_code.Fields(3) = Date

Rst_code.Update '----在這里出錯誤
CmdAdd.Enabled = True
CmdEdit.Enabled = True
CmdDele.Enabled = True
CmdSave.Enabled = False
L_Add = False
Exit Sub
ErrHandler:
'Rst_code.CancelUpdate '這里顯示動作已取消的錯誤
MsgBox Err.Description
End Sub
royvb 2005-04-25
  • 打赏
  • 举报
回复
感谢 leayh(云卷云舒)的耐心回复,我的游标是的ADUSERCLENT,锁定方法是ADLOCKOPTIMISTIC.用CANCELUPDATE时出错!我等下把代码贴一段上来!
leayh 2005-04-25
  • 打赏
  • 举报
回复
但是你的rst.close语句在哪个位置?
你把cancelupdate放在错误处理语句中是没必要的,因为在Update时出现错误,操作会自动取消,所以无需显示地再执行那一句。
royvb 2005-04-25
  • 打赏
  • 举报
回复
現在看來只有打開一個新的recordset判斷才可了,真的沒有更好的辦法嗎?
royvb 2005-04-23
  • 打赏
  • 举报
回复
1、你有没有使用事务,如果有,那么请先执行RollbackTrans;--->没有用BeginTrans事件
2、在Rst.Close前加上判断:If Rst.State = adStateOpen Then---->用rst.state判断是为打开状态,但执行CLOSE就出错"在此内容不允许操作"
再请问如果直接用set rst=nothing 而不用rst.close会有什么影响!谢谢!
leayh 2005-04-23
  • 打赏
  • 举报
回复
1、你有没有使用事务,如果有,那么请先执行RollbackTrans;
2、在Rst.Close前加上判断:If Rst.State = adStateOpen Then
royvb 2005-04-23
  • 打赏
  • 举报
回复
我有做错误处理,但是Recordset关闭出错呀.我在FORM_UNLOAD事件中是这样写的.
rst.close
set rst=nothing
但运行到rst.close这句时出错.错误提示"在此内容中不允许操作"
scyshys 2005-04-23
  • 打赏
  • 举报
回复
如果有没有提交的更新就会这样,
可以用on error resume next 来解决,不过不是好办法。只是不报错了。
如果没有其他引用到这个对象,可以直接set nothing
我也想请教更好的答案
leayh 2005-04-23
  • 打赏
  • 举报
回复
你打开Recordset时的锁定方式是什么?如果是adLockBatchOptimistic,那么要用Rst.CancelBatch来取消更新。
另外,检查你用的是客户端游标还是服务端游标(应该用客户端游标)。
royvb 2005-04-23
  • 打赏
  • 举报
回复
没有人回答吗?
ljhdi 2005-04-22
  • 打赏
  • 举报
回复
不知道你有没有进行错误处理
Tiger_Zhao 2005-04-22
  • 打赏
  • 举报
回复
直接对 RecordSet 做 set nothing,ADO 会自动 CancelUpdate,而且不会出错。
前提是没有使用事务
royvb 2005-04-22
  • 打赏
  • 举报
回复
回 leayh(云卷云舒) ->我有用Cancelupdate的方法,但是出错,错误显示说操作已取消!
回 edgestone(Jerry->这个方法是可以,但是这个方法太慢,也耗资源!
能不能有更好的方法!谢谢!
edgestone 2005-04-22
  • 打赏
  • 举报
回复
on error goto ErrHandler:

........... 定义省略

my_cnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & App.Path + "\my_db.mdb;"
cnn.Open my_cnn

str_cmd = "select * from my_table where ID='" & Me.Txt_ID.Text & "'"
rst.Open str_cmd, cnn, adOpenStatic, adLockOptimistic

If Not rst.EOF Then
MsgBox "该ID已存在。", vbOKOnly + vbExclamation, "提示"
rst.Close
cnn.Close
Exit Sub
End If
rst.Close

If MsgBox("确定要保存该信息吗?", vbOKCancel + vbQuestion, "提示") = vbOK Then

str_cmd = "select * from my_table"
rst.Open str_cmd, cnn, adOpenStatic, adLockOptimistic

rst.AddNew
rst.Fields("ID") = Me.Txt_ID.Text
rst.Fields("PersonType") = Me.Txt_Type.Text
rst.Fields("PersonNum") = Me.Txt_Num.Text
rst.Fields("Remark") = Me.Txt_Remark.Text
rst.Update
rst.Close
End If
cnn.Close

Exit Sub

ErrHandler:
MsgBox Err.Description
加载更多回复(1)

1,216

社区成员

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

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