|
07.02.2011, 07:47 | #1 |
Участник
|
Query датасорса на форме
Добрый день, вот такая проблема: есть форма с датасорсом, при открытии формы в гриде отображаются все записи, так же на форме есть чекбокс, при установки галки, в гриде должны отображаться только те данные которые не входят (NoExistsJoin) в другие 4 таблицы.
Перекрываю метод modified на чекбоксе, там вызываю executeQuery датасорса. Соответственно executeQuery перекрыт, так: X++: QueryBuildDatasource ds; QueryBuildDatasource ds2; QueryBuildDatasource ds3,ds4,ds5; Query q = new Query(); ; if (Open.checked()) { ds = q.addDataSource(tableNum(PurchTable_request)); ds3 = ds.addDataSource(tableNum(RcontractTable)); ds3.addLink(fieldNum(PurchTable_request, RequestId), fieldNum(RcontractTable, RequestId)); ds3.joinMode(JoinMode::NoExistsJoin); ds2 = ds.addDataSource(tableNum(PurchTable)); ds2.addLink(fieldNum(PurchTable_request, RequestId), fieldNum(PurchTable, RequestId)); ds2.joinMode(JoinMode::NoExistsJoin); ds4 = ds.addDataSource(tableNum(PurchLine)); ds4.addLink(fieldNum(PurchTable_request, RequestId), fieldNum(PurchLine, RequestId)); ds4.joinMode(JoinMode::NoExistsJoin); ds5 = ds.addDataSource(tableNum(AdvanceHolderTable)); ds5.addLink(fieldNum(PurchTable_request, RequestId), fieldNum(AdvanceHolderTable, RequestId)); ds5.joinMode(JoinMode::NoExistsJoin); ds5.fetchMode(QueryFetchMode::One2One); PurchTable_request_DS.queryRun().query(q); } else { super(); } подскажите плиз где что не так написал?
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
07.02.2011, 08:24 | #2 |
Участник
|
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 07.02.2011 в 08:27. |
|
07.02.2011, 08:49 | #3 |
Участник
|
Цитата:
Сообщение от AndyD
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
07.02.2011, 09:09 | #4 |
Участник
|
|
|
07.02.2011, 09:13 | #5 |
Участник
|
Цитата:
Надо включать трассировку запросов и смотреть, что реально уходит PS Угум. А вот и подтверждение. 2kalex_a - смотрите, какой запрос уходит на сервер
__________________
Axapta v.3.0 sp5 kr2 |
|
07.02.2011, 09:21 | #6 |
Участник
|
Цитата:
kalex_a, а если временно упростить запрос (оставить только один или два exists join), то он отработает? Последний раз редактировалось S.Kuskov; 07.02.2011 в 09:24. |
|
07.02.2011, 09:36 | #7 |
Участник
|
Цитата:
Сообщение от S.Kuskov
Честно говоря, на практике никогда не встречал такой ситуации. Всегда думал что проблема именно в парсере запросов, а не в их трансляции. В любом случае проверить никогда не повредит.
kalex_a, а если временно упростить запрос (оставить только один или два exists join), то он отработает?
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
07.02.2011, 08:33 | #8 |
Участник
|
не работает - выдаёт ошибку? или
не работает - скрывает не те записи/не скрывает не те записи? почему fetchMode One2One устанавливается только пятому источнику? |
|
07.02.2011, 08:55 | #9 |
Участник
|
Покажите код после исправления
__________________
Axapta v.3.0 sp5 kr2 |
|
07.02.2011, 09:02 | #10 |
Участник
|
X++: ds = q.addDataSource(tableNum(PurchTable_request)); ds3 = ds.addDataSource(tableNum(RcontractTable)); ds3.addLink(fieldNum(PurchTable_request, RequestId), fieldNum(RcontractTable, RequestId)); ds3.joinMode(JoinMode::NoExistsJoin); ds3.fetchMode(QueryFetchMode::One2One); ds2 = ds.addDataSource(tableNum(PurchTable)); ds2.addLink(fieldNum(PurchTable_request, RequestId), fieldNum(PurchTable, RequestId)); ds2.joinMode(JoinMode::NoExistsJoin); ds2.fetchMode(QueryFetchMode::One2One); ds4 = ds.addDataSource(tableNum(PurchLine)); ds4.addLink(fieldNum(PurchTable_request, RequestId), fieldNum(PurchLine, RequestId)); ds4.joinMode(JoinMode::NoExistsJoin); ds4.fetchMode(QueryFetchMode::One2One); ds5 = ds.addDataSource(tableNum(AdvanceHolderTable)); ds5.addLink(fieldNum(PurchTable_request, RequestId), fieldNum(AdvanceHolderTable, RequestId)); ds5.joinMode(JoinMode::NoExistsJoin); ds5.fetchMode(QueryFetchMode::One2One); PurchTable_request_DS.query(q); super();
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
07.02.2011, 09:10 | #11 |
Участник
|
Информация:
SELECT * FROM PurchTable_request NOTEXISTS JOIN * FROM RContractTable WHERE PurchTable_request.RequestId = RContractTable.RequestId NOTEXISTS JOIN * FROM PurchTable WHERE PurchTable_request.RequestId = PurchTable.RequestId NOTEXISTS JOIN * FROM PurchLine WHERE PurchTable_request.RequestId = PurchLine.RequestId NOTEXISTS JOIN * FROM AdvanceHolderTable WHERE PurchTable_request.RequestId = AdvanceHolderTable.RequestId
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
16.02.2011, 09:46 | #12 |
Участник
|
Оставил два no exists join, на сервер уходит вот такой запрос:
X++: declare @p1 int set @p1=1073742866 declare @p2 int set @p2=180158983 declare @p5 int set @p5=16 declare @p6 int set @p6=1 declare @p7 int set @p7=-1 exec sp_cursorprepexec @p1 output,@p2 output,N'@P1 nvarchar(8),@P2 int,@P3 nvarchar(2002),@P4 nvarchar(8),@P5 nvarchar(8)',N'SELECT A.REQUESTID,A.CURRENCYCODE,A.DIMENSION,A.DIMENSION2_,A.DIMENSION3_,A.DIMENSION4_,A.DIMENSION5_,A.DIMENSION6_,A.DIMENSION7_,A.CONFIRM_LABEL1,A.CONFIRM_COSTCONTROL,A.CONFIRM_FINAL,A.DATECONFIRM_LABEL1,A.DATECONFIRM_COSTCONTROL,A.DATECONFIRM_FINAL,A.USERCONFIRMLABEL1,A.USERCONFIRM_COSTCONTROL,A.USERCONFIRM_FINAL,A.AMMOUNT,A.USER_REGISTR,A.DATE_REGISTR,A.FIELD1,A.ID_COMPETENCE,A.REQUESTID_REZERV,A.ATF_TYPEREQUEST,A.AMMOUNT_BALANS,A.VENDACCOUNT,A.VENDRNN,A.VENDNAME,A.CONTRACTDATE,A.CONTRACTNUMBER,A.DATECONFIRM_TOPAY,A.USERCONFIRM_TOPAY,A.AMMOUNT_PAYMENT,A.CONFIRM_TOPAY,A.REQUESTURL,A.MODIFIEDDATE,A.MODIFIEDTIME,A.MODIFIEDBY,A.CREATEDDATE,A.CREATEDTIME,A.CREATEDBY,A.RECVERSION,A.RECID,A.REQUEST_TEXT FROM PURCHTABLE_REQUEST A WHERE ((A.DATAAREAID=@P1) AND ((A.CONFIRM_FINAL=@P2) AND NOT ((A.REQUESTURL=@P3)))) AND NOT EXISTS (SELECT ''x'' FROM PURCHTABLE B WHERE ((B.DATAAREAID=@P4) AND (A.REQUESTID=B.REQUESTID)) AND NOT EXISTS (SELECT ''x'' FROM PURCHLINE C WHERE ((C.DATAAREAID=@P5) AND (A.REQUESTID=C.REQUESTID)))) ORDER BY A.DATAAREAID DESC,A.DATECONFIRM_FINAL DESC OPTION(FAST 1)',@p5 output,@p6 output,@p7 output,N'dat',1,N'',N'dat',N'dat' select @p1, @p2, @p5, @p6, @p7 Не пойму в чем проблема.
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
16.02.2011, 10:08 | #13 |
Участник
|
Вы уж определитесь какой конкретно запрос вам нужен.
Код: SELECT ... FROM PURCHTABLE_REQUEST A WHERE ... AND NOT EXISTS ( SELECT ... FROM PURCHTABLE B WHERE ... AND NOT EXISTS ( SELECT ... FROM PURCHLINE C WHERE ... ) ) Код: SELECT ... FROM PURCHTABLE_REQUEST A WHERE ... AND NOT EXISTS ( SELECT ... FROM PURCHTABLE B WHERE ... ) AND NOT EXISTS ( SELECT ... FROM PURCHLINE C WHERE ... ) |
|
16.02.2011, 10:19 | #14 |
Участник
|
Цитата:
Сообщение от S.Kuskov
Вы уж определитесь какой конкретно запрос вам нужен.
Код: SELECT ... FROM PURCHTABLE_REQUEST A WHERE ... AND NOT EXISTS ( SELECT ... FROM PURCHTABLE B WHERE ... AND NOT EXISTS ( SELECT ... FROM PURCHLINE C WHERE ... ) ) Код: SELECT ... FROM PURCHTABLE_REQUEST A WHERE ... AND NOT EXISTS ( SELECT ... FROM PURCHTABLE B WHERE ... ) AND NOT EXISTS ( SELECT ... FROM PURCHLINE C WHERE ... ) Второй Not Exists всегда выношу в проверку внутри цикла, либо если на форме, то через временную таблицу... |
|
16.02.2011, 10:20 | #15 |
Участник
|
Цитата:
Сообщение от S.Kuskov
Вы уж определитесь какой конкретно запрос вам нужен.
Код: SELECT ... FROM PURCHTABLE_REQUEST A WHERE ... AND NOT EXISTS ( SELECT ... FROM PURCHTABLE B WHERE ... AND NOT EXISTS ( SELECT ... FROM PURCHLINE C WHERE ... ) ) Код: SELECT ... FROM PURCHTABLE_REQUEST A WHERE ... AND NOT EXISTS ( SELECT ... FROM PURCHTABLE B WHERE ... ) AND NOT EXISTS ( SELECT ... FROM PURCHLINE C WHERE ... )
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
16.02.2011, 10:30 | #16 |
Участник
|
|
|
16.02.2011, 10:34 | #17 |
Участник
|
Да. Раз нельзя в Акс сделать второй вариант, то каким образом сделать выборку (((((
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
16.02.2011, 10:46 | #18 |
Участник
|
|
|
16.02.2011, 10:56 | #19 |
Участник
|
Либо через временную таблицу - собрать в нее RecId тех записей, которые не должны быть из таблиц RContractTable, PurchTable, PurchLine и т.д. И эту временную таблицу подцепить уже через один Not Exists.
|
|
16.02.2011, 12:44 | #20 |
Участник
|
Цитата:
По моему нет, там ошибку какую то выдает
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
Теги |
exists, query |
|
|