![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Разделители дроби в 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]Извращенец. Чем тебе параметры не милы? Может, ты еще и настройки сервера будешь менять под свои запросы?