2016-06-26 11 views
0

Ich habe eine Datagridview, die nicht mit der Datenbank verbunden ist, nur eine Spalte ist in Verbindung mit der Datenbank, die Wert abgerufen wird. Wenn der Benutzer diesen Wert auswählt und eine Bestätigung zum Einfügen von Daten erhält, dann wird die Tabellenspalte, die nicht in datagridview angezeigt wird, aktualisiert.Subtrahieren von Daten in Access-Datenbank mit DataGridview

Angenommen, der Benutzer wählte ein XYZ Medikament und seine Verfügbarkeit ist 22 nach Benutzer 12 Menge zu bestimmten Medizin dann im Backend (die MS Access-Datenbank verwendet) 22-12 = 10 Verfügbarkeit kann für das bestimmte ausgewählte Medikament für sein dass ich mit Code bin, aber ich erhalte eine Ausnahme:

Keinen Wert für einen oder mehrere erforderlichen Parameter angegeben

Hier meinen Code und Bild ich bin Einfügen auch mir bitte

helfen

enter image description here

+0

Wo berechnen Sie die neue Menge oder wo haben Sie die Menge der Medizin korrekt aktualisiert, um den Datenbankwert zu verringern? – Steve

Antwort

0

Ja, das ist wegen der unter der Linie. Sie übergeben den Parameter @total_available nicht. Kommentiere die unten kommentierte Zeile und es sollte funktionieren. Auch gibt es keine Notwendigkeit ist [] um den Parameternamen verwenden [@total_available]

//cmd.Parameters.AddWithValue("@total_available", medicineavailable); 

Ihre Anfrage erwartet zwei Parameter @total_available und @Medicine_Name

update Medicine_Available_Detail set [total_available]=[@total_available]-1 
where [Medicine_Name][email protected]_Name 
0

Angenommen, Sie ein Feld (oder irgendwo eine Textbox), wo Sie Benutzer gibt die Menge des verkauften Medikaments ein. Dieser Wert ist der Wert, der von dem Feld Total_Available in Ihrer Tabelle abgezogen werden sollte.

Sie erhalten also zuerst diesen Wert aus der Rasterzeile und bereiten dann eine Abfrage vor, bei der ein Parameter vom Feld Total_Available subtrahiert wird.
An diesem Punkt wird Ihre Tabelle

private void dataGridView1_RowLeave(object sender, DataGridViewCellEventArgs e) 
{ 
    string connectionString = null; 
    connectionString = ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString; 
    con.ConnectionString = connectionString; 

    string medicinename = dataGridView1.Rows[e.RowIndex].Cells["Medicine_Name"].Value.ToString(); 

    // This is the hypothetical field where the user types the quantity of medicine sold. 
    // It could be a cell of your datagridview or just a textbox somewhere in 
    // your form. Here I suppose a cell of the grid. 
    int Medicine_SoldQuantity = Convert.ToInt32(dataGridView1.Rows[e.RowIndex] 
             .Cells["Medicine_Sold_Qty"].Value); 

    DialogResult dialogResult = MessageBox.Show("Are you sure you want to insert data", 
           "Data insert Confirmation", 
           MessageBoxButtons.YesNo, 
           MessageBoxIcon.Information); 
    if (dialogResult == DialogResult.Yes) 
    { 

     // Here the field total_available is used in the expression 
     // to decrement itself of the value extracted from Medicine_SoldQuantity 
     cmd = new OleDbCommand(@"update Medicine_Available_Detail 
       set [total_available]=[total_available][email protected] 
       where [Medicine_Name][email protected]_Name", con); 

     cmd.Parameters.AddWithValue("@medicineSoldQty", Medicine_SoldQuantity); 
     cmd.Parameters.AddWithValue("@Medicine_Name", medicinename); 
     con.Open(); 
     int n = cmd.ExecuteNonQuery(); 
     if(n > 0) 
       MessageBox.Show("Record Updated Successfully"); 
     con.Close(); 
     userlist(); 
     dataGridView1.Refresh(); 
    } 
}