[紧急求助]先预置一个单据号,之后再更新的问题.....

erdong988 2011-04-19 05:28:27
我现在在做一个导入单据的功能

组织好数据(包括单据号,是通过 GetVouchNo 获取)放入 domhead 中,之后调用 sub vouchsave 保存,因为 sub vouchsave 还要进行一些判断处理,可能该 domhead 保存不上。
现在的问题是 如果导入保存失败,该次导入获取的 单据号就被占掉不能用了。
举例:当前单据号该轮到 0012 了,导入失败一次(把 0012 浪费掉了),继续导入成功后的单据号变成了 0013,而不是想要的 0012,跳号了.......

想到的方法是 先预置一个单据号,之后的判断都通过 保存成功后,再更新为 通过 GetVouchNo 获取的 单据号,
但 如果自己随意指定一个预置值,可能与客户 实际应用的单据号冲突....... 单据号的长度是 nvarchar(20)

该如何处理啊......
...全文
73 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
erdong988 2011-04-25
  • 打赏
  • 举报
回复
我试了一下,也没试出来哪些特殊字符是不能录入单据号的
最后还是 取了一个特殊值先保存,基本保存成功之后,在取真值update,update也在事务中,不过能走到update就基本上保存成功了....保证准确性比保持连贯性重要。
GetVouchNo 是调用别处的,没有源码,就不考虑动它了
感谢各位的回答指点,结帖了
king06 2011-04-20
  • 打赏
  • 举报
回复
当前可用单据号单独存放到一个表(T1)中,
首先应用程序取这个值,保存的时候在数据库中用存储过程再实时判断,
如果表中存在该单据号(说明同时已被占用),单据号+1,这样继续找未被使用的单据号.
事务过程结束时将该单据号+1保存到表T1中
zfl2k 2011-04-20
  • 打赏
  • 举报
回复
自己判断,取最大单据号+1
孤独剑_LPZ 2011-04-20
  • 打赏
  • 举报
回复
用事务了吗
通常自增长的字段是做内码的,不能改其值,可以考虑增加一个非自增的字段+事务处理,保存时取最大单据号加一,再保存
咸清 2011-04-20
  • 打赏
  • 举报
回复
单据号通过 GetVouchNo 获取,放在一个变量,然后判断保存是否成功,不成功,接着用,成功后再由GetVouchNo 获取。
就这么一个逻辑嘛~
clear_zero 2011-04-19
  • 打赏
  • 举报
回复
别让单号成为自增加primary key
lxq19851204 2011-04-19
  • 打赏
  • 举报
回复
在另外一个表中设定一个字段为保存成功的单据的ID,然后每次插入成功的话,就更新新的ID.
erdong988 2011-04-19
  • 打赏
  • 举报
回复
GetVouchNo 是自动取值 连续的...(不论你这次是否保存成功,下次取值,就是下一个值了...)

刚才我向别人请教,人家说了 先把单据号预置为 'newid()' ----- ccode='newid()'
刚才我调试时确认事务查数据库,存的就是 'newid()'
那不就是把 字符串 'newid()' 当特殊值预置了嘛....

或许我的表达还不够清楚,我想要的结果是无论 导入失败是零次 还是连续好多次,导入成功的单据 的单据号,应该是连续的 0012 0013 0014......

我想的 实现逻辑就是 先把单据号预置成一个不可能于 表中用户手动设置的单据号冲突 的预置单据号,导入成功后再更新为 自动取值的 有连续性的 单据号。
dbcontrols 2011-04-19
  • 打赏
  • 举报
回复
我觉得可以故意跳号,比如:通过 GetVouchNo 获取 与 预置值 相同 的号
dbcontrols 2011-04-19
  • 打赏
  • 举报
回复
看楼主的描述好象没这么简单
[Quote=引用 1 楼 asftrhgjhkjlkttttttt 的回复:]
保存时取最大单据号加一,再保存,就不会有这个问题
[/Quote]
孤独剑_LPZ 2011-04-19
  • 打赏
  • 举报
回复
保存时取最大单据号加一,再保存,就不会有这个问题

7,762

社区成员

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

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