Тема: Qt, SQLite, Тransaction
Я хочу написати таку transaction
Якщо хоча б один із запитів не виконався то не робити нічого, схоже для цього і служить transaction
БД
Таб. "fo_word"
`_id_` INTEGER PRIMARY KEY AUTOINCREMENT,
`_word_` TEXT NOT NULL UNIQUE,
`_id_uk_word_` INTEGER, FOREIGN KEY
...
(а дальше поля які поки що не відіграють ніякої ролі)
Таб. "uk_word"
`_id_` INTEGER PRIMARY KEY AUTOINCREMENT,
`_word_` TEXT NOT NULL
Підключаю БД
db::db()
{
this->c_db = QSqlDatabase::addDatabase("QSQLITE");
qDebug() << "Transactions - " << this->c_db.driver()->hasFeature(QSqlDriver::Transactions);
this->c_db.setDatabaseName("A:/database.db");
this->c_db.open();
}
qDebug() каже true, тобто transactions підтримується
А ось функція для вставки
void db::addWord(QString fo, QString uk)
{
this->c_db.transaction();
QSqlQuery *sqlQuery = new QSqlQuery(this->c_db);
qDebug() << "1 - " << sqlQuery->prepare("INSERT INTO fo_word(_word_) VALUES (:fo);");
sqlQuery->bindValue(":fo", fo);
sqlQuery->exec();
sqlQuery->prepare("INSERT INTO uk_word(_word_) VALUES (:uk);");
sqlQuery->bindValue(":uk", uk);
qDebug() << "2 - " << sqlQuery->exec();
delete sqlQuery;
this->c_db.commit();
}
І вводжу
fo = "cup"
uk = "чашка"
все поки що добре, qDebug() для 1 і 2 запиту каже true
знову вводжу
fo = "cup"
uk = "чашка"
а тут я не розумію чому знову qDebug() для 1 і 2 запиту каже true
я fo_word сказав що _word_ має атрибут UNIQUE значить перший запит не має виконатися і transaction теж не має виконуватися
Як можна вирішити таку проблему ?
Точніше не так, бо я її вирішив
Як можна правильно вирішити таку проблему ?