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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Неправильные значения в QSqlQuery  (Прочитано 11252 раз)
ring0
Гость
« : Февраль 16, 2009, 11:40 »

Привет всем, возникла очень неприятная проблема. В БД под управлением Postgres 8.2 в таблице есть поле типа real, которое хранит дробные значения. При выборке с помощью QSqlQuery дробная часть не отображается, хотя повторяя этот же запрос в pgAdmin III данные впорядке. Как быть, как заставить отображать дробную часть?  Непонимающий
« Последнее редактирование: Февраль 16, 2009, 13:52 от Dendy » Записан
Karl-Philipp
Гость
« Ответ #1 : Февраль 16, 2009, 11:53 »

Как вы получаете значения с помощью QSqlQuery? Приведите пример.

ps: пробовали так?
Код
C++ (Qt)
QSqlQuery query;
...
qDebug() << query.value(n).toDouble();
...
Записан
ring0
Гость
« Ответ #2 : Февраль 16, 2009, 12:09 »

Да, кроме того в TableView тоже отображается без дробной части, собственно поэтому и заметил.
Записан
Rcus
Гость
« Ответ #3 : Февраль 16, 2009, 12:34 »

PG пока не установлен, поэтому тестов провести не могу. Попробуйте посмотреть какой тип QVariant::Type устанавливается для данного поля. Еще можно собрать Qt в дебаге и трассировать до QVariant QPSQLResult::data(int i).
Записан
ритт
Гость
« Ответ #4 : Февраль 16, 2009, 21:16 »

мои пять копеек предположений: void QSqlQuery::setNumericalPrecisionPolicy ( QSql::NumericalPrecisionPolicy precisionPolicy )
Записан
BaltikS
Гость
« Ответ #5 : Февраль 16, 2009, 21:47 »

Пользуюсь версией Qt 4.3.5 и PostgreSQL 8.1, 8.3, 7.4 - работает без проблем! Имхо, пока не будет примера кода, сказать что то определённое будет тяжело... Возможно ещё дело в драйвере...
Записан
BaltikS
Гость
« Ответ #6 : Февраль 16, 2009, 21:49 »

Да, забыл спросить? А откуда Вы взяли real? В PostgreSQL нет такого типа... Есть float4 и float8
Записан
ring0
Гость
« Ответ #7 : Февраль 24, 2009, 14:08 »

Хм, спасибо всем за ответы, но диплом уже сдан Улыбающийся.

Real в pgAdminIII, сам я постгрес не особо, это мой первый проект с этой СУБД был.
Записан
ranet
Гость
« Ответ #8 : Октябрь 11, 2009, 22:36 »

Позволю себе реанимировать тему Смеющийся
Столкнулся с такими же граблями, причем работает интересно:
-если ввести число через lineEdit (привинчен с помощью маппера к QSqlRelationalTableModel), и потом посмотреть в pgAdmin'е - то дробную часть видно..
-но в QTableView все равно отображается только целая часть, и в lineEdit тоже..
нашел такую фигню:http://www.prog.org.ru/topic_10049_0.html, парни предлагают перекомпилить драйвер, и закомментировать кусок кода.. Но наверное лучше и правда попробовать NumericalPrecisionPolicy изменить.. Только пока не смог придумать, где это лучше сделать..
Код:
my_model->query().setNumericalPrecisionPolicy(QSql::LowPrecisionDouble);
-не прокатывает..
Записан
BaltikS
Гость
« Ответ #9 : Октябрь 13, 2009, 07:23 »

Ось какая? Какая версия Qt?
Записан
ranet
Гость
« Ответ #10 : Октябрь 13, 2009, 09:45 »

Ось какая? Какая версия Qt?
OS Linux 2.6.25-std-def-alt8.M41.4 (alt Linux)
Qt 4.5.2
postgresql 8.3

Но по ссылке точно так же косячило на МСВС В замешательстве
Записан
BaltikS
Гость
« Ответ #11 : Октябрь 13, 2009, 11:09 »

Всё таки попробуйте драйверок поправить, самый простой способ... Ну можете в базе изменить тип данных ещё... Но это не есть гут!
Записан
ranet
Гость
« Ответ #12 : Октябрь 13, 2009, 11:26 »

Всё таки попробуйте драйверок поправить, самый простой способ... Ну можете в базе изменить тип данных ещё... Но это не есть гут!
конечно не есть.. Там же получается, что просто обходим проверку, какая NumericalPrecisionPolicy выбрана.. Придумать бы, как её явно задать.. можно конечно 4.6 скачать, но превью не очень хочется.. текущая версия 4.5.3, это выше чем моя 4.5.2.. да и может не помочь нифига.. нет, нужно разобраться попробовать..
Записан
ranet
Гость
« Ответ #13 : Октябрь 18, 2009, 19:12 »

Блин, нифига ничего не придумывается, пока пришлось изуродовать драйвер... Хотя это и не решение, но опыт полезный:)

Дробная часть теперь отображается и редактируется, но опять с фокусами:
в TableView разделитель дробной и целой части - запятая, в LineEdit'ах привинченных к той же таблице через mapper - точка Смеющийся Смеющийся Смеющийся блин...
« Последнее редактирование: Октябрь 18, 2009, 21:51 от ranet » Записан
star62
Гость
« Ответ #14 : Декабрь 16, 2009, 19:59 »

Для временного быстрого решения могу предложить такой вариант. Жестко с SQL запросе делать приведение типа к строке. У меня этот вариант сработал и дробная часть появилась.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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