库存减少销售增加的事务例子
来源:互联网 发布:深入浅出mysql微盘 编辑:程序博客网 时间:2024/05/01 23:10
(1)
Private Sub Do(ByVal SL As Integer)
Dim oConn As New ADODB.Connection
Dim oRs As New ADODB.Recordset
Dim oRs2 As New ADODB.Recordset
On Error GoTo ErrorHandler
oConn.ConnectionTimeout = 15
oConn.Open "Provider=SQLOLEDB.1;Password=***;Persist Security Info=True;User ID=***;Initial Catalog=testdb;Data Source=***.***.***.***"
oConn.CommandTimeout = 15
oConn.IsolationLevel = adXactSerializable
oConn.BeginTrans
oRs.CursorLocation = adUseClient
oRs.Open "SELECT * FROM STOCK", oConn, adOpenKeyset, adLockPessimistic
oRs("KCS") = oRs("KCS") - SL
oRs.Update
If oRs("KCS") <0 Then
oRs.Close
oConn.RollbackTrans
oConn.Close
Set oConn = Nothing
Exit Sub
Else
oRs2.Open "SELECT * FROM SALE", oConn, adOpenKeyset, adLockPessimistic
oRs2.AddNew
oRs2("SL") = SL
oRs2.Update
oRs.Close
oRs2.Close
End If
oConn.CommitTrans
oConn.Close
Set oConn = Nothing
Exit Sub
ErrorHandler:
MsgBox Err.Description
oConn.RollbackTrans
oConn.Close
Set oConn = Nothing
End Sub
(2)
Private Sub Do(ByVal SL As Integer)
Dim oConn As New ADODB.Connection
Dim oRs As New ADODB.Recordset
Dim oRs2 As New ADODB.Recordset
On Error GoTo ErrorHandler
oConn.ConnectionTimeout = 15
oConn.Open "Provider=SQLOLEDB.1;Password=***;Persist Security Info=True;User ID=***;Initial Catalog=testdb;Data Source=127.0.0.1"
oConn.CommandTimeout = 15
oConn.IsolationLevel = adXactSerializable
oConn.BeginTrans
oRs.CursorLocation = adUseClient
oRs.Open "UPDATE STOCK SET KCS=KCS-SL", oConn, adOpenKeyset, adLockPessimistic
oRs.Open "SELECT * FROM STOCK", oConn, adOpenForwardOnly, adLockReadOnly
If oRs("KCS") < 0 Then
oRs.Close
oConn.RollbackTrans
oConn.Close
Set oConn = Nothing
Exit Sub
Else
oRs2.Open "SELECT * FROM SALE", oConn, adOpenKeyset, adLockPessimistic
oRs2.AddNew
oRs2("SL") = SL
oRs2.Update
oRs.Close
oRs2.Close
End If
oConn.CommitTrans
oConn.Close
Set oConn = Nothing
Exit Sub
ErrorHandler:
MsgBox Err.Description
oConn.RollbackTrans
oConn.Close
Set oConn = Nothing
End Sub
'在事务中表一旦被锁住,只有事务状态改变才会解锁,单纯oRs.Close是没有作用的;
'只要使用了WITH(TABLOCKX),再如何WHERE都是锁住整张表;
'锁住的表,并不影响同一个事务连接的其他oRs的读写删改;
oRs.Open "SELECT * FROM STOCK WITH(TABLOCKX) WHERE KCS>123", oConn, adOpenForwardOnly, adLockReadOnly
'不用事务,多个进程并发执行下列语句也会报错,说:KCS在修改前其值已经改变。
'缺点是没有事务就不可能自动回退可能已经增加的销售记录;
oRs.Open "SELECT KCS FROM STOCK", oConn, adOpenForwardOnly, adLockReadOnly
oRs("KCS")=oRs("KCS")-SL
oRs.Update
- 库存减少销售增加的事务例子
- 销售订单车辆库存
- 模拟淘宝库存的增加删除
- php 并发时库存减少至小于0的解决方案
- 系统消息数量的增加及减少!
- 增加减少年月日周等的操作方法
- 增加在线销售的7个方法
- AppStore 如何增加销售的心得
- NC库存单据增加审批流资源的索引贴
- JDBC事务的例子
- 一个事务的例子
- 转账的事务例子
- 不断减少时间复杂度的一个例子
- 增加减少时间.doc
- PHP日期增加减少
- 增加一行、减少一行
- PHP日期增加减少
- 日期增加减少
- 嵌入式linux内存管理
- 一个感人的故事
- Head First C# 中文版 图文皆译 第六章 继承 page213
- 关于oracle数据库列中有空串的情况
- 开始开发公司内部信息网
- 库存减少销售增加的事务例子
- Netcraft brain-dead
- ADF checkBox与数据库的交互
- 俯瞰Struts2的整体流程(2)
- 关于天赋的思考。
- 从Jar包获取资源的方法
- CXF全接触(八) --- 使用wsdl2java时转换XMLGregorianCalendar为Date
- POJ 1156——The Doors
- 【java 异常Exception 】 集