Я пытаюсь обновить базу данных доступа через DataGridView
на vb.net без использования мастера.База данных не обновляется с помощью DataGridView
Однако я столкнулся два основных вопроса:
При попытке сохранить содержимое добавляется к сетке, окно сообщений отображает исключение из попытке поймать говоря
"DataTable already belong to this dataSet"
.Когда я смог внести изменения без исключения, данные были сохранены в базе данных, однако, когда я позже закрыл повторно открытую базу данных и
DataGridView
, изменения были отменены. Обратите внимание, что база данных была помещена в папку bin/Debug.
Вот код для события спасительной:
Dim dataAdapter As New OleDbDataAdapter
Dim DataTable As New DataTable
Dim DataSet As New DataSet
Dim Connection As New OleDbConnection
Private Sub btnsave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsave.Click
Try
Connection.Open() ' the following decleration are used to save content to the table.
dataSet.Tables.Add(dataTable)
dataAdapter = New OleDbDataAdapter("SELECT * FROM Students", Connection)
dataAdapter.Fill(dataTable)
Dim newRow As DataRow = dataTable.NewRow
With newRow ' the with statement allows you do repeatedly apply a property to a certain object
.Item("StudentID") = txtStudentID.Text ' these statements add the content of the text boxes to these respective fields in the database
.Item("TeacherID") = txtTeacherID.Text
.Item("StudentFirstName") = txtStudentFirstname.Text
.Item("StudentSurname") = txtStudentSurname.Text
.Item("StudentPassword") = txtStudentPassword.Text
.Item("StudentGroup") = cbxStudentGroup.Text
End With
dataTable.Rows.Add(newRow)
DataSet.Tables.Add(DataTable)
Dim Command As New OleDbCommandBuilder(dataAdapter)
dataAdapter.Update(dataTable) 'updates the table
Connection.Close()
ShowItems() ' displays the table
Catch ex As Exception
MessageBox.Show(ex.Message)
Connection.Close()
End Try
End Sub
Если больше деталей требуется просят об этом. редактировать: я обнаружил, что первая проблема также распространена при попытке удалить что-то через DataGrid, вот код:
Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
Try
dataSet.Tables.Add(dataTable)
Connection.Open()
dataAdapter = New OleDbDataAdapter("SELECT * FROM Students", Connection)
dataAdapter.Fill(dataTable)
dataTable.Rows(0).BeginEdit()
dataTable.Rows(0).Delete()
dataTable.Rows(0).EndEdit()
Dim Commandbuilder As New OleDbCommandBuilder(dataAdapter)
dataAdapter.Update(dataTable)
dgrStudentDatabaseViewer.DataSource = dataTable.DefaultView
Connection.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
Connection.Close()
End Try
End Sub
вам, вероятно, не нужен тег access-vba, если это VB.NET. вы добавляете таблицу дважды так же, как в сообщении об ошибке: один раз сразу после connection.open, а затем позже – Plutonix
, если вы ссылаетесь на этот раздел dataTable.Rows.Add (newRow) DataSet.Tables.Add (DataTable), то я удалил это «добавление таблицы» все же проблема сохраняется. – User59
'DataSet.Tables.Add (DataTable)' такая же точная строка кода в 2-х местах. если вы избавитесь от Try/Catch, он покажет вам строку, вызывающую ошибку - возможно, второй экземпляр этого кода. Если вы не будете работать с несколькими DataTables, вам действительно не нужен DataSet – Plutonix