2013-10-01 117 views
-1

我試圖更新使用MS Access數據庫記錄,但所有記錄都用得到相同values..i更新的更新與相同值的記錄中的所有行試圖相同的編碼與位修改SQL Server和這種編碼工作與SQL服務器完美... MS Access的問題是什麼? 這是我的代碼:的MS Access表

Try 

con = New OleDbConnection(cs) 
con.Open() 

Dim cb As String = "update ExtraServices set [Item]=?, [Quantity]=?,[UnitPrice]=?, [TotalPrice]=? where [HostelerID]=? and [Servicedate]=?" 
Dim cmd As New OleDb.OleDbCommand(cb, con) 
cmd.Parameters.Add(New OleDbParameter("@item", OleDbType.VarChar, 150, "Item")) 
cmd.Parameters.Add(New OleDbParameter("@quantity", OleDbType.Integer, 6, "Quantity")) 
cmd.Parameters.Add(New OleDbParameter("@unitprice", OleDbType.Integer, 6, "UnitPrice")) 
cmd.Parameters.Add(New OleDbParameter("@total", OleDbType.Integer, 6, "TotalPrice")) 
cmd.Parameters.Add(New OleDbParameter("@hostelerID", OleDbType.VarChar, 20, "HostelerID")) 
cmd.Parameters.Add(New OleDbParameter("@ServiceDate", OleDbType.Date, 30, "ServiceDate")) 
' Prepare command for repeated execution 
cmd.Prepare() 
' Data to be inserted 
For Each row As DataGridViewRow In DataGridView1.Rows 
    If Not row.IsNewRow Then 
     cmd.Parameters("@item").Value = row.Cells(0).Value 
     cmd.Parameters("@quantity").Value = row.Cells(1).Value 
     cmd.Parameters("@unitprice").Value = row.Cells(2).Value 
     cmd.Parameters("@total").Value = row.Cells(3).Value 
     cmd.Parameters("@HostelerID").Value = cmbHostelerID.Text 
     cmd.Parameters("@ServiceDate").Value = dtpServiceDate.Text 
     cmd.ExecuteNonQuery() 
    End If 
Next 
con.Close() 
MessageBox.Show("Successfully updated", "Entry", MessageBoxButtons.OK, MessageBoxIcon.Information) 
btnUpdate_record.Enabled = False 
Catch ex As Exception 
     MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
End Try 

回答

1

其他@Steve是正確的。在每一個循環,你告訴更新數據庫中的所有記錄

WHERE HostelerID = cmbHostelerID.Text AND ServiceDate = dtpServiceDate.Text 

這不會從一個迭代改變爲下一個你完成循環,所以當,無論最後的計算結果是項目,數量,單價和TotalPrice是應用於符合該條件的所有記錄。

ExtraServices表有一個主鍵?是的,應該用於更新SQL。

如果這與MSSQL(有位修改)的作品,什麼是修改?

如果這沒有幫助(不是解決方案),那麼提供一些更多的信息。示例數據有幫助。你期望發生的例子。你想在這裏做什麼。我們無法從代碼中得知,但我們可以說它是錯誤的。幫助我們幫助你。

2

用於WHERE子句的參數始終相同。所以您查詢的更新總是相同的記錄(和你結束循環更新與從最後一排從電網中的值相同的記錄集)

 cmd.Parameters("@HostelerID").Value = cmbHostelerID.Text ' <- same for every row 
    cmd.Parameters("@ServiceDate").Value = dtpServiceDate.Text 
+0

但我更新其他領域......這個查詢完美地與sql服務器修改位修改..什麼是MS訪問錯誤? –

+0

我該如何解決這個問題?我正在更新記錄使用datagridview –

+0

如何更新datagridview中更新值的其他字段的datagridview值.... –