AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.05.2004, 18:17   #1  
simply is offline
simply
Участник
 
84 / 10 (1) +
Регистрация: 24.05.2004
Адрес: москва
проблема с работой оператора switch
помогите разобраться....

значит так

ss - перечисляемый тип
в таблице table поле StrType создано на основании этого типа.

и вот такой код:

Method(str lineName)

while select table where table.StrType == ss::enmValue
{
switch (lineName)
{
case 'M01' :
...
break;
case 'M02' :
...
break;
}
}

при компиляции на втором case генерится совершенно непонятное сообщение:
"Типы операнда не совместимы с оператором"
причем замечено, что это напрямую связано с нахождением в условии выборки ss::enmValue... без этого свич работает нормально...
я правда заменил свич набором операторов if... и как бы зработало, но все таки интересно... это глюк... или я где-то туплю...
Старый 25.05.2004, 15:44   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,686 / 1190 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
При использовании перечисляемых типов данных в некоторых случаях происходит их автоматическая конвертация.

Т.е. хотя Enum - это целое число в диапазоне от 0 до 255, но в некоторых случаях вместо числового значения подставляется их символьное значение. Как будто происходит неявное выполнение конвертации enum2str()

Чтобы избежать этого недоразумения, надо использовать не напрямую переменную типа Enum, а выражение с этой переменной:

PHP код:
while select table where table.StrType == ss::enmValue 0
{

Вот этот-то "+0" и укажет однозначно, что надо использовать число, а не символьную строку.
Старый 25.05.2004, 16:30   #3  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Мне кажется, что проблема самая обычная "str lineName" - использование строки без ограничения по длине приводит к разным станностям.
Старый 25.05.2004, 16:48   #4  
simply is offline
simply
Участник
 
84 / 10 (1) +
Регистрация: 24.05.2004
Адрес: москва
сори... я не правильно определил источник ошибки... дело оказалось не в нумераторе, а в заключенном в секциии case команде update_recordset...
структура вот такая:

PA_PlanBody rsUpdate;
str lineName;

switch (lineName)
{
case 'M01':
ttsbegin;
update_recordset rsUpdate setting Month01 = plan.Month01, State01 = plan.State01
where rsUpdate.PlanID == planId;

ttscommit;
break;

case 'M02':
ttsbegin;
update_recordset rsUpdate setting Month02 = plan.Month01, State01 = plan.State01
where rsUpdate.PlanID == planId;

ttscommit;
break;

}
так вот ... при компиляции, компилятор ругается на сторку "case 'M02':" - "Типы оператора не совместимы с оператором"

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

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема с единицей измерения longson DAX: Программирование 4 16.07.2007 14:35
Проблема с кодировкой Trinux DAX: Программирование 5 20.04.2007 10:43
Проблема с созданием объекта Lelya DAX: Администрирование 33 27.06.2005 16:38
Можно ли исп. switch задать диапазон для case ??? djoker DAX: База знаний и проекты 23 27.12.2004 15:28
Проблема: русские шрифты в отчетах, формируемых на сервере. Anais DAX: Администрирование 3 17.11.2003 13:20
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:00.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.