如何循环列值行以在每一行(明细表)上获取相等的值,然后更新其表头表(VBNET)中的状态列)

时间:2019-07-12 06:16:45

标签: vb.net

  

我在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

1 个答案:

答案 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