Office中国论坛/Access中国论坛

标题: 【求助】扫描枪录入序列号如何处理主键重复? [打印本页]

作者: aslxt    时间: 2011-2-12 12:01
标题: 【求助】扫描枪录入序列号如何处理主键重复?
本帖最后由 aslxt 于 2011-2-12 12:08 编辑

如题,在扫描枪录入序列号(主键),如果重复录入了,如何捕捉该错误代码,在access的提示以前自定义处理?
另外请问,不同厂家的不同产品有没有序列号重复的可能性?例如手机的串号


作者: t小宝    时间: 2011-2-12 12:32
参考此帖
http://www.office-cn.net/thread-96143-1-1.html
作者: LeeTien    时间: 2011-2-12 12:51
序列号一般不会有重复的
建议你可以写个函数查询数据库
如果有重复的就弹出个对话框显示当前重复的序列号
可以在里面进行修改
作者: aslxt    时间: 2011-2-12 18:08
本帖最后由 aslxt 于 2011-2-12 18:14 编辑

已经找到一个解决方法,就是在子窗体的事件中加入以下代码,其中“串号1"是绑定到序列号的文本框:

Private Sub 串号1_KeyPress(KeyAscii As Integer)
On Error GoTo Err_串号1_KeyPress '如果有错误,特别是序列号重复(扫描操作可能会产生重复的动作)
  '由于扫描枪在文本框中扫描一个序列号后不能自动跳到下一条记录,需要用下面的语句来让记录跳到下一个,当然也可以是跳到新纪录。扫描枪每扫描完一个条码是不是同时附加一个回车符,不能确定,但是以下代码发现自行正常,还望高手指教?
  If KeyAscii = 13 Then  '判断扫描枪是否扫描完一个条码,如果是,就跳转到下一条记录
      DoCmd.GoToRecord , , acNext
  End If
Exit_串号1_KeyPress:
    Exit Sub
Err_串号1_KeyPress:
    备注.SetFocus   '执行到这一句的时候,说明录入发生了错误,就不能保存记录。只好在子窗体的控件中移动焦点,当然,不移动焦点也没有问题,只是还要手工全选中“串号1”的文本,只有把焦点从“串号1”控件移到别的控件“备注”,然后再返回来,就可以全选中“串号1”的文本,便于扫描枪再次输入,不知道有没有更好的办法来全选控件的文本?
    串号1.SetFocus '
    Resume Exit_串号1_KeyPress
End Sub


经过测试,如果序列号重复,焦点永远停留在“串号1”控件上,而且全选中“串号1”对的文本,只有扫描到全新的序列号后,才会移动到下一条记录!不需要用户做多余的动作






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