Office中国论坛/Access中国论坛

标题: 怎样才可以2个人同时录入订单? [打印本页]

作者: winner    时间: 2006-4-10 22:26
标题: 怎样才可以2个人同时录入订单?
[attach]17025[/attach]


这是我以前参照网上例子做的订单号自动编号例子,每天订单号会从001开始计算.

现在我发现不能2个人同时录入订单,如果2个人同时录入的话,会出现同一个订单号,而且只能保存一条记录,请这个问题该如何解决?如何能让2个人同时操作都不会出现问题?

先谢谢大家!
作者: 一点通    时间: 2006-4-10 22:30
使用前后台数据库,控件不要绑定表,用代码将数据保存到表
作者: winner    时间: 2006-4-10 22:39
有无其他的方法?

因为我想一打开窗体就出现订单号,而不是待所有信息都录入完,按保存才给订单号
作者: gaoqiwen    时间: 2006-4-10 22:42
保存记录前检查一下是否有同一订单号,如有重新计算!
作者: 一点通    时间: 2006-4-10 22:43
或者使用独占方式打开,这样会影响到另一个人不能同时录入数据
作者: winner    时间: 2006-4-11 00:31
肯定不能用独占方式打开;在保存按钮时才判断,也行不通啊!

能否一打开窗口就给出订单号?这是最理想的做法

请问应怎么实现?
作者: 一点通    时间: 2006-4-11 00:35
多人同时做一个录入记录,不可能每人都会分配一个订单号,除非一打开就将订单号写入到表,然后后面的数据作更新处理
作者: winner    时间: 2006-4-11 00:54
对了,我就是要一打开就将订单号写入到表.

现在我一打开窗口,它是会有一个订单号,这时我录入信息,表是不会马上就显示这条订单信息的,一定要录入完成,按"保存"按钮,表中才出现该信息.

请问要如何实现"录入完成"?

大家可以在表中增加几个字段测试,,如果只录入其中一条,表是不会马上就显示这条订单信息的,看看!
作者: 一点通    时间: 2006-4-11 00:56
传你的例子上来,让别人帮你完成吧,记得要精简例子
作者: layaman_999    时间: 2006-4-11 04:58
用户代号+单据流水号 可以解决这类的冲突。
作者: 一点通    时间: 2006-4-11 05:54
以下是引用layaman_999在2006-4-10 20:58:00的发言:
用户代号+单据流水号 可以解决这类的冲突。

你的方法表面上是可行的,但是对于整体的编号是不可行的,

[此贴子已经被作者于2006-4-11 9:26:34编辑过]


作者: winner    时间: 2006-4-11 17:24
标题: 例子在此
[attach]17035[/attach]


如果在订单20060411001的录入过程中(只录入备注1),打开表,可以看到表内是没有这张订单的,一定要关掉窗口,系统才认为录入完成,表才出现该订单.大家看看!

如果我在录入20060411001时,另一个用户也打开窗口,那里也是出现同一编号的订单,它也可以录入.

怎么解决?


作者: 一点通    时间: 2006-4-11 17:31
1.你的版本太高,我无法打开

2.关于一打开窗体就将编号存入表中是可行的,但会有一个毛病,就是误打开这个窗体也会产生一个编号,所以一般不建议这样做

[此贴子已经被作者于2006-4-11 9:31:37编辑过]


作者: winner    时间: 2006-4-11 17:48
[attach]17037[/attach]


这是2000版本的.

我现在使用的就是利用自动编号生成订单号的,它会出现一点通说的情况:断号,所以我才想起用以前的那种生成订单号的方法,那样不会断号.现在只是不能解决2个人同时录入的问题而已,所以请大家帮忙想想办法?即不断号,又可以同时录入
作者: 一点通    时间: 2006-4-11 18:00
建议你不要用绑定表的方法来输入数据,可增加一个"保存"按钮,当全部数据全部输完后再按"保存"键保存,"保存"时用Dlookup先查找表中是否有别人先用了这个编号,没有的话直接保存,如果有的话弹出提示,并自动修改这个编号再保存,这样才会更好地解决这个问题
作者: winner    时间: 2006-4-11 18:09
那要增加一个按钮哦!录入时要按按钮不太方便,订单号在按按钮时才确定也不怎么符合使用者的习惯,不过这也是没办法啦,谢谢!
作者: 一点通    时间: 2006-4-11 18:36
加上按钮也很方便输入的,设置好TAB顺序就行了
作者: 青青    时间: 2006-4-11 19:13
建议你当全部数据全部输完后,在备注5"退出"时编制编号保存
作者: 无忧    时间: 2006-4-11 23:11
反正只有两个人录入,干脆一个订单号生成为尾数为奇数,一个订单号生成的尾数为偶数好了,可以用管理员名自动判断新订单编号尾数是奇还是偶,这样做最大的好处是,可以追踪谁录入的订单。。。。

