0

我已编写此代码以根据日期生成唯一 ID。问题是日期不是最新的。我想要这样的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
4

1 回答 1

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
于 2013-08-19T03:58:48.317 回答