Russian Qt Forum
Ноябрь 24, 2024, 08:31
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Базы данных
>
QSqlQuery, Количество строк при обновлении
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QSqlQuery, Количество строк при обновлении (Прочитано 12051 раз)
aliks-os
Гость
QSqlQuery, Количество строк при обновлении
«
:
Ноябрь 26, 2009, 15:37 »
Могу ли я узнать сколько записей затронуто при обновлении, пытался сделать таким образом, но что не получилось
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();
Записан
BRE
Гость
Re: QSqlQuery, Количество строк при обновлении
«
Ответ #1 :
Ноябрь 26, 2009, 15:41 »
int QSqlQuery::size () const
Записан
aliks-os
Гость
Re: QSqlQuery, Количество строк при обновлении
«
Ответ #2 :
Ноябрь 26, 2009, 15:44 »
Возвращает -1
Записан
MoPDoBoPoT
Гость
Re: QSqlQuery, Количество строк при обновлении
«
Ответ #3 :
Ноябрь 26, 2009, 15:48 »
А запрос вообще проходит? Ошибок нет?
По-моему знака "=" не хватает:
query.prepare("UPDATE person_object SET person_id
=
"+record->value("id").toString()+
" WHERE person_type_id=1 AND obj_id="+innerRecord->value("id").toString());
Записан
BRE
Гость
Re: QSqlQuery, Количество строк при обновлении
«
Ответ #4 :
Ноябрь 26, 2009, 15:49 »
Значит, база данных (драйвер) не может определять количество строк в ответе или запрос не активен.
bool QSqlDriver::hasFeature ( DriverFeature feature ) const [pure virtual]
Цитировать
QSqlDriver::QuerySize 1 Whether the database is capable of reporting the size of a query. Note that some databases do not support returning the size (i.e. number of rows returned) of a query, in which case QSqlQuery::size() will return -1.
Попробуй сделать:
Код
C++ (Qt)
m_size
=
0
;
if
(
m_query
->
exec
(
)
)
if
(
m_query
->
last
(
)
)
m_size
=
m_query
->
at
(
)
+
1
;
Записан
MoPDoBoPoT
Гость
Re: QSqlQuery, Количество строк при обновлении
«
Ответ #5 :
Ноябрь 26, 2009, 15:53 »
А причем здесь QSqlQuery::size()? Ведь:
Цитата: QtAssistant
To determine the number of rows affected by a non-SELECT statement, use numRowsAffected().
Записан
aliks-os
Гость
Re: QSqlQuery, Количество строк при обновлении
«
Ответ #6 :
Ноябрь 26, 2009, 16:02 »
да, знак вопроса был пропущен, исправил, но все равно без результата
а этот код мне вернул 0
m_size = 0;
if( m_query->exec() )
if( m_query->last() )
m_size = m_query->at() + 1;
я то же думаю что size это не верно
Записан
BRE
Гость
Re: QSqlQuery, Количество строк при обновлении
«
Ответ #7 :
Ноябрь 26, 2009, 16:09 »
Цитата: aliks-os от Ноябрь 26, 2009, 16:02
я то же думаю что size это не верно
Да, я пропустил, что делается UPDATE, а не SELECT.
Так а что тебе возвращает qDebug()<<query.numRowsAffected();
Записан
MoPDoBoPoT
Гость
Re: QSqlQuery, Количество строк при обновлении
«
Ответ #8 :
Ноябрь 26, 2009, 16:12 »
Что означает без результата? query.numRowsAffected() возвращает -1?
Записан
aliks-os
Гость
Re: QSqlQuery, Количество строк при обновлении
«
Ответ #9 :
Ноябрь 26, 2009, 16:17 »
сейчас заработало все как надо, привожу полный код
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();
}
Записан
break
Гипер активный житель
Offline
Сообщений: 846
Re: QSqlQuery, Количество строк при обновлении
«
Ответ #10 :
Декабрь 02, 2009, 00:45 »
А вам случаем не надо было использовать "Update or Insert statement" -- если конечно поддерживается в сервере...
Записан
aliks-os
Гость
Re: QSqlQuery, Количество строк при обновлении
«
Ответ #11 :
Март 05, 2010, 12:03 »
Цитата: break от Декабрь 02, 2009, 00:45
А вам случаем не надо было использовать "Update or Insert statement" -- если конечно поддерживается в сервере...
Не уловил, можно ли об этом подробнее?
Записан
break
Гипер активный житель
Offline
Сообщений: 846
Re: QSqlQuery, Количество строк при обновлении
«
Ответ #12 :
Март 05, 2010, 12:08 »
Есть такая конструкция в некоторых серверах, которая выглядит так
update or insert into MY_TABLE( FIELD_1, FIELD_2 )
values ( :VALUE_FIELD_1, :VALUE_FIELD_2 )
matching( MACHING_FIELD_1, MACHING_FIELD_2 )
если в MACHING_FIELD_1 например первичный ключ ROW_ID - то сервер попытается найти запись с значением этого ключа - если она есть обновит ее, иначе вставит
Записан
aliks-os
Гость
Re: QSqlQuery, Количество строк при обновлении
«
Ответ #13 :
Март 05, 2010, 12:30 »
Я использую MySQL, там такого нет, но все равно спасибо за подсказку. А не подскажите в каких серверах можно использовать такую конструкцию?
Записан
break
Гипер активный житель
Offline
Сообщений: 846
Re: QSqlQuery, Количество строк при обновлении
«
Ответ #14 :
Март 05, 2010, 13:19 »
я работаю с Firebird -там можно - не помню когда ввели но в 2.1 точно работает (думаю и в Interbase тоже должно быть )
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...