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

Вниз

Переменная 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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.065 c
2-1137167570
Tristania
2006-01-13 18:52
2006.01.29
Динамическая таблица строк


1-1135319886
jiny
2005-12-23 09:38
2006.01.29
Как узнать наличие переменной на другом фрейме не зная названия


15-1136988285
Jaxtor
2006-01-11 17:04
2006.01.29
Просмотр содержимого CD диска


15-1136983343
Yegorchic
2006-01-11 15:42
2006.01.29
Сортировка


2-1136972101
Andrey.Ru
2006-01-11 12:35
2006.01.29
Компонент