You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET中如何将Billing表单售药量从MedForm表单主库存中扣减

VB.NET 双表单库存同步实现方案

代码修复与逻辑调整

1. 先修正原有代码的错误

你现有Billing表单插入账单的SQL语句存在语法问题,TotalAmount 字段前遗漏了参数标识符@,会导致插入失败,先修正该问题。
另外建议将tblMed表中存储库存的MedQuantity字段从VarChar类型改为Integer数值类型,避免后续库存计算出现类型转换异常。

2. 新增库存更新与显示逻辑

在Billing表单的btnBill_Click事件中,账单数据插入成功后新增库存更新逻辑即可,修改后的完整代码如下:

Private Sub btnBill_Click(sender As Object, e As EventArgs) Handles btnBill.Click
    Try
        Dim saleQty As Integer
        ' 先校验输入的数量是否为有效数字
        If Not Integer.TryParse(txtQty.Text.Trim(), saleQty) Then
            MsgBox("请输入有效的售卖数量")
            Return
        End If

        If saleQty > CInt(stock) Then
            MsgBox("库存不足")
        ElseIf saleQty <= 0 Then
            MsgBox("请输入大于0的售卖数量")
        Else
            '添加药品到账单表格
            Dim rnum As Integer = BillGridView.Rows.Add()
            i = i + 1
            BillGridView.Rows.Item(rnum).Cells("Column1").Value = i
            BillGridView.Rows.Item(rnum).Cells("Column2").Value = MediComboCb.SelectedValue.ToString()
            BillGridView.Rows.Item(rnum).Cells("Column3").Value = saleQty
            BillGridView.Rows.Item(rnum).Cells("Column4").Value = AgentNameCb.Text
            BillGridView.Rows.Item(rnum).Cells("Column5").Value = txtBillDate.Text
            BillGridView.Rows.Item(rnum).Cells("Column6").Value = MedPrice
            BillGridView.Rows.Item(rnum).Cells("Column7").Value = saleQty * MedPrice + GrTot

            Dim subtotal = saleQty * MedPrice
            GrTot = GrTot + subtotal
            TotalAmountlb.Text = GrTot.ToString()

            If con.State = ConnectionState.Closed Then
                con.Open()
            End If

            ' 插入账单数据
            Using create As New OleDbCommand("INSERT INTO tblBill([AgentName], [DrugName], [Quantity], [BillDate], [UnitPrice], [TotalAmount])VALUES(@AgentName, @DrugName, @Quantity, @BillDate, @UnitPrice, @TotalAmount)", con)
                create.Parameters.AddWithValue("@AgentName", OleDbType.VarChar).Value = AgentNameCb.Text.Trim
                create.Parameters.AddWithValue("@DrugName", OleDbType.VarChar).Value = MediComboCb.SelectedValue.ToString()
                create.Parameters.AddWithValue("@Quantity", OleDbType.Integer).Value = saleQty
                create.Parameters.AddWithValue("@BillDate", OleDbType.VarChar).Value = txtBillDate.Text.Trim
                create.Parameters.AddWithValue("@UnitPrice", OleDbType.Currency).Value = MedPrice
                create.Parameters.AddWithValue("@TotalAmount", OleDbType.Currency).Value = GrTot

                If create.ExecuteNonQuery > 0 Then
                    ' 计算剩余库存并显示到标签
                    Dim remainingStock As Integer = CInt(stock) - saleQty
                    ' 这里替换成你实际的available stock标签控件名
                    availableStockLabel.Text = $"剩余库存:{remainingStock}"

                    ' 更新主库存表tblMed的对应药品库存
                    Using updateCmd As New OleDbCommand("UPDATE tblMed SET MedQuantity = @RemainingStock WHERE MedName = @DrugName", con)
                        updateCmd.Parameters.AddWithValue("@RemainingStock", OleDbType.Integer).Value = remainingStock
                        updateCmd.Parameters.AddWithValue("@DrugName", OleDbType.VarChar).Value = MediComboCb.SelectedValue.ToString()
                        updateCmd.ExecuteNonQuery()
                    End Using

                    ' 如果MedForm处于打开状态,自动刷新其列表数据
                    If Application.OpenForms("MedForm") IsNot Nothing Then
                        CType(Application.OpenForms("MedForm"), MedForm).bind_data()
                    End If

                    txtQty.Clear()
                    AgentNameCb.Text = ""
                End If
            End Using
        End If
    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
        ' 操作完成后关闭数据库连接,避免连接泄漏
        If con.State = ConnectionState.Open Then
            con.Close()
        End If
    End Try
End Sub

3. 注意事项

  • 如果你的药品存在重名情况,建议使用Med_ID作为关联条件更新库存,替换UPDATE语句中的WHERE MedName = @DrugName为WHERE Med_ID = @MedID,同时传入对应药品ID即可,匹配精度更高。
  • 新增了输入校验逻辑,避免非数字数量输入导致的计算错误。

内容的提问来源于stack exchange,提问作者Kdmidia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 16:18:01