【问题标题】:Delete only selected ListView item from Access database从 Access 数据库中仅删除选定的 ListView 项
【发布时间】:2020-04-20 14:32:33
【问题描述】:

我在 access 数据库中有库存接收表,其中 productID 重复了很多次。我可以在列表视图中填充这些数据。 目前,当我在列表视图中选择任何行并按下删除按钮时,所选产品 ID 的所有条目都会从列表视图以及数据库中从头到尾删除。 我想要的是,如果我在列表视图中选择任何项目并按下删除按钮,只有选定的行应该从列表视图中删除,而不是从数据库中删除,即使它是相同的 productid。 如果有人可以请帮助我?请看下面的代码。

Private Sub Button9_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button9.Click

    Dim item1 As ListViewItem
    item1 = ListView1.SelectedItems(0)
    Dim Del As DialogResult
    Del = MessageBox.Show("Are you sure you want to delete the record", "Delete Record", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    If Del = DialogResult.Yes Then
        'Dim item As ListViewItem
        con.Open()
        Dim sql As String = "DELETE FROM Receipt WHERE ProductID='" & item1.SubItems(0).Text & "'"

        With cmd
            .CommandText = sql
            .Connection = con
            .ExecuteNonQuery()
        End With
        MsgBox("Record Removed", MsgBoxStyle.Information)
    End If
    con.Close()
End Sub

【问题讨论】:

  • 如果您需要帮助,您必须向我们展示给您带来问题的代码。
  • 我已经添加了代码。请提出必要的更改以获得所需的结果。
  • 使用参数避免sql注入和格式化错误。 ExecuteNonQuery 在运行时返回一个数字。看看这个数字是多少。这是一个调试问题——学习调试器的好日子。
  • 你能展示一些示例编码吗???

标签: vb.net winforms listview ms-access


【解决方案1】:

如果没有查看有关您的上下文和设计的所有相关信息,很难确定是否可以帮助您解决问题,但是您的帖子中有两件事。

您已声明您的数据库多次重复了 ProductID。这可能正是您想要的,但从表面上看,ProductID 通常是一个唯一编号。您没有说明 ProductID 是 Key 字段,但通常 ID 是唯一的键字段。但这可能会导致为什么同时删除多条记录,因为...

"DELETE FROM Receipt WHERE ProductID='" 特别要求删除具有任何 ProductID 规范的记录。因此,可能会删除具有该 ProductID 的所有记录。如果你只想删除一条记录,你必须有一个唯一的标识符,是吗?如果您只想删除唯一记录,则需要在 ListView 中包含唯一记录标识符(即使隐藏)。

请告知这是否有帮助,或返回问题以专注于您的问题。

在下面的评论后添加: SQL 查询/命令也需要受采购订单号的限制。上面的 SQL 只根据 WHERE ProductID=something 进行选择。您还需要根据采购订单号进行选择,以便更独特地删除。

类似:WHERE ProductID=something AND PO=something

【讨论】:

  • 艾伦,谢谢您的回复。 ProductID 在 productlist 表中是唯一的,但在接收表中不是因为一件商品可以多次购买/接收。为了进一步解释,采购订单包含许多类似产品可以在其他 PO 中重复的产品,我想要删除或更新从特定 PO 接收到的产品条目。现在发生的情况是,无论 LPO 编号如何,从数据库中删除产品的所有条目。
  • 好的。根据您的评论对我上面提出的答案进行了更改。顺便说一句,发帖时注意不要使用太多的缩写。不是每个人都会永远理解他们的意思。我假设 LPO 的意思类似于Line item in the PO?还要注意用标点符号来分隔你的句子/想法。
  • 感谢 alan 提供在列表视图和数据库中创建隐藏列的想法。我创建了一个名为 transactionID 的字段,它完成了这项工作。虽然,我必须单独添加更多的编码来自动生成 TransactionID。但无论如何感谢您的帮助。顺便说一句,你的建议很受欢迎。
猜你喜欢
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多