现在我有两张表(Access2000),分别是库存表和入库表
库存表(物品ID,库存量,最后入库单号)
入库表(入库单号,物品ID,入库数量,入库时间)上面的库存表中的"最后入库单号"是一个外键,对应的是入库表中的最后入库的记录.这里有个问题非常难处理:
当我要新的入库单时,添加完入库表的记录以后,还必须修改库存表中的最后入库单号为当前添加的新入库单号.
因为考虑到操作的完整性,所以理所当然得使用了事务,但是这里的问题非常难解决的就是因为事务才发生的:
cnn.BeginTrans
'开始事务,先进行入库表的添加
Rs.AddNew
...
...
Rs.Update
'然后再进行库存表的相应物品的"最后入库单号"修改
'但是这里由于是事务操作,前者的记录并非真正存在于表中,所以无论如何都修改不了这个"最后入库单"的值(因为这是个外键!!)那么再不修改这个表结构的前提下如何进行这个添加入库单的完整操作????
前提是不修改这个表结构!!
------------------------这几天碰到这个问题,实在没有想出好的解决办法.
请各位大哥大姐给出出主意.小弟感激不尽!!!!!!

解决方案 »

  1.   

    我的入库单号本来就不是自动生成的.关键问题在于任何的库存记录中必须有一个"最后入库单号"来对应入库单号.换句话说,因为考虑到两个表需要同时进行操作(库存表更新对应记录的"最后入库单号"这个字段值,而入库单表要添加一个记录),所以要用到事务,但是由于用到事务,在执行CommitTrans之前所有对表的操作都是在缓冲区里的,所以当先添加了入库单一条记录以后,更新库存表时直接修改"最后入库单号"的值为NewId是不允许的,因为入库表中其实还没有真正存在NewId的入库单记录.怎么解决呢?  请再帮帮小弟,谢谢!
      

  2.   

    你怎么还没明白呢,单号知道了,本次入库的数量也知道了,事务里只要两句话就可以了,一个是INSERT入库表,另一个是UPDATE库存表,很简单啊。任何一句出错就ROLLBACK。
      

  3.   

    可以,入库的时候就INSERT 一条记录,库存表就免了,需要看库存的时候直接运算入库表来生成某商品的库存记录。^_^一个可行的玩笑
    事务还是需要的否则完整性得不到保证,但考虑的到单号是程序生成的,所以不存在什么缓冲的问题,只要去掉约束。