Pete Rad Ответов: 1

Обновление базы данных доступа в 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")


но я все равно получаю ту же ошибку.

Что я здесь упускаю?

Пожалуйста, помогите, это сводит меня с ума.