Форум: "Базы";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];
ВнизРазрядность Найти похожие ветки
← →
anatolyk (2003-07-06 11:06) [0]Привет всем!
Помоготе с такой штукой разобраться:
в поле таблицы MSSQL хранится значение, напр. 0,50625
при отображении его в DBGRIDe (ADOQuery - Datasource - DbGrid) оно округляется до 4 знаков.(?) А мне этого не надо.
Заранее спасибо за помощь.
← →
Anatoly Podgoretsky (2003-07-06 11:20) [1]Если не надо, то измени DisplayFormat у поля
← →
anatolyk (2003-07-06 11:39) [2]В гриде меняю формат на 0.00000, но знаки показываются, а округление все-равно происходит. Мне кажется, что надо что-то с запрсом делать.
← →
sniknik (2003-07-06 11:46) [3]не всегда помогает, если тип поля NUMERIC(x,x) либо DECIMAL(x,x) то там каким то боком участвует в преобразовании тип currency у которого как раз 4 знака максимум в дробной части, делает усечение.
недавно подобный вопрос был, показалось интересным, разбирался. но там хотя бы полная инфа по полям и где в каком случае усекается была... здесь продположительно. т.е. если тип стоит double или похожий то явно DisplayFormat если NUMERIC то см.выше.
не нашол тот вопрос там подробно расписал :-(( насколько помню.
в общем три варианта (если мое предположение по типам верно), первое сменить тип поля в базе,
второе отключить BCD (EnableBCD=false) тогда в преобразовании участвует тип double и все разряды проходят (но естественно возникает опасность потери точности изза разрядной сетки),
третье делать преобразование в запросе (в строку к примеру), тогда разрядность сохранится точно (некое подобие BCD). ну или к double.
← →
anatolyk (2003-07-06 11:55) [4]Поле в базе - Float, Length=8
А вот EnableBCD было True. Посмотрел - теперь 0.00025 не округлилось, а усеклось.
Попробую вар.3, хотя со стороны Borland (Inprise) это свинство.
← →
sniknik (2003-07-06 12:12) [5]> хотя со стороны Borland (Inprise) это свинство.
ага а разрядная сетка свинство от интел, не могли ничего лутше придумать. ;о))
ты бы не наезжал понапрасну, у вего есть свои ограничения/недостатки просто потому что без них этого самого не было бы. в конце концов не в сказке живеш.
у тебя куча вариантов, поэксперементируй, повыбирай. тип на double поменяй посмотри что будет.
← →
anatolyk (2003-07-06 12:29) [6]Ладно, не ругайся! Я раньше писал на Clarione, там такой фигни не было: Real всегда остается Real. А программер сам, когда нужно, округляет и усекает.
← →
anatolyk (2003-07-06 12:41) [7]Кстати, о типе.
Из нецелочисленных (в MSSQL) есть Decimal, Float и Real. Со всеми та же беда. Я думаю, надо что-то делать в Delphi.
Передача строкой - некрасиво. Запрос на выбор 10 полей - читать замучаешься. Хотелось бы работать с конструкцией SELECT * ....
← →
sniknik (2003-07-06 12:58) [8]> Со всеми та же беда
тогда единственное, гдето у тебя 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 13:20) [9]Заново все переделал - пошло. И DisplayFormet работает нормально. Всем спасибо.
← →
Anatoly Podgoretsky (2003-07-06 13:36) [10]Значит дело не в бобине
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c