powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ерунда какая-то:-( (почему умножение в XP дает строку)
25 сообщений из 28, страница 1 из 2
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32298196
dinM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть 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
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32298266
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Я отмодерировал сабджект. :^)
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32298813
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2dinM

Ты бы код представленяи что ли дал, а то в твоем топике только Саныч и будет отмечаться ... в качестве модератора :)
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32298817
Фотография Daf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему так происходит, не знаю... А вот как боротся, то попробуй к этому выражению применить Format...
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32298820
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Тогда уже не Format, а наоборот - Val...
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32298838
dinM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример? Да любой.
SELECT Cena*(1-Skidka)*Kol AS Summa FROM Zayavka
где поля Cena и Skidka - Decimal

Ну так вот в access 2000 Summa выводится как числовое поле, а в acces XP - строковое, да еще после запятой добавляются нули.
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32298841
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 All
Имхо, ни Format ни Val тут не причем

2 dinM
a2000
35,2*2=70,4
a2002
35,2*2=70,40000000


Лично я не вижу, чтобы было текстовое поле.
вижу только два числовых с разным количеством знаков после запятой

И еще, представление (View) не запускается, его открывают для представления данных, а запускают хранимые процедуры (Stored Procedures)
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32298872
dinM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да не важно, что открывать...

В качестве источника данных для отчета я использую сохр. процедуру. Там где мне надо в качестве числового значения полю передается текстовое. Именно текстовое!!!

Да если просто выполнить процедуру, сразу видно где числовое занчение, а где текст. Выравнивание по левому краю!!! Да и шесть нулей справа зачем мне нужны.
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32298883
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, вот яркий пример того, как нельзя задавать вопросы.
Так у тебя представление или хранимая процедура?

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
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32298895
dinM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поле kol конечно числовое (int).

А зачем мне программе говорить, что поле перемножения числовых полей надо получить число, а не текст.

К тому же в access 2000 все прекрасно работает.
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32298920
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Внешний вид - это не формат поля, даже если выравнивание по левому краю - это ничего не означает.
Тут важно не что дает Access 2000 или XP, а что дает сервер

Сделай свое представление View
Затем смотри системное представление INFORMATION_SCHEMA.COLUMNS
какой тип поля указан для твоей расчетной колонки.
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32298935
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Incold
Если выравнивание пол левому краю - значит аксес понял сам что это строка. И будет тебе из этой вьюхи строку и возвращать. Так что не нужно даже схему смотреть. Ее уже сам аксес посмотрел.
Это, конечно, если руками формат такой не поставлен. Тогда автора надо долго пинать ногами.

2 dinM
Попробуй явное приведение типа сделать для полученного столбца. В аксесе (mdb) иногда помогало, может и тут поможет.
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32298969
dinM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CAST конечно поможет.

Но это же не нормально когда access так работает.
В конце концов, "среда разработки" должна помогать или усложнять жизнь разработчику. Если decimal*decimal access'у по-барабану, то зачем вообще заводить типы полей. Делай все текст, а затем как-нибудь разберемся, так что ли?

К тому же если просмотреть представление с access 2000 или прямо на MSSQL 2000, то все ок!
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32298973
Некто
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 dinM \r
\r
Очень мне интересно, что вернет скрипт предложенный там: /topic/35514
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32298980
TRoUbLEs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну лично у меня такого не было ни в 2000, ни в ХР. Была такая ересь только для групповых операций. Поставил формат поля "С разделителями...." и все стало на свои места.
Ну а т.к. это все-таки цена и значение там хранятся денежные, то рекомендую при перемножении еще и сделать округление до 2 знаков после запятой. Тогда точно таких прибамбасов не будет.
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32298981
Некто
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Лох Позорный

>Если выравнивание пол левому краю - значит аксес понял сам что это строка. И будет тебе из этой вьюхи строку и возвращать. Так что не нужно даже схему смотреть. Ее уже сам аксес посмотрел.

Ерунду говорите. Не досмотрел он просто в данном случае.
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32298997
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только что протестировал.
Приношу извинения за наезды в сторону автора (хотя особенно не наезжал на все-таки )
2002-й в моей версии 10.4302.2625
отображает умножение decimal полей именно так ка сказал автор.

И после всего просмотренного я полностью согласен с TRoUbLEs
Нужно использовать денежный тип (к тому же операции с ним быстрее).
Умножение денег на деньги дает именно деньги.
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32299186
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простой тест на тип полей. Возьми и перемножь получившееся поле само на себя.
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32299199
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Умножение денег на деньги дает именно деньги.

Не понимаю, по какой логике и для каких нужд это сделано. Метры умножить на метры - это все-таки не метры.
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32299300
x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
x
Гость
2 Владимир Саныч

Метры умножить на метры - это все-таки не метры.


А целое умноженное на целое - квадратное целое :)
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32299384
dinM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опять пустые рассуждения:-(

Метры, деньги, крылья, ноги...

Где решение? Что только CAST(cena*(1-skidka)*kurs*kol AS Decimal(30,2)) выход?
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32299403
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где решение?

Нормальное решение, имхо, в отчете/форме ставить необходимый формат поля (я так делаю всегда, вне зависимости от версий).
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32299618
dinM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если для поля в отчете источником является тестовое поле, то применить формат, к примеру, с разделителями разрядов нельзя.
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32299669
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема интересная, но я с ней ни разу не сталкивался, т.к. всегда использую денежный тип данных.
т.е. я вижу два варианта:
1. Использовать cast
2. в таблицах использовать вместо decimal -> money
(у меня формулы типа money (*/+-) (money or int) на любых версиях дает нормальный результат)

P.S. Поищи на сайте Microsoft (или в MSDN)
...
Рейтинг: 0 / 0
Ерунда какая-то:-( (почему умножение в XP дает строку)
    #32299955
Некто
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 dinM & all
>Если для поля в отчете источником является тестовое поле, то применить формат, к примеру, с разделителями разрядов нельзя.

"Если пользователь видит сообщение на английском языке, он его не понимает. Если на русском не читает." (С) не помню кто.

Совсем вы тут потерялись, похоже.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
if object_id ( 'table1' ) is null 
create table table1 (
id smallint identity ( 1 ,  1 ) not null primary key,
field_1 decimal( 30 ,  10 ) null ,
field_2 decimal( 30 ,  10 ) null ,
res as (field_1 * field_2) ,
type as sql_variant_property(field_1 * field_2,'basetype' ) )
GO
insert into table1
select  2500 . 00  ,  3200 . 5 
go

select * from table1


Поле res в AccessXP будет выровнено по левому краю. Из этого вовсе не следует, что оно текстовое. Во view выравнивание будет аналогичным. Лечится установкой соответствующего формата для поля в таблице или view. Или cast/convert, что предпочтительнее, потому что явное преобразование типов - признак хорошего тона в программировании (перемножение decimal(30,10) на decimal(30,10) даст вовсе не decimal(30,10).
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ерунда какая-то:-( (почему умножение в XP дает строку)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]