或者,用订单名再加一个字母为识别码,也是可行的。
作者: winner    时间: 2006-4-12 00:19
请问无忧:有无例子参考?
作者: winner    时间: 2006-4-13 23:16
To一点通:我现在按你所说的做了一个保存按钮,但发现有以下问题:

   2个人同时录单,同时(或相隔1,2秒)按保存按钮,则会出现同一个订单号,而在表中只保存其中一个人的单,另一个人的单就不见了,怎么办?


作者: 一点通    时间: 2006-4-13 23:31
最好将你修改后的例子传上来,看一下还有什么错误
作者: winner    时间: 2006-4-13 23:52
[attach]17095[/attach]


请看看例子,谢谢!
作者: 一点通    时间: 2006-4-13 23:57
你并没有按15楼的方法去做
作者: winner    时间: 2006-4-13 23:57
如果2个人同时按保存,则主表只有1张单的单号,而子表会有2张单的明细记录(那是因为子表是由自动编号连接的),于是就会出现其中有一张单主表没记录,子表有记录
作者: winner    时间: 2006-4-14 01:52
我不想绑定控键的原因是:如果我录完主表内容,按完键后发现主表内容录入有错,那就很难修改了,难道又要建一个修改按钮吗?我不想建那么多按钮
作者: hi-wzj    时间: 2006-4-14 06:14
订单号为什么非要按日期加顺序号来排?手工帐的产物,某一天的第几笔定单在管理上是必须的吗?如果答案是否定的,那直接用系统的自动编号不很简单?设定单号只是为了归集数据让检索迅速罢了。要学会用计算机的思维模式来管理。
作者: layaman_999    时间: 2006-4-14 13:58
以下是引用hi-wzj在2006-4-13 22:14:00的发言:
订单号为什么非要按日期加顺序号来排?手工帐的产物,某一天的第几笔定单在管理上是必须的吗?如果答案是否定的,那直接用系统的自动编号不很简单?设定单号只是为了归集数据让检索迅速罢了。要学会用计算机的思维模式来管理。

同意看法。如果您一定要连号,请象纸张单据一样,每个用户分配一个号码段(一本单据),通过代码强制用户使用,用户用完后,再向管理员申请号码段。
作者: winner    时间: 2006-4-14 17:32
我这样设订单号的原因是为了能一眼看出那是什么时候的订单,而且连号是为了能让管理层看清楚某天的第几张单的处理情况,所以这样设号是必须的.至于象第28楼那样的做法,需要多人配合完成,不太方便.

To 一点通:我回去想清楚了,昨天我们讨论的重点错了.2个人同时录单,因为有自动编号存在,所以系统认为是2张单,但是如果他们同时按"保存"按钮,他们就会同时对表内的最后一张单进行对比,所以出来的订单号是一样的,这时就会出现:

  自动编号     用户     订单号

     4        用户1     20060414001

     5        用户2     20060414001

因为我在主表设了订单号不能重复,所以其中第5单就消失了,而子表因为是用自动编号连接的,所以还是有第5张单的信息.

所以说是按"保存"键的问题哦,在那里要怎样下判断才能保证2张单有先后顺序呢?(能否判断其中一张单延迟保存之类的)
作者: hi-wzj    时间: 2006-4-14 17:47
订单中已经有日期字段了,因此再记录一遍日期是不必要的.观念的问题.

[此贴子已经被作者于2006-4-14 9:48:06编辑过]


作者: hi-wzj    时间: 2006-4-14 17:51
如果一定要做成这样的订单号

绑定数据源,将订单号设有索引无重复;主订单和子订单号做级联更新.

