Форум: "Базы";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];
ВнизРазделители дроби в MSSQL на сервере и разделитель на клиенте Найти похожие ветки
← →
Layner © (2005-01-20 14:36) [0]Здравствуйте! Есть проблема, вернее хочу ее избежать, есть на клиенте Edit для ввода дробной цифры. Эту цифру надо записать в таблицу MSSQL, в поле Money.
Отловить разделитель дробной части на клиенте я могу. А вот как узнать разделитель дробной на MSSQL сервере? Затем чтобы подстроить запрос.
Заранее благодарю.
← →
Nikolay M. © (2005-01-20 14:42) [1]Извращенец. Чем тебе параметры не милы? Может, ты еще и настройки сервера будешь менять под свои запросы?
← →
sniknik © (2005-01-20 14:43) [2]всегда точка, запятой там быть не может т.к. это разделитель полей/прараметров в списках.
а чтобы гарантировать точную передачу (и ускорить т.к. не нужно преобразование) умные люди придумали параметры.
← →
Layner © (2005-01-20 14:51) [3]Согласен.
Если не сложно, напишите маленький пример?
← →
Layner © (2005-01-20 15:13) [4]Дошло.
← →
Layner © (2005-01-20 15:25) [5]Только я не понимаю, что делать в таком случае. Есть отдельная процедура.
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:27) [6]Конечно:
q1.SQL.Add(s);
← →
Nikolay M. © (2005-01-20 15:33) [7]
> в Edit юзер может вписать и точку, и запятую
Использовать MaskEdit или прочитать про DecimalSeparator?
← →
Layner © (2005-01-20 15:49) [8]Про MaskEdit я знаю, а на счет DecimalSeparator, выяснять какой разделитель стоит в системе у юзера, подгонять под это MaskEdit?
А на MSSQL всегда точка используется в качестве разделителя?
Я просто работал на Access до этого, там только с запятой прокатывало, на точку ругалось. Вот, хочу уточнить.
← →
sniknik © (2005-01-20 15:53) [9]
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 16:32) [10]
SELECT f1, f2, 1,2 AS Const FROM Table1
Выдал 4 поля, 2 последних - в 3м еденицы, в 4м два, если я правильно понял.
А если мне сделать так, при закрузке программы объявить DecimalSeparator:= ".";, и больше ни чего не менять?
← →
sniknik © (2005-01-20 17:16) [11]> Выдал 4 поля, 2 последних - в 3м еденицы, в 4м два, если я правильно понял.
ну правильно, а как тогда ты используя запятую в аксессе задавал дробное значение (1.2 в этом случае)?
> Я просто работал на Access до этого, там только с запятой прокатывало, на точку ругалось. Вот, хочу уточнить.
> А если мне сделать так, при закрузке программы объявить DecimalSeparator:= ".";, и больше ни чего не менять?
твоими же словами "а если юзер введет запятую"? ;о))
> Т.е. в Edit юзер может вписать и точку, и запятую
он ведь может, независимо от настройки оси.
← →
Layner © (2005-01-20 22:06) [12]
ну правильно, а как тогда ты используя запятую в аксессе задавал дробное значение (1.2 в этом случае)?
Сам удивляюсь :) Я все в апострофю заключал, думал так и надо :(
← →
sniknik © (2005-01-21 01:51) [13]> Я все в апострофю заключал, думал так и надо :(
а..., ну тогда это строки будут, у аксеса во многих случаях со строки идет автоприведение типа. (т.е. если инсерт например делать и в поле doubl строку присваивать то он ее попытается в double сконвертировать прежде чем ошибку выдавать)
MSSQL на такую "разумность" не претендует, ему надо явный CAST/CONVERT со строки делать (но в принципе это будет одно и тоже).
← →
Layner © (2005-01-21 09:54) [14]
sniknik © (21.01.05 01:51)
Николай, ты когда спать то успеваешь :)
Да, именно так я и писал в акцесс, думал с этим так же, хорошо что теперь разобрался. Спасибо.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.039 c