Некорректное отображение числа Float в DBGrid

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Некорректное отображение числа Float в DBGrid

Сообщение Slavikk » 01.11.2007 10:42:34

Некорректное отображение числа Float в DBGrid

В таблице базы данных есть поле float. В это поле вставляю числа – например: 3,84. При отображении в DBGrid число отображается как 4. При нажатии на ячейку таблицы (переход в режим редактирования ячейкм), число отображается в таблице как 3,84.

Вопрос как сделать отображение 3,84 – по умолчанию при открытии таблицы (как при переходе в режим редактирования).

Lazarus 0.9.23 (сборка конца октября), Zeos 6.6.1, SQLite 3.

Заранее спасибо.
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...

Сообщение Attid » 01.11.2007 11:03:35

может это не грид а датасет виноват ? у тя там поле как определяется ? выстави принудительно флоат.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Slavikk » 01.11.2007 15:50:10

автоматически поля из базы вытягивает zquery (зеосовский), дата сорс и таблицы автоматически из него всё получают. Пробавал сделать вручную - но ненашёл где float прописать.

Просто не охота всё писать в базу как стринг, а потом при сложении делать стрингтофлоат. Хочется красиво записать флоат, чтобы он отображался как флоат и складывался без преобразований, но видно не судьба... наверное.
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...

Сообщение Attid » 01.11.2007 16:44:52

но видно не судьба... наверное.

ты это, того, пасивные мысли брось, еще картинки предложи в стринге хранить, если что-то не работает надо чинить, пинай Zeos если скажут что лазарь виноват, будем лазарь пинать.

просто с птичкой у меня проблем нету, поэтому грешу на твои компоненты.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Slavikk » 01.11.2007 17:57:36

На данный момент проблема выглядит так (мои мысли):

SQLite2 - все данные хранила в ASCII тексте. SQLite3 для хранения использует:
- NULL
-INTEGER
-REAL
-TEXT
-BLOB
Вне зависимости, что вы ему скормили :D. Например Float и Double хранятся как Real.

Хорошо - изменил базу данных и храню данные в столбце как Real. Всё равно при отображении столбца в TDBGrid вместо 3,84 в ячейке отображается 4 - пока на ячейку не ткнешь для редактирования (тогда в ячейке 3,84).

По идее виноваты оба :D и я чуть чуть :D. В SQLite3 - нет нормального Float (в Lazaruse он через Double сделан, т.к. Real считается устаревшим (менее точным)). А в Zeos нет нормального отображения Real в TDBGrid - думаю т.к. Real менее точным.

Если использовать TSQL3DATASET, а не Zeos, то с отображением Real - нет проблем, а вот с отображением даты они начинаются (она просто не отображается).

Т.к. мне нужно здесь и сейчас, т.к. я знаю что в записи будет не больше 15 знаков и записей не будет больше 1 000 000, причём их плюсовать не будут чаше чем раз в месяц, смахнув скупую слезу оптимизации и экономии аппаратных ресурсов - решил всё хранить в string и ждать выхода SQLite 4 - c нормальной поддержкой Float или новой версии Zeos...

Вообще тоже много работал с Firebird (правда на Delphi). А в конкретно этом проекте юзаю SQLite3, т.к. у меня ограничения на установочный файл - не более 3-5 мегабайт (для Windows).

Можно конечно было использовать TSQL3DATASET, и дату хранить в двух полях (дублировать) - с типами дата и string. String выводить, по полю с датой сортировать. Но как бы это очень неудобно :D . Да и с Zeos мне работать привычней.
Последний раз редактировалось Slavikk 01.11.2007 18:44:44, всего редактировалось 1 раз.
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...

Сообщение Сергей Смирнов » 01.11.2007 18:40:59

Есть "родной" пакет для SQLite3 среди компонент лазаря. Не пробовали? Потому как, сдаётся мне, проблема всё же в компонентах ZEOS.
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Сообщение Slavikk » 01.11.2007 18:53:40

Если использовать TSQL3DATASET, а не Zeos, то с отображением Real - нет проблем, а вот с отображением даты они начинаются (она просто не отображается). :D
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...

Сообщение Сергей Смирнов » 01.11.2007 19:00:26

У Вас дата в каком виде хранится? А то там есть нюансы...
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Сообщение Slavikk » 01.11.2007 20:58:36

При создании ....DateOp date,....
При записи ...''2007-02-01'',''Вася'', 3.84,...
Zeos на вставку дату только в таком формате съел.
А можно поподробнее про нюансы пожалуйста :shock:
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...

Сообщение Сергей Смирнов » 01.11.2007 21:31:16

В принципе, ZEOS прав. Текстовый формат более универсален и безопасен. Но ещё часто используется unix timestamp, а это уже int или bigint. Я не знаю, какой из них подразумевается в TSQL3DATASET, но подозреваю, что как раз целочисленный. Проще попробовать, чем гадать :)
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Сообщение Сергей Смирнов » 01.11.2007 21:36:42

Вообще, IMHO, зря Вы на SQLite позарились. По сравнению с птичкой там экономия не очень большая, а функционал и клиентские библиотеки отличаются очень сильно. Я как-то пытался заморочиться с этим делом и даже компоненты почти написал, но потом понял, что очень уж SQLite специфичен и мало пригоден для дельфи-подобной DB-архитектуры.
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Сообщение Slavikk » 01.11.2007 21:51:12

Согласен, но нужно просто по проекту вписатся в 3-5 мегабайт и запускатся как на Windows, так и на WinCE. К сожалению хорошего порта firebird под wince кроме:
"2002-05-15 Alpha Release for WinCE 3.0 (compressed tarball) V.1.0 alpha efforts to build Firebird 1 on WinCE"
я не нашёл. А вот SQLite для WinCE есть.
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...

Сообщение Сергей Смирнов » 01.11.2007 22:00:00

Мда, условия относительно жесткие. А не проще использовать непосредственно SQLite API? Там всё очень просто и удобно (кой-кому не мешало бы поучиться). Приделать какой-нибудь объектный маппинг как это сейчас модно. Хотя, если время поджимает, то уже проблематичнее.
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Сообщение alexs » 01.11.2007 23:36:20

Slavikk писал(а):При отображении в DBGrid число отображается как 4

Посмотри свойства у поля твоего - DisplayFormat и EditFormat - скорее всего именно здесь собака порылась.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Slavikk » 02.11.2007 10:26:30

Всё, ответ дан на форуме Zeos:

It's because Zeos use TFloatField and not TBCDField. But to display correctly you must set the DisplayFormat property of the persistant field of your query to #,##0.##


По Русски:
1. Два раза щелкаем мышкой по вашему TZQuery. Нажимаем правую кнопку мыши в открывшемся окне (окно 2) и выбираем - Add Fields. Открывается новое окно в котором отображены все поля из таблицы (которые вы открываете с помощью SQL запроса в TZQuery). Выбираете нужные вам поля для отображения и жмите кнопку - Create.
2. Выбираем нужное поле в окне (окне 2) - которое должно у нас отображаться как Float и в DisplayFormat ставим - ##0.## (а я туда Float пытался подставить и удивлялся почему ничего не происходит :D ).
:idea: Всё начинает работать как должно.

:wink: Ждём SQLite 4 - может в нём появится нормальная поддержка всех переменных... :D

:!: Всем большое спасибо за помощь!!! :D
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 43

Рейтинг@Mail.ru