Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 в чем разница в MS SQL 2005 между float и money?  [new]
BERSERC
Member

Откуда:
Сообщений: 442
Из delphi2009 , через ado заполняю табличку,
table1.edit;
table1.fieldbyname('price').value := 5.41;
table1.post;

если в БД(SQL SERVER 2005) столбец "PRICE" имеет тип money то в него записвается 541,00
а если "FLOAT", то все парвильно 5,41

Хотя раньше вроде работало(на 7 дельфи и 2000 server).
В чем может быть дело?
15 апр 09, 12:29    [7066348]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Профилером посмотрите, что отсылается серверу в обоих случаях.
15 апр 09, 12:31    [7066362]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
Glory
Member

Откуда:
Сообщений: 104760
BERSERC

В чем может быть дело?

Дело в том, что вы не знаете, какую команду и с какими значениями передаете серверу
15 апр 09, 12:32    [7066374]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
BERSERC
Member

Откуда:
Сообщений: 442
sql server express профайлра нет, Glory , что вы имеете ввиду?
15 апр 09, 12:33    [7066383]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
BERSERC
sql server express профайлра нет...
Поищите по форуму - тут по сто раз на дню дают ссылку на бесплатную реализацию аля-профилер для экспресса.
15 апр 09, 12:34    [7066403]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
Glory
Member

Откуда:
Сообщений: 104760
BERSERC
sql server express профайлра нет, Glory , что вы имеете ввиду?

То, что ваш вопрос сродни в чем разница между красным и соленым.
15 апр 09, 12:35    [7066409]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
BERSERC
Member

Откуда:
Сообщений: 442
Glory
BERSERC
sql server express профайлра нет, Glory , что вы имеете ввиду?

То, что ваш вопрос сродни в чем разница между красным и соленым.


помоему не такая уж между ними и большая разница, оба по 8 байт.
15 апр 09, 12:37    [7066435]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
BERSERC
Glory
BERSERC
sql server express профайлра нет, Glory , что вы имеете ввиду?

То, что ваш вопрос сродни в чем разница между красным и соленым.


помоему не такая уж между ними и большая разница, оба по 8 байт.
Ога, один - приблизительный тип, другой - точный. А так никакой разницы!

Сообщение было отредактировано: 15 апр 09, 12:45
15 апр 09, 12:39    [7066462]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
BERSERC
помоему не такая уж между ними и большая разница, оба по 8 байт.


А что, вот так не катит?
table1.edit;
table1.fieldbyname('price').AsCurrency := 5.41;
table1.post;
15 апр 09, 12:39    [7066463]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
BERSERC
Member

Откуда:
Сообщений: 442
iap
BERSERC
помоему не такая уж между ними и большая разница, оба по 8 байт.


А что, вот так не катит?
table1.edit;
table1.fieldbyname('price').AsCurrency := 5.41;
table1.post;



Попробовал, тож самое 541,00
15 апр 09, 12:41    [7066485]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
Glory
Member

Откуда:
Сообщений: 104760
BERSERC
iap
BERSERC
помоему не такая уж между ними и большая разница, оба по 8 байт.


А что, вот так не катит?
table1.edit;
table1.fieldbyname('price').AsCurrency := 5.41;
table1.post;



Попробовал, тож самое 541,00

Вопросы по Дельфи обсуждают в своем форуме. До тех пор пока вам не станет известна команда TSQL
15 апр 09, 12:48    [7066559]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
BERSERC
Member

Откуда:
Сообщений: 442
При неверном случае:
exec sp_executesql N'SET NOCOUNT OFF; INSERT INTO "phone_detals".."T_DETALIZATION" ("SAVE_ID","SELF_PHONE","PHONE","DATE_AND_TIME","WORC_COUNT","ZONA","NAPRAVLENIE","PRICE","TYPE") VALUES (@P1,@P2,@P3,@P4,@P5,@P6,@P7,@P8,@P9); SELECT SCOPE_IDENTITY() AS SCOPE_ID_COLUMN', N'@P1 int,@P2 varchar(10),@P3 varchar(10),@P4 datetime,@P5 float,@P6 varchar(1),@P7 varchar(1),@P8 money,@P9 varchar(16)', 2, '5551234001', '5551056395', 'Jan 1 2010 9:14AM', 4.500000000000000e-001, '', '', $9382891.0000, 'Исходящий Телеф.'

