Russian Qt Forum

Qt => Базы данных => Тема начата: Wolfred от Апрель 28, 2007, 11:28



Название: Проблемы с QSqlQuery или неправильное его использование?
Отправлено: Wolfred от Апрель 28, 2007, 11:28
Не могу понять в чем ошибка.
Использую QSqlQuery примерно следующим образом.

QSqlQuery query;
query.exec("select что-то там, count(*) from откуда-то group by что-то там");
//:)
Так вот, при дальнейшем обращении к данным query, в поле count(*) всегда ноль.

Не знает ли кто, это QSqlQuery не поддерживает функций SQL (наподобие count(*)) или я что-то неправильно делаю?
Запрос осуществляется к базе данных MySQL.


Название: Проблемы с QSqlQuery или неправильное его использование?
Отправлено: Racheengel от Апрель 28, 2007, 11:59
а база была открыта до этого вызова?


Название: Проблемы с QSqlQuery или неправильное его использование?
Отправлено: Wolfred от Апрель 28, 2007, 12:11
Да, конечно, база была открыта и записи были выбраны правильно, кроме поля count(*)


Название: Проблемы с QSqlQuery или неправильное его использование?
Отправлено: bigirbis от Апрель 28, 2007, 12:14
Может в качестве аргумента count() стоит указать поле?


Название: Проблемы с QSqlQuery или неправильное его использование?
Отправлено: alexis от Апрель 28, 2007, 12:17
а в mysql консольке проверял - работает?
а может код полностью приведем?


Название: Проблемы с QSqlQuery или неправильное его использование?
Отправлено: Wolfred от Апрель 28, 2007, 12:25
в консоли проверял, все нормально работает!
с показом кода потруднее, я его переделал и теперь руками считаю количество записей в группе.Но во-первых - это медленнее, а во-вторых, раз это уже сделано(я имею ввиду count(*) из MySQL), то почему бы не воспользоваться:)
Щас попробую, что нибудь написать и привести в виде примера, может еще не везде исправил:)


Название: Проблемы с QSqlQuery или неправильное его использование?
Отправлено: bigirbis от Апрель 28, 2007, 13:08
А вообще тебе это поле нужно?
Или хватит int QSqlQuery::size () const?


Название: Проблемы с QSqlQuery или неправильное его использование?
Отправлено: alexis от Апрель 28, 2007, 13:13
1) size вернет кол-во строк в выборке
2) count(*) агрегатная функция sql
2-й быстрее и правильнее.
-
2Wolfred: напиши минимальный пример. хоть в одном файле.


Название: Проблемы с QSqlQuery или неправильное его использование?
Отправлено: bigirbis от Апрель 28, 2007, 13:47
Цитировать
Функция Count не подсчитывает записи со значениями Null, если только аргумент выражение не содержит подстановочный знак звездочки (*). Если используются знаки звездочки, функция Count вычисляет общее количество записей, включая те, которые содержат пустые поля.


Судя по тексту поставленной задачи
Цитировать
query.exec("select что-то там, count(*) from откуда-то group by что-то там");

1 вариант будет правильнее, а 2 - просто избыточен (судя по всему столбец в выборке не один).


Название: Проблемы с QSqlQuery или неправильное его использование?
Отправлено: Wolfred от Апрель 28, 2007, 14:47
Вот некий примерчик.
Код:


query.exec(QString("select d.doc_id, c.feat_num, distinct_lem_cnt, count(*) from romip_legal_queries_morfo as a, et1doc_feats as b, et2feats as c, et2docs as d where line_no = %1 and a.feat_id = c.feat_id and c.feat_num = b.feat_num and b.doc_num = d.doc_num group by doc_id, feat_num order by doc_id;").arg(queries[i].id));

while(query.next())
{
    count = query.value(3).toInt();
    DoSomeThing();
}


Так вот, count всегда ноль.


Название: Проблемы с QSqlQuery или неправильное его использование?
Отправлено: alexis от Апрель 28, 2007, 18:46
м-да..
а заполнителями пользоваться уже не модно?
модно везде sql-инжекты оставлять?
--
судя по коду - "ничего военного".
выведи свой запрос: query.executedQuery() ( вроде так )
и исполни его в консоли.
если все будет ок - пиши баг троллтехам.


Название: Проблемы с QSqlQuery или неправильное его использование?
Отправлено: Tonal от Апрель 28, 2007, 19:15
Может попробывать count(*) as cnt


Название: Проблемы с QSqlQuery или неправильное его использование?
Отправлено: Wolfred от Апрель 28, 2007, 22:36
to Tonal
Пробовал не помогает:(.
to alexis
Что имеется ввиду под заполнителями? query.bindValue()?


Название: Проблемы с QSqlQuery или неправильное его использование?
Отправлено: Tonal от Апрель 29, 2007, 08:02
Попробовал в sqlbrowser из демосов запрос с группировкой и count-ом - всё работает отлично. Попробуй свой запрос там-же.

А почему bindValue не используешь?


Название: Проблемы с QSqlQuery или неправильное его использование?
Отправлено: Wolfred от Апрель 29, 2007, 10:04
У меня не работает и в sqlbrowser:(.
Может из-за того, что через драйвер ODBС подключаюсь?
Версия QT у меня 4.2.2.


Название: Проблемы с QSqlQuery или неправильное его использование?
Отправлено: Tonal от Апрель 29, 2007, 20:23
А почему не через родной драйвер?
Если через драйвер MySql что получается?


Название: Проблемы с QSqlQuery или неправильное его использование?
Отправлено: Wolfred от Апрель 29, 2007, 23:06
Не получилось у меня подсоединится к базе через драйвер MySQL, пришлось ODBC использовать.