Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.09;
Скачать: CL | DM;

Вниз

5 знаков после запятой в DBGrid   Найти похожие ветки 

 
wild_arg ©   (2006-03-23 11:23) [0]

Подскажите, как вывести 5 знаков после запятой в DBGrid? Провайдер - ADO


 
Megabyte ©   (2006-03-23 12:16) [1]

А разве DBGrid на кол-во знаков после запятой влияет? По-моему это зависит от типа поля.
Или тебе надо урезать до 5-ти знаков?


 
wild_arg ©   (2006-03-23 12:33) [2]

Влияет не DBGrid, а, видимо, провайдер... но какая разница - все же поняли. просто вывести мне надо в DBGrid. И что-то, по-моему, админ лоханулся (извиняюсь) переместив мой вопрос сюда


 
Johnmen ©   (2006-03-23 12:57) [3]

DisplayFormat


>  И что-то, по-моему, админ лоханулся (извиняюсь) переместив
> мой вопрос сюда


Ничуть...


 
Плохиш ©   (2006-03-23 12:58) [4]


> И что-то, по-моему, админ лоханулся (извиняюсь) переместив
> мой вопрос сюда

Ну конференцию для "недоначинающих" ещё не сделали.


 
wild_arg ©   (2006-03-23 13:44) [5]

Да пробовал я формат... может это, конечно, и я лоханулся, но он мне не помогает.
Взгляните сюда (~400kb) http://wild-group.narod.ru/screen.jpg
Итак, выполнен запрос. Поле "Количество2" имеет, вроде, нужный формат, но все же выдает значение 0. Хотя рядом, в поле sQnt2, указано 0,00001. В запросе, это поле равно тому же, что и Количество2, но плюс сконвертировано в varchar (что видно из выравнивания значения в гриде). Т.е., запрос выдает нужную цифру, но она неправильно отображается.
Втолкуйте.
Извиняюсь, за "лоханулся", погорячился


 
Anatoly Podgoretsky ©   (2006-03-23 13:55) [6]

У тебя ошибка в программе.


 
wild_arg ©   (2006-03-23 14:07) [7]

на представленном скриншоте нет ни одной строки кода. Это я собрал просто для демонстрации.


 
Johnmen ©   (2006-03-23 14:32) [8]

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374


 
wild_arg ©   (2006-03-23 14:56) [9]

2Johnmen
и? я знаю, как представленны вещественные числа в памяти. проблема не в этом. если бы у меня хранилось 0.00001, а он мне выдавал бы 0.00001000000234234 - я бы ничего не сказал, потому как сталкивался уже с этим и решал. здесь же, несколько иного рода трабл...
Ты если считаешь, что я туплю - так просто укажи на это, скажи вот тут и тут у тебя не так, а должно быть вот так вот. я, конечно, понимаю, что это надо быть для этого филантропом, но форумы для этого и придумали. :) а то можно дать ссылку http://   . Наверняка там что-нибудь, где-нибудь про это есть.


 
Johnmen ©   (2006-03-23 15:01) [10]


> wild_arg ©   (23.03.06 14:56) [9]


Я не считаю, что ты тупишь.
Если ссылки не помогают, значит дело в другом. А в чём - лично я теперь не могу уловить, мало исходных данных...


 
sniknik ©   (2006-03-23 15:04) [11]

> мало исходных данных...
шутиш? да их вообще нет. ;) только рисунок последствий, а это не данные.


 
wild_arg ©   (2006-03-23 15:21) [12]

есть таблица Test1 (это я опять таки для облегчения примера сейчас собрал [MS SQL Server2k + Delphi7])
1) Итак, Test1. В ней поле - fValue float. В одной из записей таблицы хранится значение поля 0.00001
2) Есть хранимая процедура (копирую код):
CREATE PROCEDURE test_SelectAll AS
select
Test1.fValue,
convert(decimal(18,6),fValue)
from
Test1

т.е. она возвращает все поля, плюс поле fValue конвертит в формат 18.6. Выполняя, эту процедуру в SQL Query Analizer - получаем (опять копирую):
1.0000000000000001E-5 .000010

