2017-03-13 165 views
0

我正在使用VB.Net 2015,並使用MS Access DataBase。 我有了很多的項目,例發票編號2一張發票有橘子,蘋果和香蕉,當使用如何在VB.Net中更新具有相同ID的項目

"UPDATE Item_Invoice SET [email protected]_Name,[email protected]_Type,[email protected]_Quantity,[email protected]_Purchase_Price,[email protected]_Total_Cost Where Invoice_No=" & CInt(txtInvoiceNo.Text) & " " , all items become Lemon. 

所有項目視圖發票號碼2在DataGrid和DataGrid中更改香蕉項檸檬成爲檸檬,由於Update語句使用Invoice_No 2更新所有項目,任何想法如何克服和解決問題。由於提前

For i = 0 To DGPurchase.Rows.Count - 2 
       ObjCommand.Parameters.Clear() 
       ObjCommand.CommandText = "UPDATE Item_Invoice SET [email protected]_Name,[email protected]_Type,[email protected]_Quantity,[email protected]_Purchase_Price,[email protected]_Total_Cost Where Invoice_No=" & CInt(txtInvoiceNo.Text) & " " 
       ObjCommand.Connection = myConnection 

       ItmName = DGPurchase.Rows(i).Cells(0).Value.ToString 
       ItmType = DGPurchase.Rows(i).Cells(1).Value.ToString 
       ItmQuantity = CDbl(DGPurchase.Rows(i).Cells(2).Value) 
       itmTotalCost = CDbl(DGPurchase.Rows(i).Cells(3).Value) 
       ItmPurPrice = CDbl(DGPurchase.Rows(i).Cells(4).Value) 

       ObjCommand.Parameters.AddWithValue("Item_Name", ItmName) 
       ObjCommand.Parameters.AddWithValue("Item_Type", ItmType) 
       ObjCommand.Parameters.AddWithValue("Item_Quantity", ItmQuantity) 
       ObjCommand.Parameters.AddWithValue("Item_Total_Cost", itmTotalCost) 
       ObjCommand.Parameters.AddWithValue("Item_Purchase_Price", ItmPurPrice) 
       ' ObjCommand.Parameters.AddWithValue("Invoice_No", InvNo) 
       ObjCommand.ExecuteNonQuery() 
       'ObjCommand.Dispose() 

      Next I 

DB Table

+0

你能粘貼你的表結構,好嗎?這將是有用的 –

+0

嗯..我想你應該添加你想要改變你的條款 – Pikoh

+0

你的項目名稱是最困難的方式可能。如果您使用的是DGV,那麼也可以使用DataTable和DataAdapter。然後它就是'myDA.Update(myDT)'來更新任何需要更新的東西。 DB Provider對象完成所有工作。你也應該參加[遊覽]。 – Plutonix

回答

0

你應該從你的數據庫的每一行創建一個唯一的ID(P_ID PRIMARY KEY AUTOINCREMENT),並使用該ID識別的行。否則,我不會看到用於識別該行的簡單解決方案。也許你應該在發票ID之外的where子句中查找哪些行需要更新。

+0

@Pikoh該項目來自datagridview,我正在與發票10,20中的許多項目交談。此外,我想更新行信息而不是項目名稱。 –

+0

你可以通過代碼來清楚,如果我添加了一個主鍵,例如1橙,2蘋果,3香蕉,並且將香蕉改爲檸檬,只需使用主鍵和發票號= 2就可以更改爲香蕉。順便說一下發票號碼,但它的名稱可以是許多發票相同。謝謝 –

+0

在你的gridview中,你應該保留一個帶有主鍵的隱藏列,並且這個行是唯一的。更新查詢應該使用where子句中的主鍵來標識該行。 – Luci

0

謝謝大家。

現在工作正常通過刪除並重新創建(插入)使用新的信息,其實這是比較有用的使用插入,而不是更新的情況下,用戶添加新的項目到DataGridView。 這是finall代碼工作完美:

ObjCommand.CommandText = " Delete from Item_Invoice where Invoice_No=" & CInt(txtInvoiceNo.Text) & " " 

       ObjCommand.ExecuteNonQuery() 
       ObjCommand.Parameters.Clear() 

       For i = 0 To DGPurchase.Rows.Count - 2 
        ObjCommand.Parameters.Clear() 

        ObjCommand.CommandText = "Insert into Item_Invoice (Invoice_No,Item_Name,Item_Type,Item_Quantity,Item_Total_Cost,Item_Purchase_Price) values (@Invoice_No,@Item_Name,@item_Type, @Item_Quantity,@Item_Total_Cost,@Item_Purchase_Price)" 

        ItmName = DGPurchase.Rows(i).Cells(0).Value.ToString 
        ItmType = DGPurchase.Rows(i).Cells(1).Value.ToString 
        ItmQuantity = CDbl(DGPurchase.Rows(i).Cells(2).Value) 
        itmTotalCost = CDbl(DGPurchase.Rows(i).Cells(3).Value) 
        ItmPurPrice = CDbl(DGPurchase.Rows(i).Cells(4).Value) 

        ObjCommand.Parameters.AddWithValue("Invoice_No", InvNo) 
        ObjCommand.Parameters.AddWithValue("Item_Name", ItmName) 
        ObjCommand.Parameters.AddWithValue("Item_Type", ItmType) 
        ObjCommand.Parameters.AddWithValue("Item_Quantity", ItmQuantity) 
        ObjCommand.Parameters.AddWithValue("Item_Total_Cost", itmTotalCost) 
        ObjCommand.Parameters.AddWithValue("Item_Purchase_Price", ItmPurPrice) 
        ObjCommand.ExecuteNonQuery() 


       Next I 

感謝您有用的意見。

相關問題