应用环境:SQL SERVER 2000 
程序语言:VB 6.0
并发操作用户数:8
出错模块:零件出入库(库存结算有误)
相关数据库表:tbmaterial(零件信息表),tbcgorderin(零件出入库信息表)
tbcgorderin数据结构:ID,零件代号,入库数量,出库数量,结余数量
变量定义:CNN(当前数据库链接) rec(记录集)
实现思想:CNN.begintrans
   IF 添加
      求最后一笔结余库存数(利用ID排序):rec.open SQLstr1,CNN,adOpenStatic, adLockPessimistic
      插入相关记录
      插入库存字段值
   else 编辑
      查找编辑行入库数量:rec.open SQLstr2,CNN,adOpenStatic, adLockPessimistic
      计算入库数量差异
      更新相关记录
      更新库存字段值
      检索ID大于编辑行ID的所有记录:rec.open SQLstr3,CNN,adOpenStatic, adLockPessimistic
      逐条更新相关记录及库存字段值
   endif
CNN.committransSQLstr1:select * from tbcgorderin where 零件代号=需添加业务数据的零件代号 order by ID
SQLstr2:select * from tbcgorderin where ID=SQLstr1语句检索记录的ID
SQLstr3:select * from tbcgorderin where ID=SQLstr1语句检索记录的ID

解决方案 »

  1.   


       IF 添加      CNN.begintrans      求最后一笔结余库存数(利用ID排序):rec.open SQLstr1,CNN,adOpenStatic, adLockPessimistic
          插入相关记录
          插入库存字段值      CNN.committrans   else 编辑      CNN.begintrans      查找编辑行入库数量:rec.open SQLstr2,CNN,adOpenStatic, adLockPessimistic
          计算入库数量差异
          更新相关记录
          更新库存字段值
          检索ID大于编辑行ID的所有记录:rec.open SQLstr3,CNN,adOpenStatic, adLockPessimistic
          逐条更新相关记录及库存字段值      CNN.committrans   endif
      

  2.   

    加入:SET TRANSACTION ISOLATION LEVEL SERIALIZABLE CNN.begintrans
       IF 添加
          求最后一笔结余库存数(利用ID排序):rec.open SQLstr1,CNN,adOpenStatic, adLockPessimistic
          插入相关记录
          插入库存字段值
       else 编辑
          查找编辑行入库数量:rec.open SQLstr2,CNN,adOpenStatic, adLockPessimistic
          计算入库数量差异
          更新相关记录
          更新库存字段值
          检索ID大于编辑行ID的所有记录:rec.open SQLstr3,CNN,adOpenStatic, adLockPessimistic
          逐条更新相关记录及库存字段值
       endif
    CNN.committrans
      

  3.   

    IF 添加      求最后一笔结余库存数(利用ID排序):rec.open SQLstr1,CNN,adOpenStatic, adLockPessimistic      CNN.begintrans --查詢語句不要放在事務當中
          插入相关记录
          插入库存字段值      CNN.committrans   else 编辑      查找编辑行入库数量:rec.open SQLstr2,CNN,adOpenStatic, adLockPessimistic
          计算入库数量差异      CNN.begintrans      更新相关记录
          更新库存字段值
          检索ID大于编辑行ID的所有记录:rec.open SQLstr3,CNN,adOpenStatic, adLockPessimistic
          逐条更新相关记录及库存字段值      CNN.committrans