3)
Делаем в Дельфях овый проект, куда суем ADOQuery, DataSet, DBGrid. Все прописываем и устанавливаем у Query свойство Active в True.
Поле fValue = 1E-5, поле COLUMN1 = 0

Где засада?

2sniknik шутишЬ :) на всякий случай


 
Костян   (2006-03-23 15:29) [13]

Да ты просто пелотка


 
sniknik ©   (2006-03-23 15:49) [14]

> Где засада?
сдесь
> convert(decimal(18,6),fValue)
получаемый тип в дельфях передается через currency у которого 4 знака после запятой максимум.


 
sniknik ©   (2006-03-23 15:52) [15]

для проверки можно заменить указанную строчку на
CAST(convert(decimal(18,6), fValue)  AS VarChar(18))
например


 
wild_arg ©   (2006-03-23 16:30) [16]

2sniknik [14]
это я понял :) поменять где-нить можно кол-во знаков?
а про вариант в [15] я говорил в [5]


 
sniknik ©   (2006-03-23 16:50) [17]

> это я понял :)
раз понял значит и что делать должен догадаться.

> поменять где-нить можно кол-во знаков?
в типе? как ты себе это представляеш?

раз используется значит уже ничего не сделаеш (если только генофонд не править на другой тип...). но это не значит что ничего нельзя сделать для отображения... бери значение до преобразований, из оригинального ADO-шного обьекта (recordset) а не дельфевской оберки, и преобразовывай к нужному виду сам.
правда я не вижу во все этом смысла... ну вот зачем менять тип с float на decimal (увеличивать рекордсет на дополнительное поле...)? придурь? ну это без меня.

> а про вариант в [15] я говорил в [5]
покажи пальцем, пересмотрел так и не увидел где. (ты и код то положил в [12], а в [5] говориш к нему добавление было? оригинально)


 
Vladix ©   (2006-03-23 17:59) [18]

У датасета, к которому привязан DBGrid нужно просто установить свойство
EnableBCD := False;


 
sniknik ©   (2006-03-23 21:15) [19]

> EnableBCD := False;
это как раз поведение при установленом (преобразование через currency), а если наоборот убрать то тип обратно к исходному float приведется (fValue - float)... (и смысл этого convert-а?)


 
Vladix ©   (2006-03-24 09:52) [20]

Не понимаю, зачем тут нужны дискуссии? Человек просил помочь решить проблему, связанную с выводом в DBGrid четырех знаков после запятой вместо требуемых пяти без изменения запроса к БД (ну мало ли, может он эти результаты еще в Enterprise Manager смотрит), а вы ему что? Кучу слов и ноль дельных советов, хотя все укладывается в одну строчку.
Говорить, что "не вижу смысла" или еще что-то подобное не поможет решить проблему. А вот то место в справке, где все четко описано.

For numeric values with more than 4 digits to the right of the decimal place, use of TFloatField is generally better. This is because TBCDField uses the currency data type that has a fixed scale of 4 decimal places.

Спасибо за внимание


 
sniknik ©   (2006-03-24 11:05) [21]

> Не понимаю, зачем тут нужны дискуссии?
вот не понимаеш, а тоже "встреваеш", смысл?

> Кучу слов и ноль дельных советов, хотя все укладывается в одну строчку.
ой сомневаюсь... ;)

> For numeric values with more than 4 digits...
а теперь внимание вопрос [0]
> как вывести 5 знаков после запятой в DBGrid?

при явном приведении поля к типу currency (для дельфей), где именно только 4...
давай помогай, вместо дискусий... слабо??? ;)
"дискусия" же, до этого, была на самом деле первоначально попыткой "выудить" исходные данные, а после попыткой обьяснить в чем его неправота.
потом смысла в действиях явтора действительно нет, ну или есть какойнибудь тайный ну тогда путь обьяснит в чем он, ведь он пытается занять мое(и не только) время на решение своих проблем (явно высосанных из пальца).
а если отбросить все "придури" в реализации то ответ(помощь) уже звучал в > Johnmen ©   (23.03.06 12:57) [3]
и он его даже использовал... но как и остальное через задницу,  и все при полном "понимании" (см. [16]). и после этого говориш не нужно дискусий (обьяснений), а что тогда? готовый код? так если даже (невероятный случай!) я его дам, то он его исковеркает или применит опять в неподходящем месте с неподходящими типами (и говорить "вот какой "нехороший" код мне на мастерах дали...") нет уж, пусть сам "мается".  

