Обновление базы данных доступа в VB.NET в VS2015
Я следовал онлайн-учебнику, который помог мне подключиться к базе данных Access и использовать адаптеры данных и наборы данных для получения данных из базы данных.
У меня есть одна форма Windows, которая начинается с получения списка авторов из моей базы данных '
Authors
- таблица с использованием dataadapter и dataset и помещением их в поле со списком. Когда я выбираю автора в этом поле со списком, я затем использую другую комбинацию dataadapter и dataset, чтобы получить список всех названий книг для этого автора из'Books
- таблица базы данных и поместите их во второе поле со списком.Когда я выбираю конкретную книгу из этого списка со списком, я использую другую комбинацию адаптера/набора данных, чтобы получить (1) полную запись для выбранной книги (
ID
) и отображать эти сведения в текстовых полях и полях со списком в зависимости от типа данных (например, в базе данных есть таблица форматов книг (в твердом переплете, в мягкой обложке и т. д.), Но 'Books
- стол как раз вмещает ID
поэтому у меня есть поле со списком, которое содержит все типы форматов, и оно настроено на отображение соответствующего формата на основе формата ID
в извлеченных данных записи). Все вышеперечисленное работает нормально, но если я отредактирую название книги, скажем, и попытаюсь сохранить изменения в базе данных, то получу ошибку.Учебник советует использовать:-
Dim cb As New OleDb.OleDbCommandBuilder(da) ds.Tables("AddressBook").Rows(inc).Item(1) = txtFirstName.Text ds.Tables("AddressBook").Rows(inc).Item(2) = txtSurname.Text da.Update(ds, "AddressBook")
Поэтому я скопировал это и заменил свое имя Dataadapter на '
da
- и мое имя набора данных для ...ds
"и" имя, которое я дал своим данным (?) " для "AddressBook
". Мой код для присвоения 'values
'to be saved относится только к строке (0), но проходит через все 'items
- в том ряду:-мой код---
Dim cb As New OleDb.OleDbCommandBuilder(dsetadaptSelectedBook) 'Assign Values to Dataset record for database update dsetSelectedBook.Tables("SelectedBook").Rows(0).Item(1) = BookTitle dsetSelectedBook.Tables("SelectedBook").Rows(0).Item(2) = SelectedAuthorID etc.... dsetSelectedBook.Tables("SelectedBook").Rows(0).Item(14) = LocationID dsetadaptSelectedBook.Update(dsetSelectedBook, "SelectedBook") MessageBox.Show("Data updated")
Когда я нажимаю кнопку "Сохранить изменения", чтобы запустить приведенный выше код, я получаю ошибку OleDbException:-
An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll Additional information: Syntax error in UPDATE statement.
Что я уже пробовал:
После того как я набрал вышеизложенное, я подумал, что, возможно, мне нужно использовать набор данных всей таблицы "книги", поэтому я добавил код, чтобы открыть новый набор данных с новым адаптером для всей таблицы "книги"..
'Set The SQL String SQLText = "Select * From Books" 'Pass The SQL String and CONNECTION object to the Data_Adapter dsetadaptALLBooks = New OleDb.OleDbDataAdapter(SQLText, con) 'Fill the Dataset with records from the database table dsetadaptALLBooks.Fill(dsetALLBooks, "Books")
затем я прошелся по этому набору данных до тех пор, пока не нашел правильную строку (value - 'inc')для ссылки на выбранную книгу, а затем присвоил значения каждому элементу в этой строке набора данных..
dsetALLBooks.Tables("Books").Rows(inc).Item(1) = BookTitle
и т.д...
и изменил строку "обновить", чтобы ссылаться на "новый" набор данных и адаптер..
dsetadaptALLBooks.Update(dsetALLBooks, "Books")
но я все равно получаю ту же ошибку.
Что я здесь упускаю?
Пожалуйста, помогите, это сводит меня с ума.