Member 14423031 Ответов: 3

Как сгенерировать автоматический сброс пользовательского идентификационного номера в следующем году


Я хочу сгенерировать пользовательский идентификационный номер, содержащий (текущий год-id) идентификационный номер при автоматическом сбросе следующего года (oledb)



например:
Год-ID
2019-1
2019-2
2019-3
....

2020-1
2020-2
....
2021-1
2021-2
2021-3
2021-4
...

Что я уже пробовал:

Private Sub referenceno1()
        cn.Open()
        cmd = New OleDb.OleDbCommand("select * from JOBCARDGENERATORTABLE", cn)
        cmd1 = New OleDb.OleDbCommand("select * from JOBCARDGENERATORTABLE", cn)
        cmd.Connection = cn
        Dim maxid As Object
        Dim strid As String
        Dim intid As Integer
        Dim NEWID As Integer = 1
        Dim MAXYEAR As Object
        Dim CURRENTYEAR As Integer = Date.Now.Year


        cmd.CommandText = "select max(JOBCARDNO) as maxid from JOBCARDGENERATORTABLE"
        cmd1.CommandText = "select max(YEAR) as MAXYEAR from JOBCARDGENERATORTABLE"

        maxid = cmd.ExecuteScalar
        MAXYEAR = cmd1.ExecuteScalar

        If maxid Is DBNull.Value Then
            intid = 1

        ElseIf CURRENTYEAR > MAXYEAR Then

            intid = 1

        ElseIf CURRENTYEAR = MAXYEAR And maxid > 1 Then
            strid = CType(maxid, String)
            intid = CType(strid, String)
            intid = intid + 1

        ElseIf CURRENTYEAR = MAXYEAR And maxid Is DBNull.Value Then
            strid = CType(maxid, String)
            intid = CType(strid, String)
            intid = intid + 1

        Else
            strid = CType(NEWID, String)
            intid = CType(strid, String)
            intid = NEWID + 1
        End If
        jobcardnotb.Text = intid
        REFERENCE = CURRENTYEAR & "-" & intid


        cn.Close()
        Return

    End Sub

MadMyche

Сколько удостоверений личности вы используете в год?

Maciej Los

Какой движок базы данных?

3 Ответов

Рейтинг:
1

Member 14587959

Решение:

provider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
            datafile = filepathtb.Text
            connString = provider & datafile
            myConnection.ConnectionString = connString


            myConnection.Open()
            cmd = New OleDb.OleDbCommand("select * from JOBCARDGENERATORTABLE", myConnection)

            cmd.Connection = myConnection
            Dim maxid As Object
            Dim strid As String
            Dim intid As Integer
            Dim CURRENTYEAR As Integer = Date.Now.Year

            cmd.CommandText = "select max(JOBCARDNO) as maxid from JOBCARDGENERATORTABLE WHERE CURRENTYEAR = YEAR"
            cmd.Parameters.Add("@CURRENTYEAR", OleDbType.Numeric).Value = CURRENTYEAR

            maxid = cmd.ExecuteScalar

            If maxid Is DBNull.Value Then
                intid = 1
            Else
                strid = CType(maxid, String)
                intid = CType(strid, String)
                intid = intid + 1

            End If


            jobcardnotb.Text = intid
            yeartb.Text = "J-" & CURRENTYEAR & "-" & intid

            myConnection.Close()
            Return
        End If


Привести пример:
Джей-2019-1
Джей-2019-2
.....
Дж-2020-1
Дж-2020-2
Дж-2020-3
....

МНЕ НУЖЕН РЕЗУЛЬТАТ ЛАЙКОВ:
Джей-2019-0001
Джей-2019-0002
.....

КТО-НИБУДЬ МОЖЕТ МНЕ ПОМОЧЬ?


Рейтинг:
0

Maciej Los

Для SQL Server

Самый простой способ добиться этого-создать пользовательскую функцию. Видеть: Пользовательские автоматически генерируемые последовательности с SQL Server - SQLTeam.com[^]

Другой способ-использовать SQL-команду следующим образом:

SELECT CONCAT(YEAR(DateTimeField ), '-', COALESCE(MAX(ID), 1)) AS NewID
FROM YourTable
WHERE YEAR(DateTimeField) = YEAR(@DateToCompare)


Удачи вам!


Рейтинг:
0

Member 14423031

cn.Open()
        cmd = New OleDb.OleDbCommand("select * from JOBCARDGENERATORTABLE", cn)
        cmd1 = New OleDb.OleDbCommand("select * from JOBCARDGENERATORTABLE", cn)
        cmd.Connection = cn
        Dim maxid As Object
        Dim strid As String
        Dim intid As Integer
        Dim NEWID As Integer = 1
        Dim MAXYEAR As Object
        Dim CURRENTYEAR As Integer = Date.Now.Year


        cmd.CommandText = "select max(JOBCARDNO) as maxid from JOBCARDGENERATORTABLE"
        cmd1.CommandText = "select max(YEAR) as MAXYEAR from JOBCARDGENERATORTABLE"

        maxid = cmd.ExecuteScalar
        MAXYEAR = cmd1.ExecuteScalar

        If maxid Is DBNull.Value Then
            intid = 1

        ElseIf CURRENTYEAR > MAXYEAR Then

            intid = 1

        ElseIf CURRENTYEAR = MAXYEAR And maxid > 1 Then
            strid = CType(maxid, String)
            intid = CType(strid, String)
            intid = intid + 1

        ElseIf CURRENTYEAR = MAXYEAR And maxid Is DBNull.Value Then
            strid = CType(maxid, String)
            intid = CType(strid, String)
            intid = intid + 1

        Else
            strid = CType(NEWID, String)
            intid = CType(strid, String)
            intid = NEWID + 1
        End If
        jobcardnotb.Text = intid
        REFERENCE = CURRENTYEAR & "-" & intid


        cn.Close()
        Return


CHill60

Это должно быть решением или как?