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

Вниз

Разделители дроби в 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.026 c
3-1106291585
Scorpio
2005-01-21 10:13
2005.02.20
несоответствие типов


9-1096023740
<<BEAST>>
2004-09-24 15:02
2005.02.20
DOOM3


4-1104954636
Arnold
2005-01-05 22:50
2005.02.20
Как узнать список файлов в выбранной директории?


1-1093323585
Vilux
2004-08-24 08:59
2005.02.20
TTree и цвет текста


1-1107781856
mariya_mezenceva
2005-02-07 16:10
2005.02.20
vk_insert