Главная страница
    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.039 c
1-1107531869
ShimON
2005-02-04 18:44
2005.02.20
Отследить нажатие на крестик


14-1107001774
Vaitek
2005-01-29 15:29
2005.02.20
Сайтокачалка


14-1107333696
vecna
2005-02-02 11:41
2005.02.20
Настройка Delphi


14-1106724470
NewDelpher
2005-01-26 10:27
2005.02.20
Отношение к русским за границей


1-1107418107
Arbiter
2005-02-03 11:08
2005.02.20
TComponent, а как "детей" определить?





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