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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: PSQL и MCBC [РЕШЕНО]  (Прочитано 2883 раз)
BaltikS
Гость
« : Июль 15, 2009, 18:11 »

Был успешно скомпилен Qt-4.5.2 под чудо ось МСВС, скомпилен драйвер из SDK Линтера 6.0. Казалось бы - всё чудесно... Но случайно обнаружил, что тип double (тип в БД) или real - округляется до целого...при выборе из query.value(x).toDouble(). Ну и никак не побороть... Пока решилось заменой поля в БД double на varchar, но понимаю, что это не выход... Кто поможет советом?
Заранее благодарю за внимание!
« Последнее редактирование: Июль 16, 2009, 15:53 от BaltikS » Записан
sLiva
Гость
« Ответ #1 : Июль 15, 2009, 22:17 »

Был успешно скомпилен Qt-4.5.2 под чудо ось МСВС, скомпилен драйвер из SDK Линтера 6.0. Казалось бы - всё чудесно... Но случайно обнаружил, что тип double (тип в БД) или real - округляется до целого...при выборе из query.value(x).toDouble(). Ну и никак не побороть... Пока решилось заменой поля в БД double на varchar, но понимаю, что это не выход... Кто поможет советом?
Заранее благодарю за внимание!

Проблема аналогичная, началась с версии 4.5.0
Откатились на 4.4.3 там все норм.
Советую откатываться, в базе менять типы совсем не вариант, будем ждать, в новых версиях может починят...
Записан
BaltikS
Гость
« Ответ #2 : Июль 16, 2009, 10:51 »

Нашёл временное решение проблемы. Без пересборки драйвера увы, не обойтись...
1) Ищем файл qsql_psql.cpp
2) Со строки 321 по строку 338 комментируем следующие строки...
Код
C++ (Qt)
case QVariant::Double:
   /*    if (ptype == QNUMERICOID) {
           if (d->precisionPolicy != QSql::HighPrecision)*/
{
               QVariant retval;
               bool convert;
/*                if (d->precisionPolicy == QSql::LowPrecisionInt64)
                   retval = QString::fromAscii(val).toLongLong(&convert);
               else if (d->precisionPolicy == QSql::LowPrecisionInt32)
                   retval = QString::fromAscii(val).toInt(&convert);
               else if (d->precisionPolicy == QSql::LowPrecisionDouble)*/

                   retval = QString::fromAscii(val).toDouble(&convert);
               if (!convert)
                   return QVariant();
               return retval;
           }
/*            return QString::fromAscii(val);
       }
       return strtod(val, 0);*/

 
 
пусть это кривовато, зато временно работает Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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