$9382891.0000 - в денежном формате 93,82891

и SQL сервером трактуется неверно =(
15 апр 09, 12:51    [7066582]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
BERSERC,

как я понимаю, претензии к MS SQL Server снимаются?
15 апр 09, 12:53    [7066600]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
Glory
Member

Откуда:
Сообщений: 104760
BERSERC
При неверном случае:
exec sp_executesql N'SET NOCOUNT OFF; INSERT INTO "phone_detals".."T_DETALIZATION" ("SAVE_ID","SELF_PHONE","PHONE","DATE_AND_TIME","WORC_COUNT","ZONA","NAPRAVLENIE","PRICE","TYPE") VALUES (@P1,@P2,@P3,@P4,@P5,@P6,@P7,@P8,@P9); SELECT SCOPE_IDENTITY() AS SCOPE_ID_COLUMN', N'@P1 int,@P2 varchar(10),@P3 varchar(10),@P4 datetime,@P5 float,@P6 varchar(1),@P7 varchar(1),@P8 money,@P9 varchar(16)', 2, '5551234001', '5551056395', 'Jan 1 2010 9:14AM', 4.500000000000000e-001, '', '', $9382891.0000, 'Исходящий Телеф.'

$9382891.0000 - в денежном формате 93,82891

и SQL сервером трактуется неверно =(

Т.е. по-вашему выходит, что сервер подменяет ваши правильные значения на свои неправильные ?
15 апр 09, 12:53    [7066604]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
BERSERC
Member

Откуда:
Сообщений: 442
нет, я как понимаю либо SQL 2005 не понимает формата, начинающегося с $, либо такого формата передачи вообще нет и это глюка delphi 2009.
А вы как считаете?
15 апр 09, 12:56    [7066620]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
MsDatabaseru
Member

Откуда: Hobby.MsDatabase.ru
Сообщений: 10937
BERSERC

$9382891.0000 - в денежном формате 93,82891


кто вам такое сказал?
15 апр 09, 12:56    [7066624]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
BERSERC
нет, я как понимаю либо SQL 2005 не понимает формата, начинающегося с $, либо такого формата передачи вообще нет и это глюка delphi 2009.
А вы как считаете?
Все типы данных, которыми оперирует сиквел - документированы!
15 апр 09, 12:57    [7066634]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
BERSERC
Member

Откуда:
Сообщений: 442
MsDatabaseru
BERSERC

$9382891.0000 - в денежном формате 93,82891


кто вам такое сказал?


Ясно, значит баг в ADO delphi 2009.

Всем спаибо!
15 апр 09, 12:57    [7066638]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
Glory
Member

Откуда:
Сообщений: 104760
BERSERC
нет, я как понимаю либо SQL 2005 не понимает формата, начинающегося с $, либо такого формата передачи вообще нет и это глюка delphi 2009.
А вы как считаете?

$9382891.0000 - это 9382891.0000 в формате money. Всегда
declare @x money
set @x = $9382891.0000
select @x
А насчет "не понимает формата, начинающегося с $" читайте BOL - Using Monetary Data
15 апр 09, 12:59    [7066662]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
BERSERC
MsDatabaseru
BERSERC

$9382891.0000 - в денежном формате 93,82891


кто вам такое сказал?


Ясно, значит баг в ADO delphi 2009.

Всем спаибо!
А насчёт Delphi - я бы проверил тип поля price
15 апр 09, 13:02    [7066697]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
Michael Puchkov
Member

Откуда: Москва
Сообщений: 30
Хочу внести свою лепту. Будьте аккуратны при работе с разными локалями. Если у Вас десятичный разделитель - точка, а запятая - отсечка тысячных разрядов (а такое бывает), то получается именно
BERSERC

$9382891.0000 - в денежном формате 93,82891

Кстати, сервер Вам именно точку ставит... А вы ему - запятую. Мне кажется, собака именно тут порылась.
25 май 09, 19:42    [7225247]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
Musor
Guest
BERSERC
Из delphi2009 , через ado заполняю табличку,
table1.edit;
table1.fieldbyname('price').value := 5.41;
table1.post;

если в БД(SQL SERVER 2005) столбец "PRICE" имеет тип money то в него записвается 541,00
а если "FLOAT", то все парвильно 5,41

Хотя раньше вроде работало(на 7 дельфи и 2000 server).
В чем может быть дело?


Расскажу как я решал проблему поля Money.
Delphi 2010 звените меня устраивает.
База данных на рабочем компе MS SQL 2008.
База данных на компе где крутиться база MS SQL 2000 MSDE :-)
это требование заказчика База его я только писал и то дополнительный софт..

На рабочем компе в Delphi собираю запросик записать в базу денюжку и раз... тоже как и Вас проблемма вместо 2.45 в базу ложиться 245,00 меня это явно не устраивает

Сам запрос:
SQLQuery.SQL.Add
            ('insert into [ServicesBase] (name,price) values ('''+Form2.EditPriceName.Text
            +''', '''+Form2.EditPriceMoney.Text+''') ;');
Ну думаю попал с этим Money(раньше не работал ни разу с денежными полями не случалось :-) ).
Сделал вроде все верно. Начал копать, запустил "Среда SQL Server Management Studio" стал экспериментировать с запросами, оказалось все из за символа "," его надо на символ "." поменять, не проблемам добавил в программу функцию чтоб отовсюду вызвать:
//для использования AnsiReplaceText требуется включить в [b]uses[/b] StrUtils 
function TForm1.MoneyString(Money: string):string;
begin
     Result := AnsiReplaceText(money, ',', '.');
end;
код программы стал немного другим добавил перевод 5,41 -> 5.41 своей функцией MoneyString:
          SQLQuery.SQL.Add
            ('insert into [ServicesBase] (name,price) values ('''+Form2.EditPriceName.Text
            +''', '''+MoneyString(Form2.EditPriceMoney.Text)+''') ;');
На рабочем компе(MSSQL2008) ура все стало записываться.
Отдаю заказчику, он в ахyе говорит "ошибка конверсии"...
Тут я начал думать у меня пишется у него нет, значит моя 2008 SQL мутит, что то, чего не может 2000 SQL.
Начал вспоминать как я передаю параметр в базу и как раз вот тут то и ошибка.
Я передаю в базу значение в запросе в кавычках '5.41' и 2008 кушает нормально выполняя конверсию на ура в вот 2000 ругается и не может String -> Money перевести, просто надо передать в виде без кавычек. 5.41

Получае такой код:
SQLQuery.SQL.Add
            ('insert into [ServicesBase] (name,price) values ('''+Form2.EditPriceName.Text
            +''', '+MoneyString(Form2.EditPriceMoney.Text)+') ;');
Он прекрасно работает на 2008 SQL и на 2000 SQL.
Фуф вот так вот. если вы работаете с запросами.

А если с таким видом как у вас
table1.edit;
table1.fieldbyname('price').value := 5.41;
table1.post;
Попробуйте упростить задачу поставив вместо value -> AsCurrency
table1.edit;
table1.fieldbyname('price').AsCurrency := 5.41;
table1.post;

P.S. Жаль, что "гуру", что отвечали человеку на его четко определенный вопрос, так и не дали никто нормального ответа, а только гнали на человека пришедшего на этот сайт за ответами.
Надеюсь мой ответ поможет хоть кому то. Я с этим мучился аж 2 часа это много, для простого вопроса как записать денежку в базу. Если что вопросы в почту а то на форум редко выползаю :-) bear"точка"grizzly"собака"gmail"точка"com
1 окт 09, 14:07    [7729756]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
Влом регистрироваться
Guest
Musor,

RTFM SQL Injection!
1 окт 09, 14:25    [7729891]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница в MS SQL 2005 между float и money?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Musor


P.S. Жаль, что "гуру", что отвечали человеку на его четко определенный вопрос, так и не дали никто нормального ответа, а только гнали на человека пришедшего на этот сайт за ответами.
Надеюсь мой ответ поможет хоть кому то. Я с этим мучился аж 2 часа это много, для простого вопроса как записать денежку в базу. Если что вопросы в почту а то на форум редко выползаю :-) bear"точка"grizzly"собака"gmail"точка"com

Уважемый Musor
То, что вы написали, не имеет отношения к MSSQL. А только к Delphi. А для Delphi есть свой форум, на который вам и ТС и следовало бы обращаться
1 окт 09, 14:27    [7729904]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить