Ошибка синтаксиса UPDATE C++
Здраствуйте.Хочу зделать обновленние даних у Windows Forms,но после нажатие кнопки Обновить
вылазиет ошибка синтаксиса Update.

Код Обновление:
if (dataGridView1->SelectedRows->Count != 1) {
MessageBox::Show("Виберіть один стовпець для оновлення", "Увага");
return;
}
int index = dataGridView1->SelectedRows[0]->Index;
if (dataGridView1->Rows[index]->Cells[0]->Value == nullptr ||
dataGridView1->Rows[index]->Cells[1]->Value == nullptr ||
dataGridView1->Rows[index]->Cells[2]->Value == nullptr ||
dataGridView1->Rows[index]->Cells[3]->Value == nullptr ||
dataGridView1->Rows[index]->Cells[4]->Value == nullptr ||
dataGridView1->Rows[index]->Cells[5]->Value == nullptr ||
dataGridView1->Rows[index]->Cells[6]->Value == nullptr ||
dataGridView1->Rows[index]->Cells[7]->Value == nullptr ||
dataGridView1->Rows[index]->Cells[8]->Value == nullptr ||
dataGridView1->Rows[index]->Cells[9]->Value == nullptr){
MessageBox::Show ("Не всі дані введені","Увага");
return;
}
String^ Autor = dataGridView1->Rows[index]->Cells[0]->Value->ToString();
String^ Name = dataGridView1->Rows[index]->Cells[1]->Value->ToString();
String^ Published = dataGridView1->Rows[index]->Cells[2]->Value->ToString();
String^ Year = dataGridView1->Rows[index]->Cells[3]->Value->ToString();
String^ Pages = dataGridView1->Rows[index]->Cells[4]->Value->ToString();
String^ Literature = dataGridView1->Rows[index]->Cells[5]->Value->ToString();
String^ Origin = dataGridView1->Rows[index]->Cells[6]->Value->ToString();
String^ Availability = dataGridView1->Rows[index]->Cells[7]->Value->ToString();
String^ Value = dataGridView1->Rows[index]->Cells[8]->Value->ToString();
String^ Recommendations = dataGridView1->Rows[index]->Cells[9]->Value->ToString();
String^ connectionString = "provider=Microsoft.ACE.Oledb.12.0;Data Source=Database.accdb";
OleDbConnection^ dbConnection = gcnew OleDbConnection(connectionString);
dbConnection->Open();
String^ query = "UPDATE [table_name] Set Name='" + Name + "',Published ='" + Published + "',Year=" + Year + ",Pages =" + Pages + ", Literature= '" + Literature + "',Origin ='" + Origin + "',Availability ='" + Availability + "',Value =" + Value + ", Recommendations ='" + Recommendations + "' WHERE Autor ='" + Autor;
OleDbCommand^ dbComand = gcnew OleDbCommand(query, dbConnection);
if (dbComand->ExecuteNonQuery() != 1)
MessageBox::Show("Помилка виконання команди", "Помилка");
else
MessageBox::Show("Данні оновленні", "Готово");
dbConnection->Close();
Я ориентировался на ето https://github.com/VladimirRepp/WinFormCppAndAccess/find/main
Ответы (1 шт):
я думаю, что Ваша ошибка связана не с языком, а с синтаксисом UPDATE.
Потому что именно об этом написано в сообщении об ошибке.
Так как у меня нет Ваших данных - то я могу предположить, что либо в данных попался символ, который "ломает" синтаксис SQL (например, одинарная кавычка, слеш, точка с запятой, процент), либо в одно из полей попадают "пустые" данные.
Проверить это Вам гораздо проще, чем мне: сделайте "печать" каждой команды UPDATE с аргументами, прежде чем выполнить её.
Тогда после набора данных, котрые приводят к ошибке, у Вас выскочит эта самая ошибка, и вы увидите, на чём программа "падает"
И еще одно, совершенно "безумное" предположение.
Я зашел на гитхаб, я вижу там исходники программы, readme, но я не вижу самой аксессовской базы. По моему, автор как то не положил её вместе с примером программы.
Я так думаю, что если Вы запустите программу, а базы данных с нужной таблицей ей не предоставите - то, конечно, при UPDATE тоже будет вылезать ошибка.
Так что надо проверить, что есть база даных и в ней есть таблица со всем нужными полями.
Дополнение
Правильно Вам Александр Петров написал - про кавычку.
Строка из Вашего кода:
String^ query = "UPDATE [table_name] Set Name='" + Name + "',Published ='" + Published + "',Year=" + Year + ",Pages =" + Pages + ", Literature= '" + Literature + "',Origin ='" + Origin + "',Availability ='" + Availability + "',Value =" + Value + ", Recommendations ='" + Recommendations + "' WHERE Autor ='" + Autor;
А должно быть так: (смотрите в самый конец строки)
String^ query = "UPDATE [table_name] Set Name='" + Name + "',Published ='" + Published + "',Year=" + Year + ",Pages =" + Pages + ", Literature= '" + Literature + "',Origin ='" + Origin + "',Availability ='" + Availability + "',Value =" + Value + ", Recommendations ='" + Recommendations + "' WHERE Autor ='" + Autor + "'";
То есть, каждая строка, которая входи в запрос в виде переменной, должна быть с обеих строн окружена одинарными кавычками. То же самое - с датами.
В общем, мои советы не особо нужны, опытный человек всё заметил невооруженным глазом.