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

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

DBGrid, XML и DecimalSeparator [D6, DB2]


Haba ©   (2003-09-03 17:28:00) 

Приветствую, коллеги.
Возникла тут проблема - никак не могу побороть.
Есть у меня сервер на юниксообразной машине, который обрабатывает клиентские запросы к БД и отсылает в обратку XML сформированый в формате TClientDataSet.XMLData.
Далее, я вывожу данные в DBGrid-e через ClientDataSet и всё бы нормально, до вот только с плавающей точкой какая то странность.
Если в установках клиента (Settings->Regional Settings) сепараотром установлена запятая, то всё ок. Если точка - то, соответственно, не работает.
Собственно, вопрос:
Как "научить" DBGrid съедать децемальные значения разделенные каким-то определенным знаком а не тем, что стоит в винде по умолчанию?


Haba   (2003-09-04 11:33:00) [1]

Ага... А вообще возможно глобальный DecimalSeparator поменять?
Если просто менять переменную DecimalSeparator, то эффект проявляется только на отображении, как я уже ранее писал.
Парсить XML ещё раз очень не хочется. В принципе, можно конечно передавать серверу заранее DecimalSeparator, но это мне тоже не особо нравится :(


Тих   (2003-09-04 00:01:00) [2]

Тут целая наука, я ей наелся в свое время по горло с MSXML; какие принципы в MIDAS - не знаю, но могу дать пару кровавых советов. Когда на одной машине стоит английская Win c русской локалью, русский ворд 97 и английский Excel, и все это надо спаривать посредством XML - это очень сексуально.

Все аттрибуты в XML - это Variant`ы. В зависимости от региональных установок на машине fp-число может упаковываться в аттрибут или значение нода как с запятой, так и с точкой. Я наступал на грабли тогда, когда сервер с русской локалью паковал XML с запятой, а клиент с английской локалью пытался распаковать аттрибут нода во float, потому вываливался EConvertError и прочие прелести. Написал функцию, которая точки и запятые в аттрибуте заменяет на DecimalSeparator... глюки пропали..
Глобальный DecimalSeparator менять было нельзя, потому что Excel предоставлял fp-числа отчего-то с точкой, несмотря на русскую локаль, а MSXML с запятой...

Существует шанс, что какой-нить балбес в своих региональных настройках выставит разделителем чего-нить иное, и тогда ... :-)


Haba   (2003-09-03 17:44:00) [3]

Ой, сорри, совсем забыл написать, что я это пробовал (и в связке с Application.UpdateFormatSettings:=false; и без) и повлияло это только на отображение в гриде а не на восприятие данных датасетом. Хотя, если сменить ручками через Settings->Regional Settings - влияет и работает.


Nikolay M.   (2003-09-03 17:37:00) [4]

Ну дык а если с DecimalSeparator поиграться? Установить его на некоторое время в запятую?


Наверх

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