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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.08.2006, 14:32   #1  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
? Выбор записей по неизвестным заранее полям
Здравствуйте! Хочу узнать как можно осущесвтить выбор записей из таблицы при след-их условиях:
1. Таблица задается своим идентификатором(т.е. за ранее не известна)
2. Количество полей по которым осуществляется поиск неизвестно заранее
3. Поля задаются своими идентификаторами(в контейнере, например...)
Особенность такова, что в рез-те поиска получается только одна запись, т.е создание динамического запроса(как мне кажется не очень подходит....)
Что используется для таких задач?
Старый 21.08.2006, 14:39   #2  
Zan is offline
Zan
Участник
 
104 / 25 (1) +++
Регистрация: 22.07.2004
Адрес: I live in Moscow
Query
Старый 21.08.2006, 14:46   #3  
itfs is offline
itfs
Участник
 
277 / 43 (2) +++
Регистрация: 18.07.2005
Адрес: Moscow
Цитата:
Сообщение от PavelSR
Особенность такова, что в рез-те поиска получается только одна запись, т.е создание динамического запроса(как мне кажется не очень подходит....)
Что используется для таких задач?
Очень даже подходит.
Код:
Q = new Query();
QBDS = Q.addDataSource(_TableId);
QBDS.addRange(_FieldId1).value(_FieldValue1);
...
QBDS.addRange(_FieldIdn).value(_FieldValuen);
Qr = new QueryRun(Q);
Qr.next();
common = Qr.GetNo(1);
Что-то типа этого.

С уважением, itfs.
Старый 21.08.2006, 14:47   #4  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
Цитата:
Сообщение от Zan
Query
Хм.... и всё-таки Query.... т.е. что-то вроде "оператора select с изменяемым(не фиксированным) количеством условий" нет?
Старый 21.08.2006, 14:50   #5  
Zan is offline
Zan
Участник
 
104 / 25 (1) +++
Регистрация: 22.07.2004
Адрес: I live in Moscow
см. сообщение от itfs
Старый 21.08.2006, 14:52   #6  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
А чем Query не устраивает?
Старый 21.08.2006, 14:57   #7  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
Цитата:
Сообщение от oip
А чем Query не устраивает?
В результате будет одна запись и прийдется создвавать много новых запросов(т.к. много разных условий выбора)... быть может это нормальная ситуация... у меня мало опыта...
Старый 21.08.2006, 15:04   #8  
itfs is offline
itfs
Участник
 
277 / 43 (2) +++
Регистрация: 18.07.2005
Адрес: Moscow
Query - это нужный вам конструктор запросов, обернутый в класс. Ничего лишнего.

С уважением, itfs.
За это сообщение автора поблагодарили: PavelSR (1).
Старый 21.08.2006, 15:10   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Ну, вообще-то, можно еще через RunBuf. Смотрете класс/форму SysTableBrowser
__________________
Axapta v.3.0 sp5 kr2
Старый 21.08.2006, 15:23   #10  
itfs is offline
itfs
Участник
 
277 / 43 (2) +++
Регистрация: 18.07.2005
Адрес: Moscow
По-моему это жестоко мне кажется, автор поста только хотел улучшить читабельность своего кода ... впрочем, тоже конечно вариант.

С уважением, itfs.
Старый 21.08.2006, 15:31   #11  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
Цитата:
Сообщение от AndyD
Ну, вообще-то, можно еще через RunBuf. Смотрете класс/форму SysTableBrowser
А можно какой нибудь примерчик использования RunBuf в моих целях? (я впервые вижу эту функцию...) На сколько я понимаю она предназначена для выполнения кода, укзанного в качестве первого параметра,
Старый 21.08.2006, 15:31   #12  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Ну, это ему самому решать.
__________________
Axapta v.3.0 sp5 kr2
Старый 21.08.2006, 15:38   #13  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
X++:
static void Job139(Args _args)
{
    Common      cm;
    InventTable it;
    DictTable   dictTable   =   new DictTable(tablenum(InventTable));
    DictField   dictField;
    str         buf;
    xppCompiler compiler = new xppCompiler();
    ;
    select it where it.ItemId like "1*";
    dictField = dictTable.fieldObject(fieldnum(InventTable, itemId));
    buf = strfmt("%1 getRecord()\n{\n%1 %1;\n;\n select %1 where %1.%2 == \"%3\";\n return %1;}", 
            dictTable.name(), dictField.name(), it.ItemId);
    if (compiler.compile(buf))
    {
        cm = compiler.execute();
//        или
//        cm = runbuf(buf);
        info(cm.(fieldnum(InventTable, itemId)) + "::" + cm.(fieldnum(InventTable, itemName)));
    }
    else
        info(compiler.errorText());
}
Можно использовать функцию runbuf() или метод execute() класса xppCompiler
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 21.08.2006 в 15:41.
Старый 21.08.2006, 15:49   #14  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Да, кстати, по поводу runbuf и иже с ним
утечка памяти в аксапта
Можно так-же сделать так
X++:
    cm = dictTable.makeRecord();
    buf = strfmt("void getRecord(%1 %1)\n{\n;\n select %1 where %1.%2 == \"%3\";\n}",
            dictTable.name(), dictField.name(), it.ItemId);
    if (compiler.compile(buf))
    {
        compiler.execute(cm);
Т.е. функция ничего не возвращает.

А вот еще про runbuf()
Пример использования RunBuf

В общем - на свой страх и риск.
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 21.08.2006 в 15:52.
Старый 21.08.2006, 15:52   #15  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
Замечательно! Однако мне не понятна следующая строчка:
X++:
    select it where it.ItemId like "1*";
Для чего она?
Старый 21.08.2006, 15:58   #16  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Ну это просто для примера, чтобы получить itemId для передачи в функцию

PS Что-то я разнукался
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 21.08.2006 в 16:01.
Старый 21.08.2006, 16:16   #17  
Ned is offline
Ned
Lean Six Sigma
 
680 / 99 (5) ++++
Регистрация: 29.12.2002
Адрес: самолёт
Прямой запрос к базе будет получше, чем RunBuf.
__________________
Viacheslav Nefedov, http://www.nefedov.net, http://restock.guru/
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Влияние настройки доступа на уровне записей longson DAX: Функционал 2 15.01.2008 21:29
Настройка прав доступа на уровне записей Pan DAX: Администрирование 19 12.11.2006 11:10
вывод количества записей в таблице на web форме и указание текущей страницы таблицы bambuk1960 DAX: Программирование 1 06.07.2006 13:27
Хранение отмеченных записей Pavel Pustovalov DAX: Программирование 9 17.05.2005 21:56
Перебор записей Form Data Source при множественном выборе maxsmirnov DAX: Программирование 1 24.05.2004 16:16
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:24.