21.08.2006, 14:32 | #1 |
Участник
|
Выбор записей по неизвестным заранее полям
Здравствуйте! Хочу узнать как можно осущесвтить выбор записей из таблицы при след-их условиях:
1. Таблица задается своим идентификатором(т.е. за ранее не известна) 2. Количество полей по которым осуществляется поиск неизвестно заранее 3. Поля задаются своими идентификаторами(в контейнере, например...) Особенность такова, что в рез-те поиска получается только одна запись, т.е создание динамического запроса(как мне кажется не очень подходит....) Что используется для таких задач? |
|
21.08.2006, 14:39 | #2 |
Участник
|
Query
|
|
21.08.2006, 14:46 | #3 |
Участник
|
Цитата:
Сообщение от 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 |
Участник
|
Цитата:
Сообщение от Zan
Query
|
|
21.08.2006, 14:50 | #5 |
Участник
|
см. сообщение от itfs
|
|
21.08.2006, 14:52 | #6 |
Axapta
|
А чем Query не устраивает?
|
|
21.08.2006, 14:57 | #7 |
Участник
|
Цитата:
Сообщение от oip
А чем Query не устраивает?
|
|
21.08.2006, 15:04 | #8 |
Участник
|
Query - это нужный вам конструктор запросов, обернутый в класс. Ничего лишнего.
С уважением, itfs. |
|
|
За это сообщение автора поблагодарили: PavelSR (1). |
21.08.2006, 15:10 | #9 |
Участник
|
Ну, вообще-то, можно еще через RunBuf. Смотрете класс/форму SysTableBrowser
__________________
Axapta v.3.0 sp5 kr2 |
|
21.08.2006, 15:23 | #10 |
Участник
|
По-моему это жестоко мне кажется, автор поста только хотел улучшить читабельность своего кода ... впрочем, тоже конечно вариант.
С уважением, itfs. |
|
21.08.2006, 15:31 | #11 |
Участник
|
Цитата:
Сообщение от AndyD
Ну, вообще-то, можно еще через RunBuf. Смотрете класс/форму SysTableBrowser
|
|
21.08.2006, 15:31 | #12 |
Участник
|
Ну, это ему самому решать.
__________________
Axapta v.3.0 sp5 kr2 |
|
21.08.2006, 15:38 | #13 |
Участник
|
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()); }
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 21.08.2006 в 15:41. |
|
21.08.2006, 15:49 | #14 |
Участник
|
Да, кстати, по поводу 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 |
Участник
|
Замечательно! Однако мне не понятна следующая строчка:
X++: select it where it.ItemId like "1*"; |
|
21.08.2006, 15:58 | #16 |
Участник
|
Ну это просто для примера, чтобы получить itemId для передачи в функцию
PS Что-то я разнукался
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 21.08.2006 в 16:01. |
|
21.08.2006, 16:16 | #17 |
Lean Six Sigma
|
Прямой запрос к базе будет получше, чем RunBuf.
|
|