Форум: "Основная";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];
ВнизПеременная DecimalSeparator Найти похожие ветки
← →
Inna © (2005-12-23 09:10) [0]Здравствуйте, подскажите пожалуйста:
в dll использую переменную DecimalSeparator (указывает на десятичный разделитель: точка или запятая), при различных настройках системы всегда возвращает запятую, если эту переменную использую в проекте, то все работает нормально.
Почему она не работает в Dll?
← →
Inna © (2005-12-23 09:14) [1]Да, еще забыла сказать: эту Dll испльзую в InterBase.
← →
Digitman © (2005-12-23 09:28) [2]
> Dll испльзую в InterBase
на стороне сервера или на стороне клиента ?
← →
Reindeer Moss Eater © (2005-12-23 09:29) [3]если эту переменную использую в проекте, то все работает нормально.
Потому что проект использует настройки пользователя на твоей машине, а dll IB использует настройки той машины где крутиться IB. К тому же пользователь у него
иной, Инна.
← →
Inna © (2005-12-23 09:31) [4]При разработке у меня одна и таже машина
← →
Reindeer Moss Eater © (2005-12-23 09:33) [5]Зато пользователи разные.
← →
Digitman © (2005-12-23 09:33) [6]
> При разработке у меня одна и таже машина
но процесс IB-сервиса при этом работает под одной уч.записью, а твой IB-клиент - совсем под другой
← →
Inna © (2005-12-23 09:37) [7]Тогда получается, что в Dll лучше не использовать системные переменные?
← →
Reindeer Moss Eater © (2005-12-23 09:37) [8]Нет, не получается
← →
Digitman © (2005-12-23 09:45) [9]
> Inna © (23.12.05 09:37) [7]
ты понимаешь, что NT-based опер.системы не только многозадачные, но и многопользовательские ?
и что каждый процесс стартует от имени конкретного пользователя ?
и что система для каждого пользователя хранит отдельные настройки ?
← →
Inna © (2005-12-23 09:53) [10]И что делать?
← →
Digitman © (2005-12-23 09:54) [11]
> что делать?
для начала все-таки ответить на вопрос в [2]
← →
Inna © (2005-12-23 09:57) [12]Я понимаю, процесс стартует от имени конкретного пользователя
← →
ЮЮ © (2005-12-23 09:58) [13]DecimalSeparator используется для визуализации чисел, серверу оно надо?
← →
Digitman © (2005-12-23 10:00) [14]
> Inna © (23.12.05 09:57) [12]
> Я понимаю, процесс стартует от имени конкретного пользователя
понимаешь правильно.
но о КАКОМ процессе ты ведешь речь - о процессе сервера или о процессе клиента ? ДЛЛ твоя КАКИМ конкретно процессом используется ?
← →
Digitman © (2005-12-23 10:01) [15]
> DecimalSeparator используется для визуализации чисел
в том числе, но не только для этого
← →
КиТаЯц © (2005-12-23 10:07) [16]Сам на эти грабли наступал...
DecimalSeparator на машине клиента может быть любым. У InterBase всегда точка.
В общем случае использование DecimalSeparator - хороший тон, но...
Если передаеш серверу Float число сформированное с использованием системной переменной DecimalSeparator, а она НЕ точка, то...
> Digitman © (23.12.05 09:54) [11]
Именно!
← →
Inna © (2005-12-23 10:39) [17]
> Digitman © (23.12.05 10:00) [14]
> но о КАКОМ процессе ты ведешь речь - о процессе сервера
> или о процессе клиента ? ДЛЛ твоя КАКИМ конкретно процессом
> используется ?
Процесс клиента
← →
Reindeer Moss Eater © (2005-12-23 10:42) [18]если эту переменную использую в проекте, то все работает нормально.
Процесс клиента
Кто-то пытается нас запутать
← →
Digitman © (2005-12-23 10:45) [19]
> Inna © (23.12.05 10:39) [17]
> Процесс клиента
Так, уже ближе к телу.
И ты утверждаешь, что всякий раз при старте клиентского приложения , использующего эту ДЛЛ) от имени тек.юзера, в теле некоей ф-ции в составе этой ДЛЛ ты считываешь значение DecimalSeparator и оно отличается от текущего установленного сепаратора в рег.настройках ОС для тек.юзера ?
← →
Inna © (2005-12-23 11:04) [20]Все с самого начала:
В базе данных цена хранится как integer в копейках.
Создала хранимую процедуру, кторая преобразует это значение в рубли (результат string).
Храниму процедуру создавала, для того чтобы сразу в запросе можно было выводить цену в рублях.
Но точку или запятую надо ставить в зависимости от настроек системы (это используется и в приложении)
Как сделала я:
Создала Dlll, в которой используется DecimalSeparator :
в dll есть функция, которая возвращает строку (PChar) содержащую DecimalSeparator
есть UDF, которая ссылается на dll на эту фукцию
Udf используется в хранимой процедуре
Хранимая процедура всегда возвращает строку с запятой
Может быть есть какой нибудь другой способ?
← →
Reindeer Moss Eater © (2005-12-23 11:10) [21]Хранимая процедура всегда возвращает строку с запятой
Потому что в настройках учетной записи под которой работает сервер установлена запятая.
← →
Fay © (2005-12-23 11:11) [22]2 Inna © (23.12.05 11:04) [20]
> Создала хранимую процедуру, кторая преобразует это значение
> в рубли (результат string).
Как это "string"?
> которая возвращает строку (PChar) содержащую DecimalSeparator
На сервере?!
← →
Digitman © (2005-12-23 11:27) [23]
> Inna © (23.12.05 11:04) [20]
ну и к чему лепить горбатого, позволь поинтересоваться ?
мы ж здесь не китайская разведка, которую обязательно нужно запутать)
сначала ты в [17] заявляешь про процесс клиента, а теперь в [20] вдруг обнаруживается, что речь-то оказавается о процессе сервера идет !
> Храниму процедуру создавала, для того чтобы сразу в запросе
> можно было выводить цену в рублях
ну и нкой ляд тебе этот сепаратор понадобился ?
просто верни приложению-клиенту из ХП набор данных во float-формате, а в приложении-клиенте ф-ции FloatToStr или FormatFloat преобразуют полученное в строковое представление с учетом актуального для тек.клиентской сессии сепаратора
← →
Digitman © (2005-12-23 11:30) [24]либо передавай с клиента на сервер нужное значение сепаратора, с тем чтобы сервер формировал стр.представление с учетом именно его
← →
Inna © (2005-12-23 11:34) [25]
> Reindeer Moss Eater © (23.12.05 11:10) [21]
>
Что посоветуете делать?
← →
Fay © (2005-12-23 11:41) [26]2 Inna © (23.12.05 11:34) [25]
Послушай уже Digitman-а, честное слово. Ну нафиг тебе на клиенте настройки некой учётной записи сервера?!
← →
Inna © (2005-12-23 11:41) [27]Спасибо ВСЕМ за помощь.
> Digitman © (23.12.05 11:30) [24]
> либо передавай с клиента на сервер нужное значение сепаратора,
> с тем чтобы сервер формировал стр.представление с учетом
> именно его
Именно так и сделаю
← →
Digitman © (2005-12-23 11:52) [28]
> Inna © (23.12.05 11:41) [27]
не самое простое (и потенциально опасное) решение, смею заметить.
к серверу в общем случае коннектятся многие клиенты, каждый из которых вправе иметь собственные (нужные именно ему) установки сепаратора.
это означает, что для каждой активной кл.сессии сервер должен где-то "на своей территории" хранить предпочтения данного клиента.
полагаясь на thread per connect можно в UDF использовать threadvar , но это весьма рискованное решение, ибо оно версионно-зависимо
← →
ЮЮ © (2005-12-23 11:58) [29]>Создала хранимую процедуру, кторая преобразует это значение
в рубли
а не проще было разделить на 100 и успокоиться?
← →
Fay © (2005-12-23 11:59) [30]2 ЮЮ © (23.12.05 11:58) [29]
Тогда без процедур получится. Не круто 8)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.038 c