我在SQL Server中有2个表:Detail_PO和Header_PO。让我说 用id_po创建了一个PO:PO001,并且在明细表中有多个 项目。在标题中,我将状态(打开/关闭)列和详细信息中 放置状态(0/1)列。如果数据包含1个项目,我可以解决此问题 详细地。
Header table:
id_PO | status
---------------
PO001 Open
Detail Table
id_PO | id_product | qty_PO | qty_leftOver | status
---------------------------------------------------
PO001 DK0023 100 80 1
PO001 YR0089 300 0 0
PO001 RW0093 50 10 1
我被困在这里3天。我的问题是,我想更新标题 如果所有详细信息状态均通过按钮操作达到“ 0”,则状态为“已关闭” 点击。但是,如果仍然有详细信息状态“ 1”,则标题状态仍然 打开。我以为会循环,但我不知道哪个循环 使用的方法。对不起,我是vbnet主题的新话题。我真的 感谢您的帮助。预先感谢
Dim statusHeaderPesan As String = "Open"
Dim statusHeaderPesanClosed As String = "Closed"
Dim statusDetailPesan As Integer
query = "SELECT status FROM Detail_PO WHERE id_PO = @kode"
cmd = New SqlCommand(query, conn)
cmd.Parameters.Add("@kode", SqlDbType.VarChar).Value = lblKodePO.Text
statusDetailPesan = cmd.ExecuteScalar
While statusDetailPesan = 0
query = "UPDATE Header_PO SET status = @cekStatus WHERE id_PO = @kodePesan"
cmd = New SqlCommand(query, conn)
cmd.Parameters.Add("@cekStatus", SqlDbType.VarChar).Value =
statusHeaderPesanClosed
cmd.Parameters.Add("@kodePesan", SqlDbType.VarChar).Value = lblKodePO.Text
cmd.ExecuteNonQuery()
End While
答案 0 :(得分:0)
您可以如下修改查询以计算1
的状态数。
query = "SELECT Count(status) FROM Detail_PO WHERE id_PO = @kode And status = 1"
cmd = New SqlCommand(query, conn)
cmd.Parameters.Add("@kode", SqlDbType.VarChar).Value = lblKodePO.Text
statusDetailPesan = CInt(cmd.ExecuteScalar)
然后,如果计数为0
,则运行更新语句。
If statusDetailPesan = 0 Then
query = "UPDATE Header_PO SET status = @cekStatus WHERE id_PO = @kodePesan"
cmd = New SqlCommand(query, conn)
cmd.Parameters.Add("@cekStatus", SqlDbType.VarChar).Value = statusHeaderPesanClosed
cmd.Parameters.Add("@kodePesan", SqlDbType.VarChar).Value = lblKodePO.Text
cmd.ExecuteNonQuery()
End If