Russian Qt Forum
Ноябрь 23, 2024, 21:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Проблемы с QSqlQuery или неправильное его использование?  (Прочитано 9513 раз)
Wolfred
Гость
« : Апрель 28, 2007, 11:28 »

Не могу понять в чем ошибка.
Использую QSqlQuery примерно следующим образом.

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

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

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Апрель 28, 2007, 11:59 »

а база была открыта до этого вызова?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Wolfred
Гость
« Ответ #2 : Апрель 28, 2007, 12:11 »

Да, конечно, база была открыта и записи были выбраны правильно, кроме поля count(*)
Записан
bigirbis
Гость
« Ответ #3 : Апрель 28, 2007, 12:14 »

Может в качестве аргумента count() стоит указать поле?
Записан
alexis
Гость
« Ответ #4 : Апрель 28, 2007, 12:17 »

а в mysql консольке проверял - работает?
а может код полностью приведем?
Записан
Wolfred
Гость
« Ответ #5 : Апрель 28, 2007, 12:25 »

в консоли проверял, все нормально работает!
с показом кода потруднее, я его переделал и теперь руками считаю количество записей в группе.Но во-первых - это медленнее, а во-вторых, раз это уже сделано(я имею ввиду count(*) из MySQL), то почему бы не воспользоваться:)
Щас попробую, что нибудь написать и привести в виде примера, может еще не везде исправил:)
Записан
bigirbis
Гость
« Ответ #6 : Апрель 28, 2007, 13:08 »

А вообще тебе это поле нужно?
Или хватит int QSqlQuery::size () const?
Записан
alexis
Гость
« Ответ #7 : Апрель 28, 2007, 13:13 »

1) size вернет кол-во строк в выборке
2) count(*) агрегатная функция sql
2-й быстрее и правильнее.
-
2Wolfred: напиши минимальный пример. хоть в одном файле.
Записан
bigirbis
Гость
« Ответ #8 : Апрель 28, 2007, 13:47 »

Цитировать
Функция Count не подсчитывает записи со значениями Null, если только аргумент выражение не содержит подстановочный знак звездочки (*). Если используются знаки звездочки, функция Count вычисляет общее количество записей, включая те, которые содержат пустые поля.


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

1 вариант будет правильнее, а 2 - просто избыточен (судя по всему столбец в выборке не один).
Записан
Wolfred
Гость
« Ответ #9 : Апрель 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 всегда ноль.
Записан
alexis
Гость
« Ответ #10 : Апрель 28, 2007, 18:46 »

м-да..
а заполнителями пользоваться уже не модно?
модно везде sql-инжекты оставлять?
--
судя по коду - "ничего военного".
выведи свой запрос: query.executedQuery() ( вроде так )
и исполни его в консоли.
если все будет ок - пиши баг троллтехам.
Записан
Tonal
Гость
« Ответ #11 : Апрель 28, 2007, 19:15 »

Может попробывать count(*) as cnt
Записан
Wolfred
Гость
« Ответ #12 : Апрель 28, 2007, 22:36 »

to Tonal
Пробовал не помогает:(.
to alexis
Что имеется ввиду под заполнителями? query.bindValue()?
Записан
Tonal
Гость
« Ответ #13 : Апрель 29, 2007, 08:02 »

Попробовал в sqlbrowser из демосов запрос с группировкой и count-ом - всё работает отлично. Попробуй свой запрос там-же.

А почему bindValue не используешь?
Записан
Wolfred
Гость
« Ответ #14 : Апрель 29, 2007, 10:04 »

У меня не работает и в sqlbrowser:(.
Может из-за того, что через драйвер ODBС подключаюсь?
Версия QT у меня 4.2.2.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.112 секунд. Запросов: 23.