При использовании SQLITE я заметил, что если я создаю уникальный ключ по полю с датой, то при вставке записей с одинаковой датой, база спокойно вводит неограниченное число записей.
Этот факт я отнес к использованию даты как текст вида "YYYY-MM-DD HH:MM:SS". Для себя я решил эту задачу следующим способом:
Я создал триггер в базе данных скриптом
DROP TRIGGER trg_validate_products_before_insert;
CREATE TRIGGER trg_validate_products_before_insert BEFORE INSERT
ON [statM]
BEGIN
SELECT
CASE
WHEN (SELECT count(*) FROM [statM] WHERE [doc_datec] like NEW.[doc_datec])>0 THEN
RAISE(ABORT, 'Duble Date')
END;
END;
В квадратных скобках моя таблица и поле. При вводе двойной даты срабатывает исключение (ABORT) и ввод не выполняется.
При вводе я готовлю предложение и выполняю его
rc = sqlite3_step(insert_stmt);
if(SQLITE_DONE != rc) {
fprintf(stdout, "insert statement didn't return DONE (%i): %s\n", rc, sqlite3_errmsg(db));
} else {
printf("INSERT completed\n\n");
}
rc = sqlite3_reset(insert_stmt);
Если вы выполняете запись в цикле, не забудьте выполнить reset.
Комментариев нет:
Отправить комментарий