如果VB.Net中的日期发生变化,如何重设自动编号?

问题描述

我已经在文本框(TxtNumb.Text)中创建了自动编号,如果数据库为空,它将显示REG01,如果有任何内容,则文本框将显示REG02,REG03,依此类推。

程序中有一个文本框,用于显示日期,格式为TxtDate.Text = Date.Now.ToString("dd MMM yyyy")。问题是如果日期更改(文本框再次变为REG01),如何重置自动编号?

以前我已经做到了,但是如果第二天没用,下面是我创建的代码

Sub AutoNumb()
    Call Connection() `This section is for connecting to the MS.Access DB`
    dbCommand = New OleDbCommand("select Kd_Testing from tblTesting order by Kd_Testing desc",dbConn)
    dataReader = dbCommand.ExecuteReader
    dataReader.Read()
    If Not dataReader.HasRows Then
        TxtNumb.Text = "REG01"
    Else
        TxtNumb.Text = "REG" + Format(Microsoft.VisualBasic.Right(dataReader("Kd_Testing"),2) + 1,"00")
    End If
End Sub

以前,谢谢您的回答。

#Edit,添加

我想通过将其保存到数据库来创建程序,如下例所示,我上面创建的代码只能对其自动编号,例如:REG01,REG02,...,REG05等。

|Kd_Testing|Name_Testing        |Date_Testing|
|REG01     |Testing 01,day 20th|20 Aug 2020 |
|REG02     |Testing 02,day 20th|20 Aug 2020 |
|REG01     |Testing 01,day 21th|21 Aug 2020 |
|...       |...                 |...         |
|REG10     |Testing 10,day 21th|21 Aug 2020 |
|REG01     |Testing 01,day 22th|22 Aug 2020 |

然后在REG99期间,该程序将收到错误消息,因此如果日期更改,则我想使它出错,然后Kd_Testing重新开始到REG01。

解决方法

修改您的SQL以仅检索日期为今天的记录,

Sub AutoNumb()
    Call Connection() *This section is for connecting to the MS.Access DB*
    dbCommand = New OleDbCommand("select Kd_Testing from tblTesting where Date_Testing='" & Date.Now.ToString() & "' order by Kd_Testing desc",dbConn)
    dataReader = dbCommand.ExecuteReader
    dataReader.Read()
    If Not dataReader.HasRows Then
        TxtNumb.Text = "REG01"
    Else
        TxtNumb.Text = "REG" + Format(Microsoft.VisualBasic.Right(dataReader("Kd_Testing"),2) + 1,"00")
    End If
End Sub

您可能需要调整Date.Now,以获取将日期存储在Date_Testing中的正确格式。

,

使您的连接保持在使用方法的本地。 在vb.net中通常不需要Call关键字。 连接需要关闭和拆除。需要处理命令。即使有错误,Using...End Using块也会为您处理。

我在您的Select语句中添加了Where子句,并带有用于今天日期的参数。

请启用“严格选项”。这是一个两部分的过程。首先针对当前项目-在解决方案资源管理器中,双击我的项目。选择左侧的编译。在Option Strict下拉菜单中,选择ON。第二个用于将来的项目-转到“工具”菜单->“选项”->“项目和解决方案”->“ VB默认值”。在Option Strict下拉菜单中,选择ON。这样可以避免在运行时出现错误。

您将看到数据类型可能有问题。我展示了如何使用.net方法而不是旧的vb6方法。我还展示了如何使用Visual Studio 2015 Forward中可用的插值字符串。

Sub AutoNumb()
    Using cn As New OleDbConnection("Your connection string"),dbCommand As New OleDbCommand("select Kd_Testing from tblTesting Where Date_Testing = @Date order by Kd_Testing desc",cn)
        dbCommand.Parameters.Add("@Date",OleDbType.VarChar).Value = Now.ToString("dd MMM yyyy")
        cn.Open()
        Using dataReader As OleDbDataReader = dbCommand.ExecuteReader
            If Not dataReader.HasRows Then
                TxtNumb.Text = "REG01"
            Else
                dataReader.Read()
                Dim firstRecord = dataReader.GetString(0)
                Dim last2Characters = firstRecord.Substring(firstRecord.Length - 2)
                TxtNumb.Text = $"REG{CInt(last2Characters) + 1:00}"
            End If
        End Using
    End Using
End Sub

滚动自己的自动号码是个坏主意。数据库非常擅长为记录分配唯一编号。让他们去做。