生成ID中的日期不是最新的

时间:2013-08-19 03:46:45

标签: vb.net ms-access

我已编写此代码以根据日期生成唯一ID。问题是日期不是最新的。我想要像这样的身份

2013081901 - if user input data on 19/08/2013 
2013082002 - if user input data on 20/08/2013

问题是,我得到了这样的身份

2013081901 - user input data on 19/08/2013 
2013081902 - user input data on 20/08/2013

这是我的代码:

 Dim cnnOLEDB As New OleDbConnection(strConnectionString)

    sql = "SELECT MAX(sampleID) FROM Spec_1"
    cmd = New OleDbCommand(sql, cnnOLEDB)
    cnnOLEDB.Open()
    Dim dr As OleDbDataReader
    dr = cmd.ExecuteReader()
    While dr.Read()
        Try
            If Not IsDBNull(dr(0)) Then
                txtSampleID.Text = (dr(0) + 1).ToString
                'txtSampleID.Text = dr(0).ToString
            Else

                txtSampleID.Text = Format(Date.Today, "yyMMdd") + "01"


            End If
        Catch ex As Exception
            txtSampleID.Text = "0"

        End Try
    End While

1 个答案:

答案 0 :(得分:0)

考虑一下:

  • 如果在一天内有超过99个条目,会发生什么?例如,

    2013081901 - input data 19/08/2013 
    2013081902 - input data 19/08/2013 
    2013081903 - input data 19/08/2013 
    [...]
    2013081998 - input data 19/08/2013 
    2013081999 - input data 19/08/2013 
    20130819?? - input data 19/08/2013 
    
  • 第100天入场会怎样?

    2013081901 - input data 19/08/2013 
    2013082002 - input data 20/08/2013 
    2013082103 - input data 21/08/2013 
    [...]
    2013112598 - input data 25/11/2013 
    2013112699 - input data 26/11/2013 
    20131127?? - input data 27/11/2013 
    
  • 如果您每天只收到一个条目,则不需要免费的两位数字:

    20130819 - input data 19/08/2013 
    20130820 - input data 20/08/2013 
    

可能建议使用不同类型的ID算法。

在任何情况下,您提出的具体问题都在此行中:

    txtSampleID.Text = (dr(0) + 1).ToString

您只需增加该值,而无需更改日期限制部分。 您可以使用Mod运算符提取增量部分,并添加正确的日期,如下所示:

    txtSampleID.Text = Format(Date.Today, "yyMMdd") + ((dr(0) + 1) Mod 100).ToString