#string #vb.net #visual-studio #datetime #ms-access
#строка #vb.net #visual-studio #datetime #ms-access
Вопрос:
Я пытаюсь создать программу Visual Studio, которая будет добавлять одну новую запись в базу данных Access при каждом нажатии кнопки. Информация, которая вводится в разные столбцы в базе данных access, зависит от того, какие флажки установлены. Теперь я получаю эту ошибку:
Сначала я думал, что ошибка связана с неправильно выбранным типом данных в моей базе данных, однако я изменил типы, как показано ниже, и все еще есть ошибки.
Я потерялся, потому что думал, что правильно преобразовал даты в строки. Вот мой код для справки. Спасибо за помощь.
Private Sub InputInformation(sender As System.Object, e As System.EventArgs) Handles ImporttBUT.Click
Dim strSql = "Insert Into [DataCollection] (
[M/Y Of LOG],
[TIME OF LOG],
[USER],
[STOCK NUMBER],
[MISSED PART],
[NOT IN EPICOR],
[MISSED BUYOUT],
[MISSED NON STOCK ITEM],
[MISSED STOCK ITEM],
[MISSED AUTOMATED],
[MISSING PRINTS AFTER QUANTITY],
[MISSED PRINT NOT SENT TO CHAD],
OTHER,
[ADDED MISSING DIMENSION],
[FIXED DIMENSION]
)
Values ( @M_YLog, @TimeLog, @User, @StockNumber, @MissedPart, @NotEpicor, MissedBuyout, @MissedNonStock, @MissedStock, @MissedAutomated, @MissedPrints, @NotSent, @Other, @MissingDimension, @FixedDimension);"
Using con As New OleDb.OleDbConnection(My.Settings.Database1ConnectionString),
cmdSQL As New OleDbCommand(strSql, con)
With cmdSQL.Parameters
.Add("@M_YLog", OleDbType.VarChar, 100).Value = Me.MonthList2021.SelectedItem
.Add("@TimeLog", OleDbType.VarChar, 100).Value = DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss")
.Add("@User", OleDbType.VarChar, 100).Value = UserName
.Add("@StockNumber", OleDbType.Date, 100).Value = ""
.Add("@MissedPart", OleDbType.VarChar, 100)
If MissedPartCHKB.Checked Then
cmdSQL.Parameters("@MissedPart").Value = MissedPartCHKB.Text
Else
cmdSQL.Parameters("@MissedPart").Value = "NEATOL"
End If
.Add("@NotEpicor", OleDbType.VarChar, 100)
If NotInEpicorCHKB.Checked Then
cmdSQL.Parameters("@NotEpicor").Value = NotInEpicorCHKB.Text
Else
cmdSQL.Parameters("@NotEpicor").Value = "NEATOL"
End If
.Add("@MissedBuyout", OleDbType.VarChar, 100)
If MissedBuyoutCHKB.Checked = True Then
cmdSQL.Parameters("@MissedBuyout").Value = MissedBuyoutCHKB.Text
Else
cmdSQL.Parameters("@MissedBuyout").Value = "NEATOL"
End If
.Add("@MissedNonStock", OleDbType.VarChar, 100)
If NonStockCHKB.Checked = True Then
cmdSQL.Parameters("@MissedNonStock").Value = NonStockCHKB.Text
Else
cmdSQL.Parameters("@MissedNonStock").Value = "NEATOL"
End If
.Add("@MissedStock", OleDbType.VarChar, 100)
If MissedSTKItemCHKB.Checked = True Then
cmdSQL.Parameters("@MissedStock").Value = MissedSTKItemCHKB.Text
Else
cmdSQL.Parameters("@MissedStock").Value = "NEATOL"
End If
.Add("@MissedAutomated", OleDbType.VarChar, 100)
If MissedAutomatedPartCHKB.Checked = True Then
cmdSQL.Parameters("@MissedAutomated").Value = MissedAutomatedPartCHKB.Text
Else
cmdSQL.Parameters("@MissedAutomated").Value = "NEATOL"
End If
.Add("@MissedPrints", OleDbType.VarChar, 100)
If MissingPrintAfterQTYCHKB.Checked = True Then
cmdSQL.Parameters("@MissedPrints").Value = MissingPrintAfterQTYCHKB.Text
Else
cmdSQL.Parameters("@MissedPrints").Value = "NEATOL"
End If
.Add("@NotSent", OleDbType.VarChar, 100)
If MissedPrintsNOTSentChadCHKB.Checked = True Then
cmdSQL.Parameters("@NotSent").Value = MissedPrintsNOTSentChadCHKB.Text
Else
cmdSQL.Parameters("@NotSent").Value = "NEATOL"
End If
.Add("@Other", OleDbType.VarChar, 100)
If OtherCHKB.Checked = True Then
cmdSQL.Parameters("@Other").Value = OtherTXTB.Text
Else
cmdSQL.Parameters("@Other").Value = "NEATOL"
End If
.Add("@MissingDimension", OleDbType.VarChar, 100)
If AddedMissingDimCHKB.Checked = True Then
cmdSQL.Parameters("@MissingDimension").Value = AddedMissingDimCHKB.Text
Else
cmdSQL.Parameters("@MissingDimension").Value = "NEATOL"
End If
.Add("@FixedDimension", OleDbType.VarChar, 100)
If FixedDimensionCHKB.Checked = True Then
cmdSQL.Parameters("@FixedDimension").Value = FixedDimensionCHKB.Text
Else
cmdSQL.Parameters("@FixedDimension").Value = "NEATOL"
End If
End With
con.Open()
cmdSQL.ExecuteNonQuery()
End Using
ResetControls()
End Sub
Private Sub ResetControls()
Dim lstChkBx As New List(Of CheckBox) From {MissedPartCHKB, MissedAutomatedPartCHKB, NotInEpicorCHKB, NonStockCHKB, MissedSTKItemCHKB, MissedBuyoutCHKB, MissedPrintsNOTSentChadCHKB, MissingPrintAfterQTYCHKB, AddedMissingDimCHKB, FixedDimensionCHKB, OtherCHKB}
For Each chk As CheckBox In lstChkBx
chk.Checked = False
Next
OtherTXTB.Text = ""
' eventually change the month list to automatically select based on the current date
'If this is a ListBox
MonthList2021.SelectedIndex = -1
End Sub
Спасибо за помощь!
Комментарии:
1. Что здесь происходит: «.Add(«@StockNumber», OleDbType.Date, 100).Value = «»»
2. @AndrewMortimer Ну, в конечном итоге этот текст будет автоматически заполнен из открытой программы, но у меня это еще не настроено, поэтому пока он пуст.
3. Я также изменил . дата в .varchar
Ответ №1:
Вы всегда должны хранить дату и время как DateTime, а не как текст или что-либо еще, без исключений.
Таким образом, измените тип данных на DateTime и попробуйте:
.Add("@TimeLog", OleDbType.Date).Value = DateTime.Now
Комментарии:
1. Как вы думаете, стоит ли явно указывать, что тип данных в таблице необходимо изменить?
2. Я так думаю. Похоже, что вопрошающий изменил его с DateTime на Short Text ; действительно, плохой ход.
3. @gustav думал, что это было причиной ошибки, мой плохой.