Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Разрядность [D7, MSSQL]


anatolyk ©   (2003-07-06 11:06:00) 

Привет всем!
Помоготе с такой штукой разобраться:
в поле таблицы MSSQL хранится значение, напр. 0,50625
при отображении его в DBGRIDe (ADOQuery - Datasource - DbGrid) оно округляется до 4 знаков.(?) А мне этого не надо.
Заранее спасибо за помощь.


Anatoly Podgoretsky   (2003-07-06 13:36:00) [1]

Значит дело не в бобине


anatolyk   (2003-07-06 13:20:00) [2]

Заново все переделал - пошло. И DisplayFormet работает нормально. Всем спасибо.


sniknik   (2003-07-06 12:58:00) [3]

> Со всеми та же беда
тогда единственное, гдето у тебя DisplayFormat ограничивающий стоил. по другому просто не бывает
у меня например с real до черт знает какого знака видит...
ну к примеру создаю таблицу
CREATE TABLE IDD (ID INT Identity(1,1), db Float)
ложу запись
INSERT INTO IDD (db) VALUES (0.1234567890123456789)
делаю селект
SELECT * FROM IDD
вижу в гриде "0.123456789012346"
т.е. полное что туда попало.


anatolyk   (2003-07-06 12:41:00) [4]

Кстати, о типе.
Из нецелочисленных (в MSSQL) есть Decimal, Float и Real. Со всеми та же беда. Я думаю, надо что-то делать в Delphi.

Передача строкой - некрасиво. Запрос на выбор 10 полей - читать замучаешься. Хотелось бы работать с конструкцией SELECT * ....


anatolyk   (2003-07-06 12:29:00) [5]

Ладно, не ругайся! Я раньше писал на Clarione, там такой фигни не было: Real всегда остается Real. А программер сам, когда нужно, округляет и усекает.


sniknik   (2003-07-06 12:12:00) [6]

> хотя со стороны Borland (Inprise) это свинство.
ага а разрядная сетка свинство от интел, не могли ничего лутше придумать. ;о))

ты бы не наезжал понапрасну, у вего есть свои ограничения/недостатки просто потому что без них этого самого не было бы. в конце концов не в сказке живеш.
у тебя куча вариантов, поэксперементируй, повыбирай. тип на double поменяй посмотри что будет.


anatolyk   (2003-07-06 11:55:00) [7]

Поле в базе - Float, Length=8
А вот EnableBCD было True. Посмотрел - теперь 0.00025 не округлилось, а усеклось.
Попробую вар.3, хотя со стороны Borland (Inprise) это свинство.


sniknik   (2003-07-06 11:46:00) [8]

не всегда помогает, если тип поля NUMERIC(x,x) либо DECIMAL(x,x) то там каким то боком участвует в преобразовании тип currency у которого как раз 4 знака максимум в дробной части, делает усечение.
недавно подобный вопрос был, показалось интересным, разбирался. но там хотя бы полная инфа по полям и где в каком случае усекается была... здесь продположительно. т.е. если тип стоит double или похожий то явно DisplayFormat если NUMERIC то см.выше.
не нашол тот вопрос там подробно расписал :-(( насколько помню.

в общем три варианта (если мое предположение по типам верно), первое сменить тип поля в базе,
второе отключить BCD (EnableBCD=false) тогда в преобразовании участвует тип double и все разряды проходят (но естественно возникает опасность потери точности изза разрядной сетки),
третье делать преобразование в запросе (в строку к примеру), тогда разрядность сохранится точно (некое подобие BCD). ну или к double.


anatolyk   (2003-07-06 11:39:00) [9]

В гриде меняю формат на 0.00000, но знаки показываются, а округление все-равно происходит. Мне кажется, что надо что-то с запрсом делать.


Anatoly Podgoretsky   (2003-07-06 11:20:00) [10]

Если не надо, то измени DisplayFormat у поля


Наверх

Титульная страница Поиск, карта сайта Написать письмо