Получить номер последней обработанной записи

Синтаксические правила

QVariant QSqlQuery::lastInsertId() const;

Описание

Метод предоставляет информацию о номере последней обработанной записи при выполнении операции insert/update/delete.

Возвращаемое значение

Возможные значения:

  1. указатель на QVariant-объект при успешном обновлении данных. Значение QVariant содержит RowId последней обработанной записи при выполнении операции insert/update/delete;

  2. указатель на недействительный QVariant-объект в случае ошибки доступа к БД;

  3. 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