每当用户提交填写该表单的内容时,我都会有一个表单来生成合同号。
这是示例编号:
00001 / ABC / DEF / 01/2013
序列号由'00001'显示。这意味着在同一年提交它的下一个用户将获得下一个'00002'的数字。 要处理这个,我在提交按钮中使用此代码:
Dim strSQL As String, cNumber As Integer
strSQL = "SELECT TOP 1 Contract_No FROM T_Report WHERE Year=2013 ORDER BY Contract_No DESC "
Set rs = Db.OpenRecordset(strSQL)
If rs.RecordCount > 0 Then
cNumber = Left(rs!Contract_No, 5) + 1
Else
cNumber = 1
End If
当用户在不同时间提交时,它可以正常工作。当2个或更多用户同时生成问题时会出现问题。例如,userA和userB一起单击按钮,它们将获得“00001”和“00001”。我想要的是另一个用户得到'00002','00003'等等。有人可以帮帮我吗?
答案 0 :(得分:0)
您在此处尝试执行的操作是在“合同编号”字段中存储“含义”。这通常被认为是一个坏主意。您最好的选择是使用自动编号字段作为主键字段。如果你坚持使用上述方案,你基本上有两个选择(我能想到)。
您的第一个也是最好的选择是在Form的BeforeUpdate事件中分配您的合同号。这样,当记录实际保存/提交时,它们将被分配。
您的第二个选择是在生成合同号后立即运行DoCmd.RunCommand acCmdSaveRecord。这通常不能很好地工作,因为您可能有字段或控件未通过您已实施的验证规则。