Russian Qt Forum

Qt => Базы данных => Тема начата: pacmanoid от Август 01, 2006, 20:31



Название: QT4 и поля таблици созданные как NUMERIC(5,2)
Отправлено: pacmanoid от Август 01, 2006, 20:31
Возникла интересная проблема:
Использую QT4.1.3 + QIBASE + Firebird1.5 + LINUX

Создал SQL запросом простую таблицу одно из полей которой описывается так:

...
P7_MW          NUMERIC(5,2) DEFAULT 0,
...

Потом в клиентском приложении создаю модеть о передаю ее виджету отображения. В модели использую простой select * from mytabl.

Почемуто числа в таблице отображаются так
если 1 то в ячейке 100
если 44.1 то в ячейке 4410

если создать поле с

...
P7_MW          NUMERIC(10,2) DEFAULT 0,
...

то все отображается нормально

если 1 то в ячейке 1
если 44.1 то в ячейке 44.1

Что за хрень непойму, может както можно задать маску для отображения таких полей или я чтото делаю нетак. Может чего незнаю. Пожалуста, подскажите кто знает в чем проблема?


Название: QT4 и поля таблици созданные как NUMERIC(5,2)
Отправлено: Alexandr Az от Август 04, 2006, 11:31
Мдя. Грустно. Что тут сказать. Не сделали они дрова нормальные для ибейса. Смысл такой, твой тип валяется в самой базе как integer. Типа нефиг его хранить в флоат если он в интеджер влазит. Тут понятно. Ну и база соответственно возвращает что тип интеджер. Токи она ещё и возвращает scale, в твоём случае - 2. А куте на scale забило. Если ты NUMERIC(10,2) сделаешь, в интеджер он не влазить, его тип в базе флоат, и всё хорошо. Короче. пересобери дрова, изменить функцию qIBaseTypeName2, добавив туда второй парамер scale и анализировать его :). Ну и соответственно поменять вызовы этой функции. Удачи. Тут с ибейсом много работают, думаю что все с такими граблями стыкнутся. Хорошо когда база твоя, а когда кто то другой её ваяет.

добавлено спустя:

 Гы. Думаю всё же понять токи одну эту функцию не поможет, надо еще и результат делить на 10 в степени скале :)


Название: QT4 и поля таблици созданные как NUMERIC(5,2)
Отправлено: Alexandr Az от Август 08, 2006, 14:20
Hi Alexandr,

On Friday, 04. aug 2006 11:00 azazello/mesr.zt.energy.gov.ua wrote:

> Short description:
> wrong return field type for interbase/firebird
>
> What I did:
> in interbase/firebird create field NUMERIC(5,2) and got in select sql
> statment QSqlField type integer.
>
> What I expected to see:
> I wanna got sql field type float
>
> What I got instead:
> got QSqlField type integer
>
> More info:
> firebird/interbase keep small numeric field in type integer. QT ibase
> plugin ignore this and parameter scale (in my case 2). if I create
> NUMERIC(10,2), firebird/interbase keep this field in float type and
> all Ok.

I can reproduce this problem here so I've created task 125053 for our
developers who will look into this further.  You can track this task
using the task tracker at:

        http://www.trolltech.com/developer/task-tracker
        http://www.trolltech.com/customers/task-tracker

Thanks for the report,

Andy
--
Andy Shaw, Senior Support Engineer
Trolltech ASA, Oslo - http://www.trolltech.com