Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.52 MB
Время: 0.139 c
15-1136458296
Piter
2006-01-05 13:51
2006.01.29
Как же неудобно отлаживать многопоточное приложение в Дельфи :(


2-1137321045
Tonich
2006-01-15 13:30
2006.01.29
Число знаков


15-1136406579
ZeroDivide
2006-01-04 23:29
2006.01.29
Китайская компания хочет купить часть Delphi


2-1136744291
kami
2006-01-08 21:18
2006.01.29
Как связать TClient/ServerSocket через I-net


15-1136758877
Дорогие РОССИЯНЕ :)
2006-01-09 01:21
2006.01.29
перевод с/c





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский