0

每当用户提交他们填写的表格时,我都有一个表格来生成合同号。这是示例编号:

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'等等。有人可以帮我吗?

4

1 回答 1

0

您在这里尝试做的是在您的合同编号字段中存储“含义”。这通常被认为是一个坏主意。您最好的选择是仅使用自动编号字段作为您的主键字段。如果你坚持使用上述方案,你基本上有两种选择(我能想到的)。

您的第一个也是最好的选择是在表单的更新前事件中分配您的合同编号。这样,当记录实际保存/提交时,它们将被分配。

您的第二个选项是在生成合同编号后立即运行 DoCmd.RunCommand acCmdSaveRecord。这通常不能很好地工作,因为您的字段或控件可能没有通过您设置的验证规则。

于 2013-08-13T19:29:13.983 回答