![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Разрядность [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 у поля