Удалить только выбранный элемент ListView из базы данных Access - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть полученная таблица инвентаризации в базе данных доступа, где 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

1 Ответ

0 голосов
/ 21 апреля 2020

Не видя всей необходимой информации о вашем контексте и дизайне, трудно быть уверенным в том, чтобы помочь вам решить проблему, но две вещи выпадают из вашего сообщения.

Вы заявили, что в вашей базе данных есть ProductID повторяется много раз. Это может быть именно то, что вы хотите, но на первый взгляд, можно занять позицию, когда ProductID обычно является уникальным числом. Вы не указали, что ProductID является полем Key, но обычно ID является полем уникального ключа. Но это может привести к тому, что несколько записей удаляются одновременно, потому что ...

"DELETE FROM Receipt WHERE ProductID='" специально просит удалить записи с какой бы то ни было спецификацией ProductID. Поэтому можно ожидать, что все записи с этим ProductID будут удалены. Если вы хотите удалить только одну запись, вы должны иметь уникальный идентификатор, да? Вам необходимо включить в свой ListView, даже если он скрыт, уникальный идентификатор записи, если вы хотите удалить только уникальную запись.

Пожалуйста, сообщите, если это поможет, или верните вопрос, чтобы сосредоточиться на вашей проблеме.

Добавлено после комментария ниже: Запрос / команда SQL также должны быть ограничены # Заказом на поставку. SQL выше выбирает только на основе WHERE ProductID = something. Вам также необходимо выбрать номер заказа на основе заказа для более уникального удаления.

Что-то вроде: ГДЕ ProductID = something И PO = something.

...