Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > QSqlQuery


Автор: Novicheck 27.6.2013, 16:37
Доброго времени суток, уважаемые коллеги, подскажите пожалуйста как в целочисленную переменную поместить значение, получаемое в результате выполнения sql запроса. 
Конкретно ситуация выглядит так: есть таблица в которую я добавляю строку, следующим образом
Код

this->modelSpisoc.setQuery("INSERT INTO    people DEFAULT VALUES");

добавленная строка получает максимальное значение в поле id, нахожу я его запросом такого типа:
Код

SELECT MAX( id ) FROM people

и результат этого запроса (т.е. максимальное значение поля id) мне как то нужно присвоить переменной, для дальнейшего использования исключительно в коде проги.
Вот такая проблема

Автор: borisbn 27.6.2013, 17:24
Код
QSqlQuery query( m_db );
if ( query.prepare( "SELECT MAX( id ) FROM people" ) == false )
{
    return false;
}
if ( query.exec() == false )
{
    return false;
}
if ( query.first() == false )
{
    return false;
}
int maxId = query.value( 0 ).toInt();


Но вообще-то, такой способ - получение MAX( id ) - некорректен (если интересует - могу объяснить почему). Я бы тебе предложил написать встроенную процедуру добавления данных в таблицу, которая бы возвращала id-шник только что добавленной записи.

Автор: Novicheck 28.6.2013, 08:59
спасибо, грамотное замечание о некорректности, т.к. я совершенно забыл о многопользовательности, уже осознал smile 

Автор: Majestio 5.7.2013, 13:38
Не понял о какой СУБД идет речь ... если о PostgreSQL, подскажу:

1) Id - делаешь SERIAL
2) в инсерте используешь RETURNING

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)