Класс
Ранее мы задавали запрос SQL в аргументе функции
QSqlQuery query("SELECT title, year FROM cd WHERE year >= 1998");
Мы можем проверить наличие ошибки, вызывая функцию
if (!query.isActive)
QMessageBox::warning(this, tr("Database Error"),
query.lastError.text);
Если ошибки нет, запрос становится «активным» и мы можем использовать
Выполнение команды
QSqlQuery query("INSERT INTO cd (id, artistid, title, year) "
"VALUES (203, 102, 'Living in America', 2002)");
После этого функция
Если нам необходимо вставлять много записей или если мы хотим избежать преобразования значений в строковые данные (и правильного преобразования специальных символов), мы можем использовать функцию
QSqlQuery query;
query.prepare("INSERT INTO cd (id, artistid, title, year) "
"VALUES (:id, :artistid, :title, :year)");
query.bindValue(":id", 203);
query.bindValue(":artistid", 102);
query.bindValue(":title", "Living in America");
query.bindValue(":year", 2002);
query.exec;
Ниже приводится тот же пример позиционного представления полей в стиле ODBC:
QSqlQuery query;
query.prepare("INSERT INTO cd (id, artistid, title, year) "
"VALUES (?, ?, ?, ?)");
query.addBindValue(203);
query.addBindValue(102);
query.addBindValue("Living in America");
query.addBindValue(2002);
query.exec;
После вызова функции
Такие шаблоны часто используются для задания двоичных строковых данных, содержащих символы не в коде
Qt поддерживает SQL—транзакции в тех базах данных, где они предусмотрены. Для запуска транзакции мы вызываем функцию
QSqlDatabase::database.transaction;
QSqlQuery query;
query.exec("SELECT id FROM artist WHERE name= 'Gluecifer'");
if (query.next) {
int artistId = query.value(0).tolnt;
query.exec("INSERT INTO cd (id, artistid, title, year) "
"VALUES (201, " + QString::number(artistId)
+ ", 'Riding the Tiger', 1997)");
}
QSqlDatabase::database.commit;