|
![]() |
#1 |
Участник
|
запрос писался используя материалы статьи
"Древовидная структура источников данных в Query" http://www.axforum.info/forums/showt...=7889#post7889 Суть в том, что мне не просто нужен запрос который вернет все записи, а этот query пользователи еще "ограничивают" (добавляют range) если нужно во время prompt(), и выборка данных должна содержать только тот список значений таблицы Классификатор, который не противоречит значениям, выбранным пользователями в связанных таблицах (я не знаю как какие поля и какими значениями пользователи захотят ограничить таблицы) правда, что не в ту сторону - попробовал исправить и получил также неправильный запрос: SELECT * FROM RFORProgrammeClassifierTable EXISTS JOIN * FROM RFORExpenceItemTable WHERE RFORProgrammeClassifierTable.RFORExpenceItem = RFORExpenceItemTable.RFORExpenceItem EXISTS JOIN * FROM RFORTerritoryItemTable WHERE RFORProgrammeClassifierTable.RFORTerritoryItem = RFORTerritoryItemTable.RFORTerritoryItem EXISTS JOIN * FROM RFORTerritoryTable WHERE RFORTerritoryItemTable.RFORTerritory = RFORTerritoryTable.RFORTerritory EXISTS JOIN * FROM RFORGeneralContractTable WHERE RFORProgrammeClassifierTable.RFORGeneralContract = RFORGeneralContractTable.RFORGeneralContract AND RFORProgrammeClassifierTable.SupplAgreement = RFORGeneralContractTable.RFORGeneralContract EXISTS JOIN * FROM RFORProgrammeTable Тут связь ошибочно идет еще и по полю SupplAgreement - аналитике (AND RFORProgrammeClassifierTable.SupplAgreement = RFORGeneralContractTable.RFORGeneralContract) и нет связей по полям RFORProgrammeTable (EXISTS JOIN * FROM RFORProgrammeTable) исправленный код, создающий query: Query query; QueryRun queryRun; QueryBuildDataSource qbDS1, qbDS2, qbDS3, qbDS4, qbDS5, qbDS6, qbDS7; RFORProgrammeClassifierTable rFORProgrammeClassifierTable; set dims = new set (types::string); // Declare a set of strings str dimsStr; int fldId, fldId2; ; query = new Query(); //Классификатор программ qbDS1 = query.addDataSource(tableNum(RFORProgrammeClassifierTable)); //Статья затрат qbDS2 = qbDS1.addDataSource(tableNum(RFORExpenceItemTable)); qbDS2.addLink(fieldNum(RFORProgrammeClassifierTable, RFORExpenceItem), fieldNum(RFORExpenceItemTable, RFORExpenceItem)); qbDS2.joinMode(JoinMode::EXISTSJOIN); qbDS2.fetchMode(0); //info(qbDS1.toString()); //Объект qbDS3 = qbDS1.addDataSource(tableNum(RFORTerritoryItemTable)); qbDS3.addLink(fieldNum(RFORProgrammeClassifierTable, RFORTerritoryItem), fieldNum(RFORTerritoryItemTable, RFORTerritoryItem)); qbDS3.joinMode(JoinMode::EXISTSJOIN); qbDS3.fetchMode(0); //info(qbDS1.toString()); //Территория qbDS5 = qbDS3.addDataSource(tableNum(RFORTerritoryTable)); qbDS5.addLink(fieldNum(RFORTerritoryItemTable, RFORTerritory), fieldNum(RFORTerritoryTable, RFORTerritory)); qbDS5.joinMode(JoinMode::EXISTSJOIN); qbDS5.fetchMode(0); //info(qbDS1.toString()); //Ген.договор qbDS4 = qbDS1.addDataSource(tableNum(RFORGeneralContractTable)); qbDS4.addLink(fieldNum(RFORProgrammeClassifierTable, RFORGeneralContract), fieldNum(RFORGeneralContractTable, RFORGeneralContract)); qbDS4.joinMode(JoinMode::EXISTSJOIN); qbDS4.fetchMode(0); //info(qbDS1.toString()); //Программа qbDS6 = qbDS4.addDataSource(tableNum(RFORProgrammeTable)); qbDS4.addLink(fieldNum(RFORGeneralContractTable, RFORProgramme), fieldNum(RFORProgrammeTable, RFORProgramme)); qbDS6.joinMode(JoinMode::EXISTSJOIN); qbDS6.fetchMode(0); info(qbDS1.toString()); |
|