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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.07.2008, 14:40   #1  
yuriuss is offline
yuriuss
Участник
 
5 / 10 (1) +
Регистрация: 15.03.2007
Адрес: spb
? Как добавить значение в таблицу не по имени поля, а нпример по индексу поля?
Нарпимер есть следущее:

X++:
Dimensions dimensions;
;
 
// обычный способ с явным указанием поля
// dimensions.Num = "text1";
 
// а хотелось бы так:
// dimensions.indexOfField(1) = "some text";
dimensions.insert();
такое возможно?
Старый 04.07.2008, 14:49   #2  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
X++:
dimensions.(FieldNum(Dimensions, Num)) = "some text";
Старый 04.07.2008, 14:57   #3  
yuriuss is offline
yuriuss
Участник
 
5 / 10 (1) +
Регистрация: 15.03.2007
Адрес: spb
Спасибо. Но дело как раз в том что я не хочу явно указывать имя поля Num, моя переменная называется Column и принимает значения от 0 до кол-ва столбцов. Если я пишу
dimensions.(FieldNum(Dimensions, Column)) = "some text"; то возникает ошибка "Таблица не содержит это поле"
Старый 04.07.2008, 15:04   #4  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
По номеру поля в порядке его расположения в таблице Вы не обратитесь к нему. Обращаться можно по идентификатору. Предлагаю Вам переменную Column заполнять значением fieldNum.
Старый 04.07.2008, 15:09   #5  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Через dictTable, наверно, можно вытащить fieldId по порядковому номеру.
Но идея какая-то странноватая... может расскажите, зачем оно вам понадобилось?
Старый 04.07.2008, 15:29   #6  
Eohaid Bress mac Elatha is offline
Eohaid Bress mac Elatha
Участник
 
2 / 14 (1) ++
Регистрация: 18.10.2007
Адрес: г. Железнодорожный, М.О.
Цитата:
Сообщение от yuriuss Посмотреть сообщение
Спасибо. Но дело как раз в том что я не хочу явно указывать имя поля Num, моя переменная называется Column и принимает значения от 0 до кол-ва столбцов. Если я пишу
dimensions.(FieldNum(Dimensions, Column)) = "some text"; то возникает ошибка "Таблица не содержит это поле"
А что мешает сделать?
X++:
dimensions.([COLOR=blue]FieldNum[/COLOR](Dimensions, "field_" + int2str(Column))) = [COLOR=red]"some text"[/COLOR]
Старый 04.07.2008, 15:30   #7  
yuriuss is offline
yuriuss
Участник
 
5 / 10 (1) +
Регистрация: 15.03.2007
Адрес: spb
В цикле перебирать поля и заполнять их нужными значениями.
Старый 04.07.2008, 15:41   #8  
Alexei S is offline
Alexei S
Участник
 
21 / 14 (1) ++
Регистрация: 15.12.2006
Адрес: Новосибирск
Попробуйте через DictTable.fieldCnt2Id(int _cnt) получить id поля.
Старый 04.07.2008, 15:42   #9  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от Eohaid Bress mac Elatha Посмотреть сообщение
А что мешает сделать?
X++:
dimensions.([color=blue]FieldNum[/color](Dimensions, "field_" + int2str(Column))) = [color=red]"some text"[/color]
Что-то я не понял что Вы имеете ввиду. Поподробней, пожалуйста.
Старый 04.07.2008, 15:50   #10  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
yuriuss, я думаю вы неправильно ставите задачу. Еще раз, зачем вам это надо? Какую задачу вы решаете? В аксапте нет такого понятия, как "порядковый номер поля". Для этих целей есть fieldId. Перебирать поля можно по ним.

Цитата:
Сообщение от Eohaid Bress mac Elatha Посмотреть сообщение
X++:
dimensions.(FieldNum(Dimensions, "field_" + int2str(Column)))
У филдНама второй аргумент - не стринг.
__________________
С уважением,
Олег.
Старый 04.07.2008, 23:53   #12  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
А я бы не спешил давать такой совет, так как он может оказаться вредным. Я бы сначала попробовал понять, какую задачу решаем-то?
__________________
С уважением,
Олег.
Старый 07.07.2008, 15:42   #13  
yuriuss is offline
yuriuss
Участник
 
