2017-03-13 4 views
0

Ich benutze VB.Net 2015 und arbeiten mit MS Access DataBase. Ich habe eine Rechnung, die viele Einzelteile, für Beispiel Rechnungsnummer 2 hat Orange, Apfel und Banane, wenn Ansicht Rechnungsnummer 2 in DataGrid- und ändern Banana Artikel in Datagrid Lemon mitWie aktualisiere ich Elemente mit gleicher ID in VB.Net

"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. 

Alle Artikel werden Lemon hat, Da die Update-Anweisung alle Elemente mit Invoice_No 2 aktualisiert, gibt es keine Idee, wie Sie das Problem lösen und beheben können. Vielen Dank im Voraus

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

Können Sie bitte Ihre Tabellenstruktur einfügen? Es wäre nützlich –

+0

Nun .. ich denke, Sie sollten den Namen des Elements hinzufügen, die Sie ändern möchten, um Ihre Where-Klausel – Pikoh

+0

Sie gehen über die schwierigste Möglichkeit möglich. Wenn Sie eine DGV verwenden, verwenden Sie auch eine DataTable und einen DataAdapter. Dann ist es nur 'myDA.Update (myDT)', um alles zu aktualisieren, was aktualisiert werden muss. Die DB-Provider-Objekte erledigen die ganze Arbeit. Sie sollten auch die [Tour] nehmen. – Plutonix

Antwort

0

Sie sollen eine eindeutige ID (p_id PRIMARY KEY AUTOINCREMENT) für jede Zeile aus Ihrer Datenbank erstellen und diese ID verwenden, um die Zeile zu identifizieren. Ansonsten sehe ich keine einfache Lösung zur Identifizierung der Zeile. Vielleicht sollten Sie in where-Klausel neben der Rechnungs-ID alt Wert, um zu finden, welche Zeile aktualisiert werden muss.

+0

@Pikoh der Artikel kommt aus der Datagridview, und ich spreche mit vielen Artikeln in der Rechnung 10, 20 .. Darüber hinaus möchte ich die Zeileninformationen nicht nur Artikel-Name aktualisieren. –

+0

können Sie es durch Code klarstellen, wenn ich einen Primärschlüssel für Beispiel 1 Orange, 2 Apfel, 3 Banane und geänderte Banane zu Zitrone hinzufüge, wie man Banane nur unter Verwendung des Primärschlüssels und der InvoiceNo = 2 ändern kann. By the way Rechnungsnummer in uniqe aber itme Name kann für viele Rechnungen gleich sein. Danke –

+0

In Ihrer Gridview sollten Sie eine versteckte Spalte mit Primärschlüssel behalten und diese Reihe einzigartig machen. Die Aktualisierungsabfrage sollte den Primärschlüssel in where-Klausel verwenden, um die Zeile zu identifizieren. – Luci

0

Danke euch allen.

Es funktioniert jetzt durch Löschen und neu erstellen (Einfügen) mit den neuen Informationen, Eigentlich ist es sinnvoller, Einfügen anstelle der Aktualisierung zu verwenden, falls der Benutzer neue Elemente zur DatagridView hinzugefügt. Dies ist der finall Code funktioniert perfekt:

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 

Sie für Ihre hilfreichen Kommentare danken.