Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: id последней записи в бд sqlite
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
DarthBane
Стоит такая задача - журнал учета пользователей. Есть таблица в бд, с id записи, именем, датой и временем входа, которые заполняются пр иавторизации. Надо сделать следующее, при выходе из проги, в таблице заполнять поле даты выхода текущим временем, и заполнять соответственно последнюю строку. Я написал такой код, но у меня ничего не выходит((
QSqlQuery query_journ(db);
    QSqlQuery lastId(db);
    QTime exitTime = QTime::currentTime();
    QString strExitTime;
    strExitTime = exitTime.toString("hh:mm:ss");
    QDate work_date = QDate::currentDate();
    QString olo;
    olo = work_date.toString("dd-MM-yyyy");
    QString lastId_select ="SELECT last_insert_rowid() FROM work_journal";
    lastId.prepare(lastId_select);
    lastId.exec();
    QString aqw;
    aqw = lastId.lastInsertId().toString();
    QMessageBox zx;
    zx.setText(aqw);
    zx.exec();
    QString query_journ_select ="UPDATE work_journal SET exit_time='%1', where id='%2'";
    QString strQ = query_journ_select.arg(strExitTime).arg(aqw);
    if(!query_journ.exec(strQ)){
       qDebug()<<tr("Невозможно сделать вставку")<< query_journ.lastError();
    }


И в консоли такая ошибка:
QSqlQuery::value: not positioned on a valid record
"Невозможно сделать вставку" QSqlError(1, "Unable to execute statement", "near "where": syntax error")
Iron Bug
last_insert_rowid() в SQLite даёт последний вставленный id в текущем коннекте. если коннект переоткрывался - там будет ноль.
проверь, что ты не отключаешься от базы. лучше этот id сразу вычитывать, после вставки новой записи.
balbes
Цитата(DarthBane @ 8.8.2012, 12:56) *
QString query_journ_select ="UPDATE work_journal SET exit_time='%1' where id='%2'";
перед where не нужна запятая, о чем тебе и сообщает QSqlError.

Добавь везде где можно проверку на возврат ошибки...
DarthBane
Да нет, я нигде не отключаюсь от базы впринципе
ViGOur
Цитата(balbes @ 8.8.2012, 13:05) *
перед where не нужна запятая, о чем тебе и сообщает QSqlError.

DarthBane
Убрал запятую, все равно пусто в меседж боксе( а в консоли ошибка:
QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.
QSqlQuery::value: not positioned on a valid record
ViGOur
Цитата(balbes @ 8.8.2012, 13:05) *
Добавь везде где можно проверку на возврат ошибки...
Вот именно это ты пропустил.

Что у тебя возвращает lastId.prepare?
Что у тебя возвращает lastId.exec?

Если ошибки, то описание ошибок...
DarthBane
Фуф. проблему решил, надо было query.next() нехватало. Может кому поможет в дальнейшем:
    QSqlQuery query_journ(db);
    QSqlQuery lastId(db);
    QTime exitTime = QTime::currentTime();
    QString strExitTime;
    strExitTime = exitTime.toString("hh:mm:ss");
    QDate work_date = QDate::currentDate();
    QString olo;
    olo = work_date.toString("dd-MM-yyyy");
    QString lastId_select ="SELECT * FROM work_journal ORDER BY id DESC LIMIT 1";
    lastId.prepare(lastId_select);
    lastId.exec();
    QString aqw;
    if(lastId.next())
    {
        aqw = lastId.value(0).toString();
    }
    //aqw = lastId.value(0).toString();
    //QMessageBox zx;
    //zx.setText(aqw);
    //zx.exec();
    QString query_journ_select ="UPDATE work_journal SET exit_time='%1' where id='%2'";
    QString strQ = query_journ_select.arg(strExitTime).arg(aqw);
    if(!query_journ.exec(strQ)){
       qDebug()<<tr("Невозможно сделать вставку")<< query_journ.lastError();
    }
    this->close();
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.