|
|
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
Есть adp-проект (формат access 2000) + MS SQL SERVER 2000. Есть таблица с полями decimal. Ну так вот, под access 2000 если запустить представление перемножающее эти поля, то получится нормальное чило типа decimal. А под access xp - получаем текстовое поле. Пример: a2000 35,2*2=70,4 a2002 35,2*2=70,40000000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 12:19 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
Я отмодерировал сабджект. :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 12:52 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
2dinM Ты бы код представленяи что ли дал, а то в твоем топике только Саныч и будет отмечаться ... в качестве модератора :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 17:10 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
Почему так происходит, не знаю... А вот как боротся, то попробуй к этому выражению применить Format... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 17:12 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
Тогда уже не Format, а наоборот - Val... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 17:13 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
Пример? Да любой. SELECT Cena*(1-Skidka)*Kol AS Summa FROM Zayavka где поля Cena и Skidka - Decimal Ну так вот в access 2000 Summa выводится как числовое поле, а в acces XP - строковое, да еще после запятой добавляются нули. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 17:19 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
2 All Имхо, ни Format ни Val тут не причем 2 dinM a2000 35,2*2=70,4 a2002 35,2*2=70,40000000 Лично я не вижу, чтобы было текстовое поле. вижу только два числовых с разным количеством знаков после запятой И еще, представление (View) не запускается, его открывают для представления данных, а запускают хранимые процедуры (Stored Procedures) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 17:20 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
Да не важно, что открывать... В качестве источника данных для отчета я использую сохр. процедуру. Там где мне надо в качестве числового значения полю передается текстовое. Именно текстовое!!! Да если просто выполнить процедуру, сразу видно где числовое занчение, а где текст. Выравнивание по левому краю!!! Да и шесть нулей справа зачем мне нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 17:33 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
Да, вот яркий пример того, как нельзя задавать вопросы. Так у тебя представление или хранимая процедура? SELECT Cena*(1-Skidka)*Kol AS Summa FROM Zayavka где поля Cena и Skidka - Decimal А поле Kol какое? и потом, если тебе нужно в каком то конкретном формате, то так и напиши SELECT cast(Cena*(1-Skidka)*Kol as decimal) AS Summa FROM Zayavka ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 17:39 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
Поле kol конечно числовое (int). А зачем мне программе говорить, что поле перемножения числовых полей надо получить число, а не текст. К тому же в access 2000 все прекрасно работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 17:44 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
Внешний вид - это не формат поля, даже если выравнивание по левому краю - это ничего не означает. Тут важно не что дает Access 2000 или XP, а что дает сервер Сделай свое представление View Затем смотри системное представление INFORMATION_SCHEMA.COLUMNS какой тип поля указан для твоей расчетной колонки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 17:55 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
2 Incold Если выравнивание пол левому краю - значит аксес понял сам что это строка. И будет тебе из этой вьюхи строку и возвращать. Так что не нужно даже схему смотреть. Ее уже сам аксес посмотрел. Это, конечно, если руками формат такой не поставлен. Тогда автора надо долго пинать ногами. 2 dinM Попробуй явное приведение типа сделать для полученного столбца. В аксесе (mdb) иногда помогало, может и тут поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 18:03 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
CAST конечно поможет. Но это же не нормально когда access так работает. В конце концов, "среда разработки" должна помогать или усложнять жизнь разработчику. Если decimal*decimal access'у по-барабану, то зачем вообще заводить типы полей. Делай все текст, а затем как-нибудь разберемся, так что ли? К тому же если просмотреть представление с access 2000 или прямо на MSSQL 2000, то все ок! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 18:20 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
2 dinM \r \r Очень мне интересно, что вернет скрипт предложенный там: /topic/35514 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 18:22 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
Ну лично у меня такого не было ни в 2000, ни в ХР. Была такая ересь только для групповых операций. Поставил формат поля "С разделителями...." и все стало на свои места. Ну а т.к. это все-таки цена и значение там хранятся денежные, то рекомендую при перемножении еще и сделать округление до 2 знаков после запятой. Тогда точно таких прибамбасов не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 18:30 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
2 Лох Позорный >Если выравнивание пол левому краю - значит аксес понял сам что это строка. И будет тебе из этой вьюхи строку и возвращать. Так что не нужно даже схему смотреть. Ее уже сам аксес посмотрел. Ерунду говорите. Не досмотрел он просто в данном случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 18:30 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
Только что протестировал. Приношу извинения за наезды в сторону автора (хотя особенно не наезжал на все-таки ) 2002-й в моей версии 10.4302.2625 отображает умножение decimal полей именно так ка сказал автор. И после всего просмотренного я полностью согласен с TRoUbLEs Нужно использовать денежный тип (к тому же операции с ним быстрее). Умножение денег на деньги дает именно деньги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 18:41 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
Простой тест на тип полей. Возьми и перемножь получившееся поле само на себя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2003, 00:24 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
> Умножение денег на деньги дает именно деньги. Не понимаю, по какой логике и для каких нужд это сделано. Метры умножить на метры - это все-таки не метры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2003, 01:05 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
2 Владимир Саныч Метры умножить на метры - это все-таки не метры. А целое умноженное на целое - квадратное целое :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2003, 09:09 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
Опять пустые рассуждения:-( Метры, деньги, крылья, ноги... Где решение? Что только CAST(cena*(1-skidka)*kurs*kol AS Decimal(30,2)) выход? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2003, 10:31 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
Где решение? Нормальное решение, имхо, в отчете/форме ставить необходимый формат поля (я так делаю всегда, вне зависимости от версий). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2003, 10:49 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
Если для поля в отчете источником является тестовое поле, то применить формат, к примеру, с разделителями разрядов нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2003, 12:27 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
Проблема интересная, но я с ней ни разу не сталкивался, т.к. всегда использую денежный тип данных. т.е. я вижу два варианта: 1. Использовать cast 2. в таблицах использовать вместо decimal -> money (у меня формулы типа money (*/+-) (money or int) на любых версиях дает нормальный результат) P.S. Поищи на сайте Microsoft (или в MSDN) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2003, 12:49 |
|
||
|
Ерунда какая-то:-( (почему умножение в XP дает строку)
|
|||
|---|---|---|---|
|
#18+
2 dinM & all >Если для поля в отчете источником является тестовое поле, то применить формат, к примеру, с разделителями разрядов нельзя. "Если пользователь видит сообщение на английском языке, он его не понимает. Если на русском не читает." (С) не помню кто. Совсем вы тут потерялись, похоже. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Поле res в AccessXP будет выровнено по левому краю. Из этого вовсе не следует, что оно текстовое. Во view выравнивание будет аналогичным. Лечится установкой соответствующего формата для поля в таблице или view. Или cast/convert, что предпочтительнее, потому что явное преобразование типов - признак хорошего тона в программировании (перемножение decimal(30,10) на decimal(30,10) даст вовсе не decimal(30,10). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2003, 14:46 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32298997&tid=1675171]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
155ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 508ms |

| 0 / 0 |
