VB6+ADO2.5在做事務處理時出錯,請教高手。

leotan_yang 2003-08-20 02:10:52
VB6+ADO2.5在做事務處理時出錯,請教高手。

本人有以下的程序
Private Sub cmdConfirm_Click()
'''
Set adoCN = New ADODB.Connection
adoCN.ConnectionString = sysConnectionString
adoCN.IsolationLevel = adXactRepeatableRead
adoCN.CursorLocation = adUseServer
adoCN.Mode = adModeShareDenyWrite
adoCN.ConnectionTimeout = 10000
adoCN.Open

adoCN.BeginTrans
If invRS.RecordCount > 0 Then invRS.MoveFirst
Do While Not invRS.EOF
sSQL = "SELECT * FROM r013_t_hold_item WHERE (company_cd = '001') "

sSQL = "Update r013_t_hold_item Set r013_used_qty =100 WHERE (company_cd = '001') "
adoCN.Execute sSQL

invRS.MoveNext
Loop

  adoCN.CommitTrans

End Sub

請看以上的代碼,假設invRS記錄集有兩條記錄,當第一條記錄時,就能順利把《r013_t_hold_item 》表中的記錄select出來,然後也順利地update該記錄;當去到第二條記錄的時候,select出《r013_t_hold_item 》表中剛剛update的第一條記錄時就會出錯?請問這是什麼原因?事務處理不能select出update後,但沒有commitTrans的記錄嗎?在線等,急!!!!謝謝高手?
...全文
91 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdwd05 2003-08-20
  • 打赏
  • 举报
回复
如果继续查询,就请在从新打开数据集,从新定义~分开处理,不要放在一起~
leotan_yang 2003-08-20
  • 打赏
  • 举报
回复
f
fslyw 2003-08-20
  • 打赏
  • 举报
回复
楼主,在Connection打开事务后,在这个connection内进行的所有修改是不会真的写入数据库的,要把在事务内update后未提交前的数据读出来,只能用同一个connection进行打开,这样就不会有问题了。

由于你只是讲的“出错”,我也不知道你具体是遇上什么错误,你最好讲清楚D。

flxa 2003-08-20
  • 打赏
  • 举报
回复
up
leotan_yang 2003-08-20
  • 打赏
  • 举报
回复
你誤會了我的意思啦,我那裡有一個循環的,當循環完後,再CommitTrans

我的意思是,在事務開始後,就將記錄update後,然後我再去select回這條記錄,

就是select這個操作中出錯了。我知道這是事務的問題,要怎樣修改?
wdwd05 2003-08-20
  • 打赏
  • 举报
回复
忘了

EXIT SUB
wdwd05 2003-08-20
  • 打赏
  • 举报
回复
Private Sub cmdConfirm_Click()
'''
Set adoCN = New ADODB.Connection
adoCN.ConnectionString = sysConnectionString
adoCN.IsolationLevel = adXactRepeatableRead
adoCN.CursorLocation = adUseServer
adoCN.Mode = adModeShareDenyWrite
adoCN.ConnectionTimeout = 10000
sSQL = "Update r013_t_hold_item Set r013_used_qty =100 WHERE (company_cd = '001') "
adoCN.Open

on error goto Err_ROLL

adoCN.BeginTrans

adoCN.Execute sSQL

  adoCN.CommitTrans

Err_ROLL:

msgbox "更新出错"
adoCN.rollbacktrans
End Sub
leotan_yang 2003-08-20
  • 打赏
  • 举报
回复
小寫了一句,不好意思
adoCN.Execute sSQL
wdwd05 2003-08-20
  • 打赏
  • 举报
回复
你在开玩笑吗?

sSQL = "SELECT * FROM r013_t_hold_item WHERE (company_cd = '001') "

这句话是不可能执行的~

7,762

社区成员

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

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