Получить номер последней обработанной записи
Синтаксические правила
QVariant QSqlQuery::lastInsertId() const;
Описание
Метод предоставляет информацию о номере последней обработанной записи при
выполнении операции insert/update/delete.
Возвращаемое значение
Возможные значения:
-
указатель на QVariant-объект при успешном обновлении данных. Значение QVariant содержит RowId последней обработанной записи при выполнении операции
insert/update/delete; -
указатель на недействительный QVariant-объект в случае ошибки доступа к БД;
-
0, если реального добавления/изменения/удаления записей не произошло.
Метод возвращает корректное значение RowId только в случае его вызова сразу
после выполнения операции insert/update/delete. Если после указанных операций
был выполнен select-запрос, то возвращаемое значение RowId будет некорректным.
Пример
QSqlDatabase db = QSqlDatabase::addDatabase( "QLINTER" );
db.setUserName( "SYSTEM" );
db.setPassword( "MANAGER8" );
if( !db.open() )
{
cout < < db.lastError().driverText().toLocal8Bit().data() < < endl;
return 1;
}
QSqlQuery query;
query.exec("create or replace table Colors (color varchar(20));");
query.exec("insert into Colors (color) values ('Red'),('Green');");
if (query.lastError().isValid())
{
cout < < query.lastError().driverText().toLocal8Bit().data() < < endl;
return 1;
}
QVariant sKey = query.lastInsertId();
if (!sKey.isValid())
{
cout < < db.lastError().driverText().toLocal8Bit().data() < < endl;
return 1;
}
cout < < "RowId добавленной записи " < < sKey.toString().toLocal8Bit().data() < <
endl;
query.exec("update Colors set color ='Black' where color='Red';");
if (query.lastError().isValid())
{
cout < < query.lastError().driverText().toLocal8Bit().data() < < endl;
return 1;
}
sKey = query.lastInsertId();
if (!sKey.isValid())
{
cout < < db.lastError().driverText().toLocal8Bit().data() < < endl;
return 1;
}
cout < < "RowId измененной записи " < < sKey.toString().toLocal8Bit().data() < <
endl;
query.exec("delete from Colors where color = '12345';");
if (query.lastError().isValid())
{
cout < < query.lastError().driverText().toLocal8Bit().data() < < endl;
return 1;
}
sKey = query.lastInsertId();
if (!sKey.isValid())
{
cout < < db.lastError().driverText().toLocal8Bit().data() < < endl;
return 1;
}
cout < < "RowId удаленной записи " < < sKey.toString().toLocal8Bit().data() < <
endl;
Результат выполнения примера:
RowId добавленной записи 2
RowId измененной записи 1
RowId удаленной записи 0