在最后一个字段退出时执行代码:dmax(...)+1 以更新订单号,若出错再执行一遍,以防两人同一秒执行(一般不可能)

[此贴子已经被作者于2006-4-14 9:53:32编辑过]


作者: 一点通    时间: 2006-4-14 18:10
建议有主副表时最好分开登记,表面看来在同一窗体登记很方便,但当数据越来越多时就很难找到旧的数据了,而且显示也不清晰
作者: winner    时间: 2006-4-14 18:11
我是菜鸟,什么叫级联更新?怎样按保存时判断出错?

因为我现在已经绑定数据源,将订单号设有索引无重复,但保存时它不会出现出错信息的提示,是我打开主表查看时才发现有一张单消失的.
作者: 一点通    时间: 2006-4-14 18:19
因你写入数据时已经绑了表,两人同时绑定一个数据,未完全保存前必然会有出错的

[此贴子已经被作者于2006-4-14 10:19:08编辑过]


作者: winner    时间: 2006-4-14 18:28
主副表怎样分开登记啊?我主表是订单信息,有客户,地址,订单类别之类的,子表是明细信息,有产品,单价,箱数之类的,以前主表和子表是靠订单号连接的,现在是靠自动编号连接,我不明白怎样分开登记?能讲清楚点吗?
作者: 一点通    时间: 2006-4-14 19:55
看来都很难说明了,只好花时间做个例子

[attach]17122[/attach]

作者: winner    时间: 2006-4-14 20:55
谢谢!我研究研究
作者: winner    时间: 2006-4-14 23:34
[attach]17134[/attach]


还是不行哦,请看看附件.

我打开窗口,订单号显示:200604140005,然后我录入信息,还没按保存,而另外一个人在不停地输单(第一个0005,0006,0007是他输的),结果显示见附件,所以我觉得应该是判断按键时间差的问题
作者: 一点通    时间: 2006-4-14 23:45
在单号字段的索引设定为"有(无重复)"
作者: winner    时间: 2006-4-15 00:02
设了,其中后按按钮的人会显示出错信息,而且他的记录不能保存(不是想象中的+1).

我觉得这样做跟原先绑定表那样做的原理是一样的.我认为关键是按"保存"按钮那里的问题,因为设定输入单号是和表里的最大单号比较,而2个人的记录都没有写进表,所以都会与最大单号比较,这样生成的单号当然是一样的啦.

理论上2个人是不会同时按按钮的,起码相差0.000几秒,但我刚刚试过,ACCESS居然连相差3秒的单都用同一个订单号[em06][em11]我要昏了
作者: 一点通    时间: 2006-4-15 00:13
按理是不会的,可惜我无条件帮你测试
作者: sgrshh29    时间: 2006-4-15 00:16
以下是引用一点通在2006-4-14 16:13:00的发言:
按理是不会的,可惜我无条件帮你测试

是啊,试了好多次,没有楼主所说的现象发生。
作者: winner    时间: 2006-4-15 00:18
sgrshh29:你是怎么试的?

我是把数据库放在一个网络盘上,然后我用我的机打开,另一个人用他的机打开这样试的哦!
作者: 一点通    时间: 2006-4-15 00:25
因我是以最大值加1来保存的,并不是第一次打开的值加1,在保存的一瞬间来查找表的数据,所以不会出现重复,
作者: winner    时间: 2006-4-15 00:32
理论上是这样,不过^^^^^^^^我这里显示的数据就是刚刚传上来的例子那样,有2张200404140005单,所以我想问问各位测试过的朋友,看看你们是怎样进行测试的
作者: sgrshh29    时间: 2006-4-15 01:34
以下是引用winner在2006-4-14 16:18:00的发言:


sgrshh29:你是怎么试的?

我是把数据库放在一个网络盘上,然后我用我的机打开,另一个人用他的机打开这样试的哦!

我用的办法也是加一个按钮,但是在保存记录之前,先刷新控件值。而不是你现在这种控件的设置方法。
作者: winner    时间: 2006-4-15 01:41
不太明白,你是不是2个人同时操作的,因为有很多时候单机操作是没问题的,但多人操作就出现问题了,能上传例子吗?谢谢!
作者: sgrshh29    时间: 2006-4-15 03:11
让我把你的下来改一下.因为我下班后刚回到家.等会改好了,还是放在这个帖子里.匆匆忙忙改了一下,不知你能不能用,大概的意思就是这样的.实际上还可以做的更好些.不过要用代码的,现成的东西往往不符合自己的实际情况.[attach]17139[/attach]


