Исключить повторение записей с одинаковым значением ключевого поля в 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("Данные были добавлены", "Успех");
    }

Ответы (0 шт):