14.02.2013, 07:40 | #21 |
Участник
|
Цитата:
Сообщение от gl00mie
Есть время разбрасывать камни и время их собирать. Кто-то поленился нормально написать код, избавиться от дублирования, вынести принятие однотипных решений в одно место, а теперь придется либо наплодить кучу copy-paste'а, либо засучить рукава и провести серьезный рефакторинг кода.
Не стоит так делать. Тут уже писали, наиболее нормальный вариант, позволяющий менять тип join'а во время выполнения, - это переписать код на Query'ках. Решать проблему copy-paste'ом - все равно, что заметать сор под половик в надежде, что убирать его придется кому-то другому; это непрофессионально, в конце концов Предлагаю автора поделиться кодом.
__________________
// no comments |
|
14.02.2013, 12:49 | #22 |
Участник
|
Зря вы иронизируете. Может, вы не поняли, но запросы в коде разные. Специально для вас подчеркиваю это слово.
Нужен пример? Да запросто. Первый запрос: X++: while select tbl1 group by EmplId, Organization where tbl1.PostDate >= startPeriod && tbl1.PostDate <= endPeriod && tbl1.Organization like organization + "*" exists join tbl2 where tbl2.Key == tbl1.Key && tbl2.Sham == NoYes::No X++: select sum(Amount) from tbl1 group by EmplId where tbl1.PostDate < startPeriod && tbl1.EmplId == temp.EmplId && tbl1.Organization == temp.Organization exists join tbl2 where tbl2.Key == tbl1.Key && tbl2.Sham == NoYes::No; Ну и как тут обойтись одной кверей? Для каждого запроса менять ее? |
|
14.02.2013, 13:08 | #23 |
Ищущий знания...
|
X++: Query query = new Query(); QueryBuildDataSource qbds, qbdsJoin; boolean groupByEmplId, groupByOrg; boolean sumAmountField; boolean selectForEmplId; boolean needJoin; ; qbds = query.addDataSource(tableNum(tbl1)); qbds.OrderMode(OrderMode::GroupBy); if (needJoin) { qbdsJoin = qbds.addDataSource(tableNum(tbl2)); qbdsJoin.relations(true); } if (groupByEmplId) qbds.addSortField(fieldNum(tbl1, EmplId)); if (groupByOrg) qbds.addSortField(fieldNum(tbl1, Organization)); if (selectForEmplId) qbds.addRange(fieldNum(tbl1, EmplId)).value(queryValue(temp.EmplId)); if (sumAmountField) qbds.addSelectionField(fieldNum(tbl1, Amoun), SelectionField::Sum); // и т.д. и т.п ....
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
14.02.2013, 13:12 | #24 |
Участник
|
А кто говорил про одну? На каждый запрос свой Query. Преимущество Query над оператором select в том что структуру Query можно собирать из отдельных кусков. Если в Query есть повторяющиеся части такие как например присоединение фильтрующей таблицы с нужным типом джойна, то присоединение этой части к Query можно оформить в виде отдельной процедуры. Query помогает избавиться от дублирования кода.
|
|
|
|