一直在尝试这个,但我还没有找到解决方案。我正在尝试实施一个POS。所以我有2个数据库表,一个是tblproducts,用于存储超市中的产品,并具有以下字段:productId,ProductName,ProductCategory,Quantity,MinimumQuantity,UnitPrice,Manufacturer。第二个表是tblsales,用于存储已售出的产品,并具有以下字段:ProductId,ProductName,Qty,Unitprice,amount,QuantityRemaining。有关tblsales的信息显示在datagridview中。
现在我遇到了一个问题,即我希望系统自动扣除客户从tblproducts中的总数量中购买的数量,并显示在数据网格中。并检查是否达到最小数量.. 任何Mysql都会向某人提供帮助。
答案 0 :(得分:0)
如果您不需要特定的仓库数量,我会让tblProducts维持可供出售的实际数量。
tblSales中的数量是实际销售的销售数量。
顺便说一下,没有销售ID来分组tblSales中的行吗?
如何处理问题:
如果要为产品插入新的销售,您可以创建交易并从tblProduct中扣除销售数量,并将新销售插入同一交易中的tblSales。
这样,tblProducts将始终反映卡住的当前数量。
您可以使用这样的隐式事务作用域来包装SqlConnection
string connectionString = "";
int productId = 0;
int soldQuantity = 1;
using (TransactionScope scope = new TransactionScope())
{
using (var sqlCon = new SqlConnection(connectionString))
{
var insertSaleCmd = new SqlCommand("INSERT INTO tblsales(Pid,Description,Qty,UnitPrice) VALUES(@ProductId, @Description, @SoldQuantity, @UnitPrice)", sqlCon);
insertSaleCmd.Parameters.AddWithValue("@ProductId", productId);
insertSaleCmd.Parameters.AddWithValue("@SoldQuantity", soldQuantity);
insertSaleCmd.Parameters.AddWithValue("@Description", "ENTER PRODUCT DESCRIPTION");
insertSaleCmd.Parameters.AddWithValue("@UnitPrice", 1234.00);
insertSaleCmd.ExecuteNonQuery();
var updateProductCmd = new SqlCommand("UPDATE tblproducts Set Quantity=Quantity-@SoldQuantity WHERE productId=@ProductId", sqlCon);
updateProductCmd.Parameters.AddWithValue("@ProductId", productId);
updateProductCmd.Parameters.AddWithValue("@SoldQuantity", soldQuantity);
updateProductCmd.ExecuteNonQuery();
}
scope.Complete();
}
这只是一个简单的解决方案,但有很多方法可以实现这一点。