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


Автор: aliks 26.11.2009, 15:23
Могу ли я узнать сколько записей затронуто при обновлении, пытался сделать таким образом, но что не получилось

Код

QSqlQuery query;
    query.prepare("UPDATE person_object SET person_id "+record->value("id").toString()+
                  " WHERE person_type_id=1 AND obj_id="+innerRecord->value("id").toString());
    query.exec();
    qDebug()<<query.numRowsAffected();

Автор: null56 26.11.2009, 15:42
а что exec вернул?

Добавлено через 2 минуты и 6 секунд
посмотри какой был запрос
Код

QString QSqlQuery::lastQuery () const

Returns the text of the current query being used, or an empty string if there is no current query text.

Автор: aliks 26.11.2009, 15:51
так, после SET person_id забыл поставить знак =
Исправил, однако, все равно возвращает 0

Автор: null56 26.11.2009, 16:07
а ты соединение с базой создаешь? может и конекта нет
Код

QSqlDatabase addDatabase ( QSqlDriver * driver, const QString & connectionName = QLatin1String( defaultConnection ) )

Автор: chaos 26.11.2009, 16:09
aliks, а данные в БД изменяются? smile

Добавлено @ 16:13
aliks, я бы начал плясать с переписывания твоего примера на
Код

QSqlQuery query;
query.prepare("UPDATE person_object SET person_id = :id WHERE person_type_id=1 AND obj_id = :oid");
query.bindValue(":id", record->value("id"));
query.bindValue(":oid", innerRecord->value("id"));
query.exec();



имхо такой припэа правильней smile

Автор: aliks 26.11.2009, 16:15
коннект есть, а сейчас заработало все как надо, привожу полный код

Код

    QSqlQuery query;
    query.prepare("UPDATE person_object SET person_id ="+record->value("id").toString()+
                  " WHERE person_type_id=1 AND obj_id="+innerRecord->value("id").toString());
    query.exec();
    if (query.numRowsAffected() < 1) {
        query.prepare("INSERT INTO person_object (obj_id, person_id, person_type_id) "
                      "VALUES (:obj_id, :person_id, :person_type_id)");
        query.bindValue(":obj_id", innerRecord->value("id").toInt());
        query.bindValue(":person_id", record->value("id").toInt());
        query.bindValue(":person_type_id", 1);
        query.exec();
    }

Автор: chaos 26.11.2009, 16:16
плюсом: посмотри возвращаемые значения от prepare & exec

Автор: aliks 26.11.2009, 16:50
т.е. вы хотите сказать что можно вот так записать

Код

   QSqlQuery query;
    query.prepare("UPDATE person_object SET person_id ="+record->value("id").toString()+
                  " WHERE person_type_id=1 AND obj_id="+innerRecord->value("id").toString());
  
    if (!query.exec()) {
        query.prepare("INSERT INTO person_object (obj_id, person_id, person_type_id) "
                      "VALUES (:obj_id, :person_id, :person_type_id)");
        query.bindValue(":obj_id", innerRecord->value("id").toInt());
        query.bindValue(":person_id", record->value("id").toInt());
        query.bindValue(":person_type_id", 1);
        query.exec();
    }

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