Исключить повторение записей с одинаковым значением ключевого поля в datagridview
проблема (вернее, баг?) следующая: При вводе записи с несуществующим ключевым полем в таблицу всё работает и в запись в таблице появляется, но, очевидно, если сразу же ввести новую запись с таким же ключом, программа выдаст ошибку "Не удалось внести изменения из-за повторяющихся значений в индексе, первичном ключе или связях.". Туплю и не могу исправить данное "недоразумение".
Пробовал через счётчик строк (если вводимое значение ключа меньше чем самая нижняя строка с номером "индекс") - не получилось, попробовал через SELECT EXISTS (поиск строки с определённым номером) - тут у меня не получилось чисто из-за недостатка знаний в этой области: идея была в том, что если есть уже строка, где первая ячейка (которая является ключом) с таким номером уже существует, то выдавать ошибку и просить ввести другое число) - не раздуплил как обратится к значение строки через dataGridView1->Rows[index]->Cells[2]->Value->ToString(); (если это вообще возможно)
Выкладываю часть кода, где нужно это реализовать:
System::Void SPPR::main::buttonChange_Click(System::Object^ sender, System::EventArgs^ e)
{
if (dataGridView1->SelectedRows->Count != 1) {
MessageBox::Show("Выберите только ОДНУ строку для добавления и/или редактирования", "Ошибка");
return;
}
String^ connStr = "provider=Microsoft.ACE.OLEDB.12.0;Data Source=pydb.accdb";
OleDbConnection^ dbConnection = gcnew OleDbConnection(connStr);
dbConnection->Open();
int index = dataGridView1->SelectedRows[0]->Index;
// Если выбрана таблица Machine Data (Данные о станках)
if (r == 1) {
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) {
MessageBox::Show("Введены не все данные", "Ошибка");
return;
}
String^ Column1 = dataGridView1->Rows[index]->Cells[0]->Value->ToString();
String^ Column2 = dataGridView1->Rows[index]->Cells[1]->Value->ToString();
String^ Column3 = dataGridView1->Rows[index]->Cells[2]->Value->ToString();
String^ Column4 = dataGridView1->Rows[index]->Cells[3]->Value->ToString();
String^ Column5 = dataGridView1->Rows[index]->Cells[4]->Value->ToString();
String^ query = "INSERT INTO [Machine data] VALUES ("+ Column1 + ", "+ Column2 +", '"+ Column3 +"', '"+ Column4 +"', '"+ Column5 +"')";
OleDbCommand^ dbComand = gcnew OleDbCommand(query, dbConnection);
if (dbComand->ExecuteNonQuery() != 1)
MessageBox::Show("Ошибка выполнения запроса", "Ошибка");
else
MessageBox::Show("Данные были добавлены", "Успех");
}