Название: QSqlQuery, Количество строк при обновлении Отправлено: aliks-os от Ноябрь 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(); Название: Re: QSqlQuery, Количество строк при обновлении Отправлено: BRE от Ноябрь 26, 2009, 15:41 int QSqlQuery::size () const
Название: Re: QSqlQuery, Количество строк при обновлении Отправлено: aliks-os от Ноябрь 26, 2009, 15:44 Возвращает -1 ???
Название: Re: QSqlQuery, Количество строк при обновлении Отправлено: MoPDoBoPoT от Ноябрь 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()); Название: Re: QSqlQuery, Количество строк при обновлении Отправлено: BRE от Ноябрь 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. Попробуй сделать: Код
Название: Re: QSqlQuery, Количество строк при обновлении Отправлено: MoPDoBoPoT от Ноябрь 26, 2009, 15:53 А причем здесь QSqlQuery::size()? Ведь:
Цитата: QtAssistant To determine the number of rows affected by a non-SELECT statement, use numRowsAffected(). Название: Re: QSqlQuery, Количество строк при обновлении Отправлено: aliks-os от Ноябрь 26, 2009, 16:02 да, знак вопроса был пропущен, исправил, но все равно без результата
а этот код мне вернул 0 m_size = 0; if( m_query->exec() ) if( m_query->last() ) m_size = m_query->at() + 1; я то же думаю что size это не верно Название: Re: QSqlQuery, Количество строк при обновлении Отправлено: BRE от Ноябрь 26, 2009, 16:09 я то же думаю что size это не верно Да, я пропустил, что делается UPDATE, а не SELECT.Так а что тебе возвращает qDebug()<<query.numRowsAffected(); Название: Re: QSqlQuery, Количество строк при обновлении Отправлено: MoPDoBoPoT от Ноябрь 26, 2009, 16:12 Что означает без результата? query.numRowsAffected() возвращает -1?
Название: Re: QSqlQuery, Количество строк при обновлении Отправлено: aliks-os от Ноябрь 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(); } Название: Re: QSqlQuery, Количество строк при обновлении Отправлено: break от Декабрь 02, 2009, 00:45 А вам случаем не надо было использовать "Update or Insert statement" -- если конечно поддерживается в сервере...
Название: Re: QSqlQuery, Количество строк при обновлении Отправлено: aliks-os от Март 05, 2010, 12:03 А вам случаем не надо было использовать "Update or Insert statement" -- если конечно поддерживается в сервере... Не уловил, можно ли об этом подробнее? Название: Re: QSqlQuery, Количество строк при обновлении Отправлено: break от Март 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 - то сервер попытается найти запись с значением этого ключа - если она есть обновит ее, иначе вставит Название: Re: QSqlQuery, Количество строк при обновлении Отправлено: aliks-os от Март 05, 2010, 12:30 Я использую MySQL, там такого нет, но все равно спасибо за подсказку. А не подскажите в каких серверах можно использовать такую конструкцию?
Название: Re: QSqlQuery, Количество строк при обновлении Отправлено: break от Март 05, 2010, 13:19 я работаю с Firebird -там можно - не помню когда ввели но в 2.1 точно работает (думаю и в Interbase тоже должно быть )
Название: Re: QSqlQuery, Количество строк при обновлении Отправлено: Kolobok от Март 06, 2010, 10:54 Я использую MySQL, там такого нет http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html (http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html) |