Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] QSqlQuery, Количество строк обновления 
V
    Опции темы
aliks
Дата 26.11.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 17.12.2008

Репутация: нет
Всего: 1



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

Код

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();

--------------------
Любимая кнопка - F1, Любимое спасибо - Плюс в репутацию
PM MAIL Jabber   Вверх
null56
Дата 26.11.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 6
Всего: 12



а что 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.


Это сообщение отредактировал(а) null56 - 26.11.2009, 15:43
PM MAIL   Вверх
aliks
Дата 26.11.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 17.12.2008

Репутация: нет
Всего: 1



так, после SET person_id забыл поставить знак =
Исправил, однако, все равно возвращает 0
--------------------
Любимая кнопка - F1, Любимое спасибо - Плюс в репутацию
PM MAIL Jabber   Вверх
null56
Дата 26.11.2009, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 6
Всего: 12



а ты соединение с базой создаешь? может и конекта нет
Код

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


Это сообщение отредактировал(а) null56 - 26.11.2009, 16:08
PM MAIL   Вверх
chaos
Дата 26.11.2009, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 5
Всего: 44



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

Это сообщение отредактировал(а) chaos - 26.11.2009, 16:14
PM WWW   Вверх
aliks
Дата 26.11.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 17.12.2008

Репутация: нет
Всего: 1



коннект есть, а сейчас заработало все как надо, привожу полный код

Код

    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();
    }

--------------------
Любимая кнопка - F1, Любимое спасибо - Плюс в репутацию
PM MAIL Jabber   Вверх
chaos
Дата 26.11.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 5
Всего: 44



плюсом: посмотри возвращаемые значения от prepare & exec
PM WWW   Вверх
aliks
Дата 26.11.2009, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 17.12.2008

Репутация: нет
Всего: 1



т.е. вы хотите сказать что можно вот так записать

Код

   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();
    }

--------------------
Любимая кнопка - F1, Любимое спасибо - Плюс в репутацию
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1189 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.