Некорректное отображение числа Float в DBGrid
Модератор: Модераторы
- Slavikk
- постоялец
- Сообщения: 208
- Зарегистрирован: 15.01.2007 21:34:52
- Откуда: Из лесов...
- Контактная информация:
Некорректное отображение числа Float в DBGrid
Некорректное отображение числа Float в DBGrid
В таблице базы данных есть поле float. В это поле вставляю числа – например: 3,84. При отображении в DBGrid число отображается как 4. При нажатии на ячейку таблицы (переход в режим редактирования ячейкм), число отображается в таблице как 3,84.
Вопрос как сделать отображение 3,84 – по умолчанию при открытии таблицы (как при переходе в режим редактирования).
Lazarus 0.9.23 (сборка конца октября), Zeos 6.6.1, SQLite 3.
Заранее спасибо.
В таблице базы данных есть поле float. В это поле вставляю числа – например: 3,84. При отображении в DBGrid число отображается как 4. При нажатии на ячейку таблицы (переход в режим редактирования ячейкм), число отображается в таблице как 3,84.
Вопрос как сделать отображение 3,84 – по умолчанию при открытии таблицы (как при переходе в режим редактирования).
Lazarus 0.9.23 (сборка конца октября), Zeos 6.6.1, SQLite 3.
Заранее спасибо.
- Slavikk
- постоялец
- Сообщения: 208
- Зарегистрирован: 15.01.2007 21:34:52
- Откуда: Из лесов...
- Контактная информация:
автоматически поля из базы вытягивает zquery (зеосовский), дата сорс и таблицы автоматически из него всё получают. Пробавал сделать вручную - но ненашёл где float прописать.
Просто не охота всё писать в базу как стринг, а потом при сложении делать стрингтофлоат. Хочется красиво записать флоат, чтобы он отображался как флоат и складывался без преобразований, но видно не судьба... наверное.
Просто не охота всё писать в базу как стринг, а потом при сложении делать стрингтофлоат. Хочется красиво записать флоат, чтобы он отображался как флоат и складывался без преобразований, но видно не судьба... наверное.
- Slavikk
- постоялец
- Сообщения: 208
- Зарегистрирован: 15.01.2007 21:34:52
- Откуда: Из лесов...
- Контактная информация:
На данный момент проблема выглядит так (мои мысли):
SQLite2 - все данные хранила в ASCII тексте. SQLite3 для хранения использует:
- NULL
-INTEGER
-REAL
-TEXT
-BLOB
Вне зависимости, что вы ему скормили
. Например Float и Double хранятся как Real.
Хорошо - изменил базу данных и храню данные в столбце как Real. Всё равно при отображении столбца в TDBGrid вместо 3,84 в ячейке отображается 4 - пока на ячейку не ткнешь для редактирования (тогда в ячейке 3,84).
По идее виноваты оба
и я чуть чуть
. В 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 выводить, по полю с датой сортировать. Но как бы это очень неудобно
. Да и с Zeos мне работать привычней.
SQLite2 - все данные хранила в ASCII тексте. SQLite3 для хранения использует:
- NULL
-INTEGER
-REAL
-TEXT
-BLOB
Вне зависимости, что вы ему скормили
Хорошо - изменил базу данных и храню данные в столбце как Real. Всё равно при отображении столбца в TDBGrid вместо 3,84 в ячейке отображается 4 - пока на ячейку не ткнешь для редактирования (тогда в ячейке 3,84).
По идее виноваты оба
Если использовать TSQL3DATASET, а не Zeos, то с отображением Real - нет проблем, а вот с отображением даты они начинаются (она просто не отображается).
Т.к. мне нужно здесь и сейчас, т.к. я знаю что в записи будет не больше 15 знаков и записей не будет больше 1 000 000, причём их плюсовать не будут чаше чем раз в месяц, смахнув скупую слезу оптимизации и экономии аппаратных ресурсов - решил всё хранить в string и ждать выхода SQLite 4 - c нормальной поддержкой Float или новой версии Zeos...
Вообще тоже много работал с Firebird (правда на Delphi). А в конкретно этом проекте юзаю SQLite3, т.к. у меня ограничения на установочный файл - не более 3-5 мегабайт (для Windows).
Можно конечно было использовать TSQL3DATASET, и дату хранить в двух полях (дублировать) - с типами дата и string. String выводить, по полю с датой сортировать. Но как бы это очень неудобно
Последний раз редактировалось Slavikk 01.11.2007 17:44:44, всего редактировалось 1 раз.
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
Вообще, IMHO, зря Вы на SQLite позарились. По сравнению с птичкой там экономия не очень большая, а функционал и клиентские библиотеки отличаются очень сильно. Я как-то пытался заморочиться с этим делом и даже компоненты почти написал, но потом понял, что очень уж SQLite специфичен и мало пригоден для дельфи-подобной DB-архитектуры.
- Slavikk
- постоялец
- Сообщения: 208
- Зарегистрирован: 15.01.2007 21:34:52
- Откуда: Из лесов...
- Контактная информация:
Согласен, но нужно просто по проекту вписатся в 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 есть.
"2002-05-15 Alpha Release for WinCE 3.0 (compressed tarball) V.1.0 alpha efforts to build Firebird 1 on WinCE"
я не нашёл. А вот SQLite для WinCE есть.
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
- Slavikk
- постоялец
- Сообщения: 208
- Зарегистрирован: 15.01.2007 21:34:52
- Откуда: Из лесов...
- Контактная информация:
Всё, ответ дан на форуме Zeos:
По Русски:
1. Два раза щелкаем мышкой по вашему TZQuery. Нажимаем правую кнопку мыши в открывшемся окне (окно 2) и выбираем - Add Fields. Открывается новое окно в котором отображены все поля из таблицы (которые вы открываете с помощью SQL запроса в TZQuery). Выбираете нужные вам поля для отображения и жмите кнопку - Create.
2. Выбираем нужное поле в окне (окне 2) - которое должно у нас отображаться как Float и в DisplayFormat ставим - ##0.## (а я туда Float пытался подставить и удивлялся почему ничего не происходит
).
Всё начинает работать как должно.
Ждём SQLite 4 - может в нём появится нормальная поддержка всех переменных...
Всем большое спасибо за помощь!!! 
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 пытался подставить и удивлялся почему ничего не происходит