[此贴子已经被作者于2006-4-14 19:35:14编辑过]


作者: qlm    时间: 2006-4-15 06:03
你刚改了订单号,但在你正式更新之前,你所改的订单号可能又被占用了。

所以多人一起工作的话,用检测原表的方法检查是否订单号已被占用是不可能做到万无一失的。

你刚检测完,订单号又被别人占用了,这是有可能的。

下面的例子需要操作员,其实不用操作员也可以的,先试试吧.我用虚拟机测试没有问题。[attach]17158[/attach]


[此贴子已经被作者于2006-4-15 13:30:38编辑过]


作者: sgrshh29    时间: 2006-4-15 18:32
<DIV class=quote>以下是引用sgrshh29在2006-4-14 19:11:00的发言:
让我把你的下来改一下.因为我下班后刚回到家.等会改好了,还是放在这个帖子里.匆匆忙忙改了一下,不知你能不能用,大概的意思就是这样的.实际上还可以做的更好些.不过要用代码的,现成的东西往往不符合自己的实际情况.[attach]17150[/attach]

作者: hz1288    时间: 2006-4-15 19:43
学习中,支持
作者: qlm    时间: 2006-4-16 05:23
怎样测试?
作者: colindwk    时间: 2006-4-16 09:24
一定要学习一下!!!
作者: winner    时间: 2006-4-17 17:35
谢谢各位,我现在测试一下.

To qlm:我是这样测试的:把数据库放在一个网络盘中,然后我在我的机上打开数据库,进行输入,然后另外一个人也在他的机上打开数据库输入数据,分别按"保存",来看测试结果.


作者: winner    时间: 2006-4-17 19:24
我测试完了,有好消息哦!

To sgrshh29:当2个人同时按保存时,稍微后按的人会弹出"不能保存记录(因为设置索引,所以不能有重复订单号)"之类的错误窗口.

To qlm:你的例子不会弹出错误信息哦,而且2个人同时按也不会出现问题,能否共享代码出来?????(超级期待)
作者: sgrshh29    时间: 2006-4-17 20:20
TO:winner:

请帮忙再测试一下,对这个问题很有兴趣,但是没有条件测试。这次加了一个捕捉错误处理,不知道行不行。[attach]17199[/attach]

作者: winner    时间: 2006-4-17 22:36
To sgrshh29:刚试过,可以了.如果2个人同时按,按键较后的人先是显示窗口没反应,然后他就会因为等不及再按一次按钮,这样就可以保存了.请问是什么原理?
作者: sgrshh29    时间: 2006-4-17 23:04
以下是引用winner在2006-4-17 14:36:00的发言:
To sgrshh29:刚试过,可以了.如果2个人同时按,按键较后的人先是显示窗口没反应,然后他就会因为等不及再按一次按钮,这样就可以保存了.请问是什么原理?

好的,感谢你的测试。原因就是当二人(多人也可以吧)同时保存时,就会发生编号重复的错误,在错误捕捉代码中使得稍后保存的那个重新产生一个新的编号。不过我设计中想象的是,按键稍后的那个人不需要重新点击按钮,也能产生一个新的编号的记录。不知道你有没有注意到是不是必须重新点击一次按钮才能保存记录?
作者: winner    时间: 2006-4-17 23:15
以下是引用sgrshh29在2006-4-17 15:04:00的发言:



好的,感谢你的测试。原因就是当二人(多人也可以吧)同时保存时,就会发生编号重复的错误,在错误捕捉代码中使得稍后保存的那个重新产生一个新的编号。不过我设计中想象的是,按键稍后的那个人不需要重新点击按钮,也能产生一个新的编号的记录。不知道你有没有注意到是不是必须重新点击一次按钮才能保存记录?

不必,是我心急而已

[em04]

我再研究研究代码!谢谢了!

(我今天早上又发了一个帖子,是关于用窗体形式显示报表的,到现在的回复率比较低,有兴趣的同志们进去看看吧,谢谢!)[em07]
作者: qlm    时间: 2006-4-18 03:49
还是sgrshh29的方法好!






欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3