Команда обновления VB с базой данных доступа
Function UpdateTableRow()
sqlLink.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\Users\will\Documents\Computing\ComputingProjectDatabase.accdb';"
Try
Dim sqlOrder As New OleDbCommand
If sqlLink.State = ConnectionState.Closed Then
sqlLink.Open()
End If
' Creating the command and its parameter here before entering the loop to avoid a continue'
' create and destroy pattern for the OleDbCommand'
sqlOrder.CommandText = "UPDATE StockSystem SET [Stock Price] =?, [Stock Size] =?, [Stock Quantity] =?, [Stock Category] =?, WHERE [Stock ID] =?"
sqlOrder.Connection = sqlLink
sqlOrder.Parameters.AddWithValue("@StockCategory", 0)
sqlOrder.Parameters.AddWithValue("@StockQuantity", 0)
sqlOrder.Parameters.AddWithValue("@StockSize", 0)
sqlOrder.Parameters.AddWithValue("@StockPrice", 0)
sqlOrder.Parameters.AddWithValue("@row", 0)
Dim rows = DataGridView1.Rows
For Each row In rows
sqlOrder.Parameters("@row").Value = row.Cells(0).Value
sqlOrder.Parameters("@StockPrice").Value = row.Cells(1).Value
sqlOrder.Parameters("@StockSize").Value = row.Cells(2).Value
sqlOrder.Parameters("@StockQuantity").Value = row.Cells(3).Value
sqlOrder.Parameters("@StockCategory").Value = row.Cells(4).Value
sqlOrder.ExecuteNonQuery()
Next
MsgBox("Data Updated.")
'Problem with the update parameters, works for DELETE FUNCTION, needs to be changed to fit an UPDATE FUNCTION
Catch ex As Exception
MsgBox(ex.Message)
Finally
sqlLink.Close()
End Try
Return DataGridView1.SelectedRows
DataGridView1.Refresh()
End Function
Эй, так как вы можете видеть, у меня есть хороший код здесь. Только это не работает на 100%. Я продолжаю рассказывать Syntax Error in UPDATE statement
, Теперь я почти уверен, что оператор обновления корректен, так как без параметров, если у него нет проблем с кодом (правда, без параметров он вообще не работает). Я застрял на этом около недели, поэтому любая помощь будет отличной>.<
Вторая ошибка, которую я получаю, заключается в том, что, поскольку я использую Access, в нижней части таблицы есть "пустая" строка. Я думал, что что-то вроде (строка- 1) будет работать, только это VB 2010 не нравится вообще.
Как я уже сказал, любая помощь будет потрясающей.
2 ответа
Вы добавили ,
до WHERE
, Это является причиной синтаксической ошибки в выражении UPDATE.
Попробуй это
sqlOrder.CommandText = "UPDATE StockSystem SET [Stock Price] =?, [Stock Size] =?, [Stock Quantity] =?, [Stock Category] =? WHERE [Stock ID] =?"
С другой стороны, я не уверен, что вы имеете в виду. Эта пустая строка?
Это просто для того, чтобы пользователь мог вставить новую строку. Это не пустая строка, поэтому вам не нужно ссылаться на строки с rowindex - 1
ОБНОВЛЕНИЕ: Попытка исправить свой код. Я хотел бы сделать что-то вроде этого:
Try
If sqlLink.State = ConnectionState.Closed Then
sqlLink.Open()
End If
Dim rows = DataGridView1.Rows
For Each row In rows
Dim sqlOrder As New OleDbCommand("UPDATE StockSystem SET [Stock Price] =?, [Stock Size] =?, [Stock Quantity] =?, [Stock Category] =? WHERE [Stock ID] =?", sqlLink)
sqlOrder.Parameters.AddWithValue("@StockPrice", row.Cells(1).Value)
sqlOrder.Parameters.AddWithValue("@StockSize", row.Cells(2).Value)
sqlOrder.Parameters.AddWithValue("@StockQuantity", row.Cells(3).Value)
sqlOrder.Parameters.AddWithValue("@StockCategory", row.Cells(4).Value)
sqlOrder.Parameters.AddWithValue("@row", row.Cells(0).Value)
sqlOrder.ExecuteNonQuery()
Next
MsgBox("Data Updated.")
Catch ex As Exception
MsgBox(ex.Message)
Finally
sqlLink.Close()
End Try
Попробуйте удалить запятую перед Where, измените это:
([Stock Category] =?, WHERE [Stock ID] =?)
К этому:
([Stock Category] =? WHERE [Stock ID] =?)