Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.038 c
1-1107780689
hgd
2005-02-07 15:51
2005.02.20
Скажите а есть аналоги функци BitBlt


14-1106881694
Думкин
2005-01-28 06:08
2005.02.20
С Днем Рождения! 28 января


3-1105785467
SnapIn
2005-01-15 13:37
2005.02.20
Вопрос по FastReport ам


6-1102619223
Алена М.
2004-12-09 22:07
2005.02.20
Сетевой пароль


1-1107275184
creage
2005-02-01 19:26
2005.02.20
Как обвести выделенный объект в TListView?





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