13.07.2006, 11:46 | #1 |
Участник
|
Можно вывести в lookup пересечение двух query?
Можно как нить связать два разных query(по одному общему полю) и вывести в lookup их пересечение?
|
|
13.07.2006, 12:03 | #2 |
Модератор
|
Э-э-э.. не совсем понятно, что имеено требуется.
Напиши дисплей метод, создай квери. Вопрос в том, сможешь ли ты коректно сформировать один query из двух С Уважением, Георгий |
|
13.07.2006, 12:24 | #3 |
NavAx
|
Цитата:
Сообщение от Hidden
Можно как нить связать два разных query(по одному общему полю) и вывести в lookup их пересечение?
__________________
Isn't it nice when things just work? |
|
13.07.2006, 13:32 | #4 |
Участник
|
Общий query построил. мне нужны итоговые данные таблицы RpayHRMOrganization Теперь другая проблема с помощью (см. ниже)вижу что запрос отработался нормально данные есть:
qr = new QueryRun(_query); while (qr.next()) { rct = qr.get(tableNum(RContractTable)); zb = qr.get(tableNum(ZoneBrigade)); rphrm = qr.get(tableNum(RpayHRMOrganization)); } как бы мне теперь вывести данные из rphrm (или саму таблицу RpayHRMOrganization) в lookup? Стандартным способом пустой lookup выводится. sysTableLookup.parmQuery(_query); sysTableLookup.performFormLookup(); |
|
13.07.2006, 14:17 | #5 |
Administrator
|
Насколько я понял вопрос - задача вывести данные из 3-го датасорса. Учитывая, что SysTableLookup при инициализации просит ему скормить tableId - то подразумевается, что в лукапе будут данные из одной таблицы, т.е. в Вашем случае - просто при инициализации SysTableLookup нужно в TableId задать табл RpayHRMOrganization. Другое дело - что в стандартной реализации к строящейся форме подтягивается только один датасорс - т.е. вывести в лукапе данные из двух таблиц одновременно не получится
__________________
Возможно сделать все. Вопрос времени |
|
13.07.2006, 15:43 | #6 |
Участник
|
Цитата:
Сообщение от sukhanchik
Насколько я понял вопрос - задача вывести данные из 3-го датасорса. Учитывая, что SysTableLookup при инициализации просит ему скормить tableId - то подразумевается, что в лукапе будут данные из одной таблицы, т.е. в Вашем случае - просто при инициализации SysTableLookup нужно в TableId задать табл RpayHRMOrganization. Другое дело - что в стандартной реализации к строящейся форме подтягивается только один датасорс - т.е. вывести в лукапе данные из двух таблиц одновременно не получится
|
|
13.07.2006, 16:06 | #7 |
Участник
|
Hidden, для лучшего понимания покажи весь код Вашего лукапа.
__________________
Функциональное тестирование сайтов |
|
13.07.2006, 16:15 | #8 |
Administrator
|
Врубился. 2Red Stranger - проверяется просто. Делаем query - 2 таблички - к примеру CustTable и CustTrans. Важно чтобы было более 1 датасорса у квери. Теперь хотим вывести данные в лукап не из 1-го ДСа. Обламываемся. Причем очевидно SysTableLookup при инициализации должен получать tableid 2-го ДСа - иначе fieldid будут перепутаны.
В коде класса - работа вообще говоря идет именно с первым ДС-ом query, которую запхали в форму. (query.dataSourceNo(1) - жестко прописано). Думаю - в этом главная причина - но с ходу сообразить как красиво подправить - чего-то не могу Думаю для решения этой проблемы есть 2 варианта: корректировка SysTableLookup (или создания наследника - неважно - главное что здесь надо внимательно разбираться) или же юзание FormHelp на EDT (т.е. создание своей формы). Для Hidden наверное имеет смысл выбрать 2-й вариант
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 13.07.2006 в 16:20. |
|
13.07.2006, 16:17 | #9 |
Участник
|
а точно все правильно написано? Может просто sysTableLookup.addLookupField() не используется или неправильно используется??
|
|
13.07.2006, 16:23 | #10 |
Administrator
|
2kashperuk: Сделай лукап как я описал - увидишь. addLookupField тут вообще не при делах. Ну точнее - он используется конечно - но там не промажешь. Поле-то в лукапе появляется. Данных нет
__________________
Возможно сделать все. Вопрос времени |
|
13.07.2006, 16:24 | #11 |
Участник
|
public void lookup()
{ SysTableLookup sysTableLookup = sysTableLookup::newParameters(tableNum(RpayHRMOrganization), this); query _query = new query(); queryBuildDatasource qbds; QueryRun qr; str val; RContractTable rct; ZoneBrigade zb; RpayHRMOrganization rphrm; ; sysTableLookup.addLookupfield(fieldNum(RpayHRMOrganization, hrmOrganizationId),true); sysTableLookup.addLookupfield(fieldNum(RpayHRMOrganization, description),false); qbds = _query.addDataSource(tablenum(RContractTable)); qbds.addRange(fieldNum(RContractTable,RContractAccount)).value(rContractTable.RContractAccount); qbds = qbds.addDataSource(tablenum(ZoneBrigade)); qbds.joinMode(JoinMode::InnerJoin); qbds.addLink(fieldNum(ZoneBrigade,ZoneId),fieldNum(RContractTable,Zone)); qbds = qbds.addDataSource(tablenum(RpayHRMOrganization)); qbds.addRange(fieldNum(RpayHRMOrganization,hrmOrganizationId)).value("БР*"); qbds.addRange(fieldNum(RpayHRMOrganization,active)).value(enum2value(NoYes::Yes)); qbds.joinMode(JoinMode::InnerJoin); qbds.addLink(fieldNum(ZoneBrigade,Brigade),fieldNum(RpayHRMOrganization,hrmOrganizationId)); qbds.addSortField(fieldNum(RpayHRMOrganization,hrmOrganizationId)); /* qr = new QueryRun(_query); while (qr.next()) { rct = qr.get(tableNum(RContractTable)); zb = qr.get(tableNum(ZoneBrigade)); rphrm = qr.get(tableNum(RpayHRMOrganization)); } */ // sysTableLookup.parmTableId(tableNum(RpayHRMOrganization)); sysTableLookup.parmQuery(_query); sysTableLookup.performFormLookup(); } Вот весь код lookup. |
|
13.07.2006, 16:30 | #12 |
Участник
|
Прикольно. Типа глюк
2 Hidden: А почему бы вам местами датасорсы не поменять - innerJoin все таки. Если конечно можно как-то здесь это сделать. Попробуйте просто в PL\SQL DEV сначала |
|
|
За это сообщение автора поблагодарили: Hidden (1). |
13.07.2006, 16:33 | #13 |
Участник
|
2 Hidden поддерживаю kashperuk. Перепиши наполнение qbds, начиная танцевать от RpayHRMOrganization, т.е. ее Вы должны первой присоединить, а все остальные только после этого.
__________________
Функциональное тестирование сайтов |
|
13.07.2006, 16:48 | #14 |
Участник
|
Цитата:
Сообщение от kashperuk
Прикольно. Типа глюк
2 Hidden: А почему бы вам местами датасорсы не поменять - innerJoin все таки. Если конечно можно как-то здесь это сделать. Попробуйте просто в PL\SQL DEV сначала |
|
14.07.2006, 10:02 | #15 |
Участник
|
а вот интересно...
Быстренько сделал простейший примерчик лукапа из двух табличек, типа паказать пользователей из группы админов.
Код: public void lookup() { SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNUm(UserInfo),this); Query query = new Query(); QueryBuildDataSource queryBuildDataSource; QueryBuildRange queryBuildRange; ; queryBuildDataSource = query.addDataSource(tableNum(UserInfo)); queryBuildDataSource = queryBuildDataSource.addDataSource(tableNum(UserGroupList)); queryBuildDataSource.joinMode(JoinMode::InnerJoin); queryBuildDataSource.fetchMode(QueryFetchMode::One2One); queryBuildDataSource.relations(true); queryBuildRange = queryBuildDataSource.addRange(fieldNum(UserGroupList, groupId)); queryBuildRange.value("Admin"); sysTableLookup.addLookupfield(fieldNum(UserInfo, Id)); sysTableLookup.addLookupfield(fieldNum(UserInfo, Name)); sysTableLookup.addLookupfield(fieldNum(UserInfo, Enable)); sysTableLookup.addLookupfield(fieldNum(UserGroupList, groupId)); sysTableLookup.parmQuery(query); sysTableLookup.performFormLookup(); } Код: SELECT * FROM UserGroupList WHERE UserInfo.id = UserGroupList.userId AND ((groupId = Admin)) не поленился, посмотрел в профайлере сиквела что получает сервер: Код: exec sp_cursorprepexec @P1 output, @P2 output, N'@P1 varchar(1000)', N'SELECT A.ID,A.NAME, A.ENABLE,A.RECVERSION,101090,B.USERID,B.GROUPID,B.MODIFIEDDATE,B.MODIFIEDTIME, B.MODIFIEDBY,B.CREATEDDATE,B.CREATEDTIME,B.CREATEDBY,B.RECVERSION,B.RECID FROM USERINFO A WITH( NOLOCK),USERGROUPLIST B WITH( NOLOCK) WHERE ((B.GROUPID=@P1) AND (A.ID=B.USERID)) ORDER BY A.ID OPTION(FAST 1)', @P3 output, @P4 output, @P5 output, 'Admin' |
|
|
За это сообщение автора поблагодарили: DTD (1). |
|
Похожие темы | ||||
Тема | Ответов | |||
How-to. Слетание пользовательских настроек в формах после вызова lookup, или MS - suxx. | 2 | |||
Создание Lookup формы | 9 | |||
lookup - проблема. Помогите! | 14 | |||
LookUp | 3 | |||
Фильтрация в lookup | 2 |
|