пофигу на внимание.


 
wild_arg ©   (2006-03-24 16:54) [22]

Да все уже решилось, Vladix - спасибо, действительно помогло :) Прекращайте споры.


 
sniknik ©   (2006-03-24 17:26) [23]

> действительно помогло :)
помогло ????
ВРЕШ!
без смены типа, а именно в том варианте что у тебя описан, тем что посоветовано в [18] это невозможно. (вот если ты наоборот убрал EnableBCD в false, то... а в общем см. [19])


 
Vladix ©   (2006-03-24 17:30) [24]

Я так понимаю, что форумы не для того предназначены, чтобы кого-то втоптать в грязь, И не просто так люди за помощью обращаются. Это моя точка зрения, безо всяких "пофигу на внимание". У меня была подобная ситуация, пришлось перелопатить часть VCL и часть MSDN, только потому, что никто не желает опуститься до того, чтобы ткнуть носом в уже решенную проблему. Или всем нужно изобретать велосипед?

>при явном приведении поля к типу currency (для дельфей), где именно >только 4...
>давай помогай, вместо дискусий... слабо??? ;)
Приведение, которое осуществляется в дебрях VCL само по себе нельзя назвать явным. Мы знаем, что тип decimal по умолчанию переводится в Дельфевское Currency, и что этот тип имеет четыре знака после запятой. А если нужно больше знаков? Помогайте... Или как обычно, "нет уж, пусть сам "мается""?

А вот эта конструкция, гениальная по своей простоте, которая по вашему мнению отвечает на все поставленные вопросы:
> CAST(convert(decimal(18,6), fValue) AS VarChar(18))
Это решение со стороны базы данных, замечательное решение, а что, если эту хранимую процедуру нельзя менять, что тогда, повеситься?


 
sniknik ©   (2006-03-24 18:30) [25]

> А вот эта конструкция, гениальная по своей простоте, которая по вашему мнению отвечает на все поставленные вопросы:
эта гениальная конструкция (кстати спасибо комплимент), если посмотреть в первоисточник ([15]) давалось для проверки, что с другим типом таких проблем не будет.

> Это решение со стороны базы данных, замечательное решение, а что, если эту хранимую процедуру нельзя менять, что тогда,
> повеситься?
как один из вариантов... впрочем давались и другие варианты, правда не оформленные в код и потому видимо проигнорированные. тот же DisplayFormat примененный к полю оригиналу которое тоже (если присмотрется к процедуре) присутствует... имеет тип флоат и поэтому не преобразовывается через каренси.
потом (мой вариант [17]) вытаскивать значение самому из оригинального обьекта, чем не вариант? правда он чуть посложнее первого.

> ... А если нужно больше знаков? Помогайте... Или как обычно, "нет уж, пусть сам "мается""?
именно! если нет нормального обьяснения зачем это нужно, зачем мне "париться"? для меня то эта задача интереса не представляет.



Страницы: 1 вся ветка

Текущий архив: 2006.04.09;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.02 c
2-1143273355
Vitalik__
2006-03-25 10:55
2006.04.09
Если экран с крупным шрифтом - на форме всё налазит друг на друга


15-1142944914
Кузовлев
2006-03-21 15:41
2006.04.09
Что за прога?


15-1142717347
Ketmar
2006-03-19 00:29
2006.04.09
кто-то тупит. или я, или Delphi %-)


15-1142594228
Pazitron_Brain
2006-03-17 14:17
2006.04.09
Не предоставят ли мне скрипт этого форума?...


2-1143458793
LionMen
2006-03-27 15:26
2006.04.09
Срочно!!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский