lelouch_vi 2 Ответов: 1

Как удалить элементы из поля со списком, которое подключено к базе данных, и автоматически обновить его?


У меня есть форма, которая подключена к моей базе данных. То, что я пытаюсь сделать, - это когда я нажимаю кнопку удалить, выбранный элемент в поле со списком должен удалить всю строку в моей базе данных, и он должен перезагрузить поле со списком со значениями из базы данных.
Ниже приведен мой код для кнопки Удалить он фактически удаляет данные, но не обновляет значение моего поля со списком вместо этого он дублирует значение в моем поле со списком каждый раз, когда я нажимаю кнопку Удалить.

Что я уже пробовал:

Using cons As New OleDb.OleDbConnection(conSTR)

        cons.Open()
        Dim cmd As New OleDb.OleDbCommand("DELETE FROM Judges WHERE = @FullName")
        cmd.Parameters.AddWithValue("@FullName", cmbJudges.Text)
        MessageBox.Show("DATA HAS BEEN DELETED")
    End Using

    cmbJudges.Text = ""
    txtFullNameJudge.Text = Nothing
    txtContactJudge.Text = Nothing
    txtUserNameJudge.Text = Nothing
    txtPasswordJudge.Text = Nothing

    Using cons As OleDb.OleDbConnection = New OleDb.OleDbConnection(conSTR)

        Try

            With cmd
                .Connection = cons
                .Connection.Open()
                .CommandText = "SELECT FullName from Judges"
                rdr = cmd.ExecuteReader

                While rdr.Read
                    cmbJudges.Items.Add(rdr.Item(0))
                End While
                rdr.Close()
                .Connection.Close()
            End With

        Catch ex As Exception

            Dim test = MsgBox(ex.Message)

        End Try

    End Using

1 Ответов

Рейтинг:
1

Maciej Los

Вам нужно очистить список combobox, прежде чем вы начнете добавлять новые значения: Поле со списком.ObjectCollection.Ясный Метод (Система.Окна.Формы) | Microsoft Docs[^]
Или
Вам нужно предотвратить добавление повторяющихся значений: Добавление и удаление элементов из элементов управления ComboBox, ListBox или CheckedListBox - Windows Forms | Microsoft Docs[^]

Кроме того, вы можете повторно привязать источник данных combobox:

Dim judge = cmbJudges.Text
Dim affected As Integer = 0
Dim dt As DataTable = New DataTable()
Dim comm As String() = {"DELETE FROM Judges WHERE FullName = @FullName", "SELECT FullName FROM Judges;"}
Using cons As OleDb.OleDbConnection = New OleDb.OleDbConnection(conSTR)
    'delete judge
	Using cmd As New OleDb.OleDbCommand(comm(0), cons)
        cons.Open()
		cmd.Parameters.AddWithValue("@FullName", judge)
		affected = cmd.ExecuteNonQuery()
		cons.Close()
	End Using
	'how many records has been affected?	
	If affected >0 Then
		'get list of judges
		Using cmd As New OleDb.OleDbCommand(comm(1), cons)
	        cons.Open()
	        Using rdr As OleDb.OleDbDataReader = cmd.ExecuteReader()
	        	dt.Load(rdr)
			End Using
	        cons.Close()
	    End Using
	End If
End Using

With cmbJudges
	.DataMember = "FullName"
	.ValueMember = "FullName"
	.DataSource = dt
End With


Maciej Los

Я не вижу в вашем коде использования четкого метода.

lelouch_vi 2

Использование минусов в качестве нового OleDb.OleDbConnection(conSTR)

аферы.Открыть()
Dim cmd As New OleDb.OleDbCommand("удалить из Judges WHERE = @FullName")
cmd.параметры.AddWithValue ("@FullName", cmbJudges.Текст)
Ящик для сообщений.Показать("данные были удалены")
Конец Использования

cmbJudges.Текст = ""
txtFullNameJudge.Текст = Ничего
txtContactJudge.Текст = Ничего
txtUserNameJudge.Текст = Ничего
txtPasswordJudge.Текст = Ничего
cmbJudges.Предметы.Четкий()

Используя минусы Как oledb.Метод Oledbconnection = Новый Oledb Для.Метод oledbconnection(обл)

Попробуй

С помощью cmd
.Соединение = минусы
.Соединение.Открыть()
.CommandText = "выберите полное имя из списка судей"
rdr = cmd.Метода executereader

В то время как РДР.Читать
cmbJudges.Предметы.Добавить(rdr.Item(0))
Конец Пока
РДР.Закрывать()
.Соединение.Закрывать()
Конец С

Поймать ex как исключение

Dim test = MsgBox(например,сообщение)

Конец Попытки

Конец Использования

Maciej Los

См. обновленный ответ.