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

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

Разделители дроби в MSSQL на сервере и разделитель на клиенте


Layner ©   (2005-01-20 14:36:00) 

Здравствуйте! Есть проблема, вернее хочу ее избежать, есть на клиенте Edit для ввода дробной цифры. Эту цифру надо записать в таблицу MSSQL, в поле Money.
Отловить разделитель дробной части на клиенте я могу. А вот как узнать разделитель дробной на MSSQL сервере? Затем чтобы подстроить запрос.
Заранее благодарю.


Layner   (2005-01-21 09:54:00) [1]

sniknik ©   (21.01.05 01:51)
Николай, ты когда спать то успеваешь :)
Да, именно так я и писал в акцесс, думал с этим так же, хорошо что теперь разобрался. Спасибо.


sniknik   (2005-01-21 01:51:00) [2]

> Я все в апострофю заключал, думал так и надо :(
а..., ну тогда это строки будут, у аксеса во многих случаях со строки идет автоприведение типа. (т.е. если инсерт например делать и в поле doubl строку присваивать то он ее попытается в double сконвертировать прежде чем ошибку выдавать)
MSSQL на такую "разумность" не претендует, ему надо явный CAST/CONVERT со строки делать (но в принципе это будет одно и тоже).


Layner   (2005-01-20 22:06:00) [3]

ну правильно, а как тогда ты используя запятую в аксессе задавал дробное значение (1.2 в этом случае)?
Сам удивляюсь :) Я все в апострофю заключал, думал так и надо :(


sniknik   (2005-01-20 17:16:00) [4]

> Выдал 4 поля, 2 последних - в 3м еденицы, в 4м два, если я правильно понял.
ну правильно, а как тогда ты используя запятую в аксессе задавал дробное значение (1.2 в этом случае)?
> Я просто работал на Access до этого, там только с запятой прокатывало, на точку ругалось. Вот, хочу уточнить.

> А если мне сделать так, при закрузке программы объявить DecimalSeparator:= '.';, и больше ни чего не менять?
твоими же словами "а если юзер введет запятую"? ;о))
> Т.е. в Edit юзер может вписать и точку, и запятую
он ведь может, независимо от настройки оси.


Layner   (2005-01-20 16:32:00) [5]

SELECT f1, f2, 1,2 AS Const FROM Table1
Выдал 4 поля, 2 последних - в 3м еденицы, в 4м два, если я правильно понял.
А если мне сделать так, при закрузке программы объявить DecimalSeparator:= '.';, и больше ни чего не менять?


sniknik   (2005-01-20 15:53:00) [6]


 s:='INSERT table1 (p1, p2,p3,p4,p5,p6,p7) VALUES ('''+p1+''','''+p2+''','''+p3+''','''+p4+''','''+p5+''','''+p6+''',:p7); ';

 if pos(',', p7) > 0 then DecimalSeparator:= ','
                     else DecimalSeparator:= '.';
 try
   q1.ParamByName('p7').AsFloat:= StrToFloat(p7);
 except
   on E: Exeption do ... //DecimalSeparator в системе (виндах) = # ;о))
 end


> Я просто работал на Access до этого, там только с запятой прокатывало, на точку ругалось. Вот, хочу уточнить.
и как это оно у тебя прокатывало?
SELECT f1, f2, 1,2 AS Const FROM Table1
сколько полей константных? и чему равно? не важно access/mssql.


Layner   (2005-01-20 15:49:00) [7]

Про MaskEdit я знаю, а на счет DecimalSeparator, выяснять какой разделитель стоит в системе у юзера, подгонять под это MaskEdit?

А на MSSQL всегда точка используется в качестве разделителя?

Я просто работал на Access до этого, там только с запятой прокатывало, на точку ругалось. Вот, хочу уточнить.


Nikolay M.   (2005-01-20 15:33:00) [8]


> в Edit юзер может вписать и точку, и запятую

Использовать MaskEdit или прочитать про DecimalSeparator?


Layner   (2005-01-20 15:27:00) [9]

Конечно: q1.SQL.Add(s);


Layner   (2005-01-20 15:25:00) [10]

Только я не понимаю, что делать в таком случае. Есть отдельная процедура.

procedure  pr_primer(p1: string; p2: string; p3: string; p4: string; p5: string; p6: string; p7: dounle;);
var
s: string;
begin
 s:='';
 s:='INSERT table1 (p1, p2,p3,p4,p5,p6,p7) VALUES ('''+p1+''','''+p2+''','''+p3+''','''+p4+''','''+p5+''','''+p6+''','+p7+') ';
 q1.SQL.Add(zapros);
 q1.Prepared;
 q1.ExecSQL;
end;

Тут написал все поля string, но вообще тут помимо есть и decimal, money.

вызов процедуры:
pr_primer('text1', 'text2', 'text3', 'text4', 'text5', 'text6', Edit1.Text);

Как загнать значение в p7, без всяких проблем с разделителями? Т.е. в Edit юзер может вписать и точку, и запятую, т.к. настройка ОС у всех разная. Как тут можно применить TParam?


Layner   (2005-01-20 15:13:00) [11]

Дошло.


Layner   (2005-01-20 14:51:00) [12]

Согласен.
Если не сложно, напишите маленький пример?


sniknik   (2005-01-20 14:43:00) [13]

всегда точка, запятой там быть не может т.к. это разделитель полей/прараметров в списках.

а чтобы гарантировать точную передачу (и ускорить т.к. не нужно преобразование) умные люди придумали параметры.


Nikolay M.   (2005-01-20 14:42:00) [14]

Извращенец. Чем тебе параметры не милы? Может, ты еще и настройки сервера будешь менять под свои запросы?


Наверх

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