Russian Qt Forum

Qt => Базы данных => Тема начата: ring0 от Февраль 16, 2009, 11:40



Название: Неправильные значения в QSqlQuery
Отправлено: ring0 от Февраль 16, 2009, 11:40
Привет всем, возникла очень неприятная проблема. В БД под управлением Postgres 8.2 в таблице есть поле типа real, которое хранит дробные значения. При выборке с помощью QSqlQuery дробная часть не отображается, хотя повторяя этот же запрос в pgAdmin III данные впорядке. Как быть, как заставить отображать дробную часть?  ???


Название: Re: Неправильные занчения в QSqlQuery
Отправлено: Karl-Philipp от Февраль 16, 2009, 11:53
Как вы получаете значения с помощью QSqlQuery? Приведите пример.

ps: пробовали так?
Код
C++ (Qt)
QSqlQuery query;
...
qDebug() << query.value(n).toDouble();
...


Название: Re: Неправильные занчения в QSqlQuery
Отправлено: ring0 от Февраль 16, 2009, 12:09
Да, кроме того в TableView тоже отображается без дробной части, собственно поэтому и заметил.


Название: Re: Неправильные занчения в QSqlQuery
Отправлено: Rcus от Февраль 16, 2009, 12:34
PG пока не установлен, поэтому тестов провести не могу. Попробуйте посмотреть какой тип QVariant::Type устанавливается для данного поля. Еще можно собрать Qt в дебаге и трассировать до QVariant QPSQLResult::data(int i).


Название: Re: Неправильные значения в QSqlQuery
Отправлено: ритт от Февраль 16, 2009, 21:16
мои пять копеек предположений: void QSqlQuery::setNumericalPrecisionPolicy ( QSql::NumericalPrecisionPolicy precisionPolicy )


Название: Re: Неправильные значения в QSqlQuery
Отправлено: BaltikS от Февраль 16, 2009, 21:47
Пользуюсь версией Qt 4.3.5 и PostgreSQL 8.1, 8.3, 7.4 - работает без проблем! Имхо, пока не будет примера кода, сказать что то определённое будет тяжело... Возможно ещё дело в драйвере...


Название: Re: Неправильные значения в QSqlQuery
Отправлено: BaltikS от Февраль 16, 2009, 21:49
Да, забыл спросить? А откуда Вы взяли real? В PostgreSQL нет такого типа... Есть float4 и float8


Название: Re: Неправильные значения в QSqlQuery
Отправлено: ring0 от Февраль 24, 2009, 14:08
Хм, спасибо всем за ответы, но диплом уже сдан :).

Real в pgAdminIII, сам я постгрес не особо, это мой первый проект с этой СУБД был.


Название: Re: Неправильные значения в QSqlQuery
Отправлено: ranet от Октябрь 11, 2009, 22:36
Позволю себе реанимировать тему ;D
Столкнулся с такими же граблями, причем работает интересно:
-если ввести число через lineEdit (привинчен с помощью маппера к QSqlRelationalTableModel), и потом посмотреть в pgAdmin'е - то дробную часть видно..
-но в QTableView все равно отображается только целая часть, и в lineEdit тоже..
нашел такую фигню:http://www.prog.org.ru/topic_10049_0.html, парни предлагают перекомпилить драйвер, и закомментировать кусок кода.. Но наверное лучше и правда попробовать NumericalPrecisionPolicy изменить.. Только пока не смог придумать, где это лучше сделать..
Код:
my_model->query().setNumericalPrecisionPolicy(QSql::LowPrecisionDouble);
-не прокатывает..


Название: Re: Неправильные значения в QSqlQuery
Отправлено: BaltikS от Октябрь 13, 2009, 07:23
Ось какая? Какая версия Qt?


Название: Re: Неправильные значения в QSqlQuery
Отправлено: ranet от Октябрь 13, 2009, 09:45
Ось какая? Какая версия Qt?
OS Linux 2.6.25-std-def-alt8.M41.4 (alt Linux)
Qt 4.5.2
postgresql 8.3

Но по ссылке точно так же косячило на МСВС :-\


Название: Re: Неправильные значения в QSqlQuery
Отправлено: BaltikS от Октябрь 13, 2009, 11:09
Всё таки попробуйте драйверок поправить, самый простой способ... Ну можете в базе изменить тип данных ещё... Но это не есть гут!


Название: Re: Неправильные значения в QSqlQuery
Отправлено: ranet от Октябрь 13, 2009, 11:26
Всё таки попробуйте драйверок поправить, самый простой способ... Ну можете в базе изменить тип данных ещё... Но это не есть гут!
конечно не есть.. Там же получается, что просто обходим проверку, какая NumericalPrecisionPolicy выбрана.. Придумать бы, как её явно задать.. можно конечно 4.6 скачать, но превью не очень хочется.. текущая версия 4.5.3, это выше чем моя 4.5.2.. да и может не помочь нифига.. нет, нужно разобраться попробовать..


Название: Re: Неправильные значения в QSqlQuery
Отправлено: ranet от Октябрь 18, 2009, 19:12
Блин, нифига ничего не придумывается, пока пришлось изуродовать драйвер... Хотя это и не решение, но опыт полезный:)

Дробная часть теперь отображается и редактируется, но опять с фокусами:
в TableView разделитель дробной и целой части - запятая, в LineEdit'ах привинченных к той же таблице через mapper - точка ;D ;D ;D блин...


Название: Re: Неправильные значения в QSqlQuery
Отправлено: star62 от Декабрь 16, 2009, 19:59
Для временного быстрого решения могу предложить такой вариант. Жестко с SQL запросе делать приведение типа к строке. У меня этот вариант сработал и дробная часть появилась.


Название: Re: Неправильные значения в QSqlQuery
Отправлено: Barmaglodd от Декабрь 17, 2009, 10:07
Дробная часть теперь отображается и редактируется, но опять с фокусами:
в TableView разделитель дробной и целой части - запятая, в LineEdit'ах привинченных к той же таблице через mapper - точка ;D ;D ;D блин...
Потому что в Qt хроническая болезнь любви к C локали, они её лечат лечат, да никак не вылечат. Просто в делегате таблицы они используют конвертацию в строку в учётом установленной для приложения локали, а в маппере - тупо через "C" локаль. И таких мест много :(


Название: Re: Неправильные значения в QSqlQuery
Отправлено: ranet от Май 09, 2010, 22:25
Ну вот, в 4.6 дробная часть отображается ;D Драйвер больше подправлять не нужно ;D Но косяк с разделителем целой и дробной части - остался.