5 / 10 (1) +
Регистрация: 15.03.2007
Адрес: spb
Задача такая. Делаем импорт таблицы из одной базы в другую через ADO. Сразу скажу что надо сделать таким способом, без использования репликаций и стандартного импорт/экспорта. В принимающей базе создаётся конекшн, далее формируется Recordset в цикле обрабатываются строки где я знаю какие есть имена исходной таблицы. Чтобы не писать эквивалент полей в принимающей таблицы и исходной можно создать цикл где будут заполняться строки принимающей таблицы, примерно так:
X++:
while (!adoRecordSet.EOF())
{
for (col=0; col<=(adoFields.count()-1); col++)
{
            adoField = adoFields.itemIdx( col );
            fieldName = adoField.name();
             value = adoField.value();
 
            // ниже строчка какбы хотелось реализовать
            dimensions.(FieldNum(Dimensions, col)) = value;
}
           dimensions.insert();
 
           adoRecordSet.moveNext();
}

Последний раз редактировалось yuriuss; 07.07.2008 в 15:44.
Старый 07.07.2008, 16:04   #14  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Когда Вы делаете экспорт таблицы добавте в recordset еще одно поле fieldId, в которое помещайте fieldNum. А при импорте обращайтесь к этому полю. Так будет проще всего. Хотя, как здесь уже писали можно и через dictTable.
Старый 07.07.2008, 16:07   #15  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
а почему Вам не использовать имена полей как советовал gl00mie?
X++:
hile (!adoRecordSet.EOF())
{
for (col=0; col<=(adoFields.count()-1); col++)
{
            adoField = adoFields.itemIdx( col );
            fieldName = adoField.name();
            value = adoField.value();
 
            // ниже строчка какбы хотелось реализовать
            dimensions.(FieldName2id(tablenum(Dimensions), fieldName)) = value;
}
           dimensions.insert();
 
           adoRecordSet.moveNext();
}
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
Старый 07.07.2008, 16:26   #16  
yuriuss is offline
yuriuss
Участник
 
5 / 10 (1) +
Регистрация: 15.03.2007
Адрес: spb
Возникает ошибка на строке
X++:
dimensions.(FieldName2id([COLOR=blue]tablenum[/COLOR](Dimensions), fieldName)) = value;
Цитата:
Ошиба времени выполнения. Неправильные типы аргументов в операции присвоения значения переменной.
value задан как COMVariant;
Старый 07.07.2008, 16:36   #17  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
объявите value как anytype. А получайте значение примерно следующим образом
value = this.getValue(adoField.value());
Где
X++:
anytype getValue(COMVariant _value)
{
    anytype v;
    switch(_value.variantType())
    {
        case COMVariantType::VT_BOOL:
            v = _value.boolean();
            break;
        case COMVariantType::VT_BSTR:
            v = _value.bStr();
            break;
        case COMVariantType::VT_INT:
            v = _value.int();
            break;
        case COMVariantType::VT_DATE:
             v = _value.date();
             break;
         case COMVariantType::VT_DISPATCH:
             v = COM::createFromVariant(_value);
             break;
         case COMVariantType::VT_I4:
              v = _value.int();
              break;
         case COMVariantType::VT_R8:
              v = _value.double();
              break;
        default:
            throw Error(strfmt("Неизвестный тип данных: %1", _value.variantType()));
    }
    return v;
}
}

Последний раз редактировалось _scorp_; 07.07.2008 в 16:50.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Denis Fedotenko: Новые поля в складских проводках Blog bot DAX: База знаний и проекты 10 24.05.2007 11:57
Добавление нового поля в старую таблицу PavelSR DAX: Программирование 3 14.06.2006 08:22
Как при вводе новой записи установить значение поля по умолчанию Zman DAX: Программирование 3 17.01.2005 10:23
Как по имени(ID) поля таблицы установить значение поля. AKit_3 DAX: Программирование 9 24.12.2004 19:03
Получить значение поля таблицы по номеру (Id) поля Anais DAX: Программирование 2 15.04.2004 13:00
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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