I've got a database table in my application called "periods". The structure of the table is:
- Year (Number)
- Month (Number)
- Period (Text)
The Year column stores years (Say, 2016), Month stores months (1-12), and period stores the period of the month/year - eg; November 2016 = 11/16, so period = 1116.
In the table, it stores from 2016, to 2030, so 14 years worth.
In my code I currently have the following Try
statement on my main forms Load
event. The aim of this code is that on the 1st January each year, the table updates and sets the Year column to 15 years in advance where year = current year -1, and then creates the periods.
It currently uses one update for each record - Is there a way I can reduce the code here to less queries, but still get the desired effect?
For instance, 01/01/2017 will set all Year values to 2031 WHERE Year = 2016, and then (this is the part I struggled with), set the periods to correspond with the month and year of that record?
Try
Dim current As String = Convert.ToString(Date.Today)
Dim year As String = Convert.ToString(Date.Today.AddYears(-1).Year)
Dim nextyear As String = Convert.ToString(Date.Today.AddYears(15).Year)
Dim period As String
current = current.Substring(0, 5)
period = nextyear.Substring(2, 2)
If current = "01/01" Then
trans = con.BeginTransaction()
sql = "UPDATE [periods] SET [year] = ? WHERE [year] = ?"
Dim cmd As New OleDbCommand(sql, con, trans)
cmd.Parameters.Add("@year", OleDbType.Integer).Value = nextyear
cmd.Parameters.Add("@y", OleDbType.Integer).Value = year
cmd.ExecuteNonQuery()
sql = "UPDATE [periods] SET [period] = ? WHERE [month] = ? AND [year] = ?"
cmd = New OleDbCommand(sql, con, trans)
cmd.Parameters.Add("@period", OleDbType.VarChar).Value = "01" & period
cmd.Parameters.Add("@month", OleDbType.Integer).Value = 1
cmd.Parameters.Add("@year", OleDbType.Integer).Value = nextyear
cmd.ExecuteNonQuery()
cmd = New OleDbCommand(sql, con, trans)
cmd.Parameters.Add("@period", OleDbType.VarChar).Value = "02" & period
cmd.Parameters.Add("@month", OleDbType.Integer).Value = 2
cmd.Parameters.Add("@year", OleDbType.Integer).Value = nextyear
cmd.ExecuteNonQuery()
cmd = New OleDbCommand(sql, con, trans)
cmd.Parameters.Add("@period", OleDbType.VarChar).Value = "03" & period
cmd.Parameters.Add("@month", OleDbType.Integer).Value = 3
cmd.Parameters.Add("@year", OleDbType.Integer).Value = nextyear
cmd.ExecuteNonQuery()
cmd = New OleDbCommand(sql, con, trans)
cmd.Parameters.Add("@period", OleDbType.VarChar).Value = "04" & period
cmd.Parameters.Add("@month", OleDbType.Integer).Value = 4
cmd.Parameters.Add("@year", OleDbType.Integer).Value = nextyear
cmd.ExecuteNonQuery()
cmd = New OleDbCommand(sql, con, trans)
cmd.Parameters.Add("@period", OleDbType.VarChar).Value = "05" & period
cmd.Parameters.Add("@month", OleDbType.Integer).Value = 5
cmd.Parameters.Add("@year", OleDbType.Integer).Value = nextyear
cmd.ExecuteNonQuery()
cmd = New OleDbCommand(sql, con, trans)
cmd.Parameters.Add("@period", OleDbType.VarChar).Value = "06" & period
cmd.Parameters.Add("@month", OleDbType.Integer).Value = 6
cmd.Parameters.Add("@year", OleDbType.Integer).Value = nextyear
cmd.ExecuteNonQuery()
cmd = New OleDbCommand(sql, con, trans)
cmd.Parameters.Add("@period", OleDbType.VarChar).Value = "07" & period
cmd.Parameters.Add("@month", OleDbType.Integer).Value = 7
cmd.Parameters.Add("@year", OleDbType.Integer).Value = nextyear
cmd.ExecuteNonQuery()
cmd = New OleDbCommand(sql, con, trans)
cmd.Parameters.Add("@period", OleDbType.VarChar).Value = "08" & period
cmd.Parameters.Add("@month", OleDbType.Integer).Value = 8
cmd.Parameters.Add("@year", OleDbType.Integer).Value = nextyear
cmd.ExecuteNonQuery()
cmd = New OleDbCommand(sql, con, trans)
cmd.Parameters.Add("@period", OleDbType.VarChar).Value = "09" & period
cmd.Parameters.Add("@month", OleDbType.Integer).Value = 9
cmd.Parameters.Add("@year", OleDbType.Integer).Value = nextyear
cmd.ExecuteNonQuery()
cmd = New OleDbCommand(sql, con, trans)
cmd.Parameters.Add("@period", OleDbType.VarChar).Value = "10" & period
cmd.Parameters.Add("@month", OleDbType.Integer).Value = 10
cmd.Parameters.Add("@year", OleDbType.Integer).Value = nextyear
cmd.ExecuteNonQuery()
cmd = New OleDbCommand(sql, con, trans)
cmd.Parameters.Add("@period", OleDbType.VarChar).Value = "11" & period
cmd.Parameters.Add("@month", OleDbType.Integer).Value = 11
cmd.Parameters.Add("@year", OleDbType.Integer).Value = nextyear
cmd.ExecuteNonQuery()
cmd = New OleDbCommand(sql, con, trans)
cmd.Parameters.Add("@period", OleDbType.VarChar).Value = "12" & period
cmd.Parameters.Add("@month", OleDbType.Integer).Value = 12
cmd.Parameters.Add("@year", OleDbType.Integer).Value = nextyear
cmd.ExecuteNonQuery()
trans.Commit()
Else
End If
Catch ex As Exception
trans.Rollback()
silentErrorLog(ex)
End Try