|
|
#1 |
|
Участник
|
Как работает NotExistJoin
Есть две таблицы MainTable и LineTable, связаны по полю id1;
Нужно вывести на форму все записи таблицы MainTable, для которых не существует записей в таблице LineTable; Пробую следующим образом: QueryBuildDataSource qbds1,qbds2; ; Query q = new Query (); qbds = q.addDataSource(tablenum(MainTable)); qbds1 = qbds.addDataSource(tablenum(LineTable)); qbds1.joinMode(JoinMode::NOEXISTSJOIN); qbds1.addLink(fieldnum(MainTable ,id1),fieldnum(LineTable,id1)); QueryRun qr = new QueryRun (q); MainTable_ds.query(q); MainTable_ds.research(); что я неправильно делаю? |
|
|
|
|
#2 |
|
Banned
|
Почти все
Во-первых, возникает вопрос, в каком методе формы/источника данных вы это делаете. По науке код размещают в методе init() источника данных после super(). Тогда Query q = new Query (); qbds = q.addDataSource(tablenum(MainTable)); не годится: форма не привязана к новому источнику данных. Надо занести MainTable в источник данных формы, тогда пройдет такая конструкция: q = this.query(); qbds = q.dataSourceTable(tablenum(MainTable)). Дальше верно, но QueryRun qr = new QueryRun (q); MainTable_ds.query(q); MainTable_ds.research(); лишено смысла. Достаточно MainTable_ds.query(q). |
|
|
|
|
#3 |
|
Участник
|
Делаю, учитывая поправки .... в методе датасоурса init()
QueryBuildDataSource qbds1,qbds2; ; super(); Query q = this.query(); qbds = q.dataSourceTable(tablenum(MainTable)); qbds1 = qbds.addDataSource(tablenum(LineTable)); qbds1.joinMode(JoinMode::NOEXISTSJOIN); qbds1.addLink(fieldnum(MainTable ,id1),fieldnum(LineTable,id1)); MainTable_ds.query(q); Опять не работает ?
|
|
|
|
|
#4 |
|
Banned
|
Заинтриговали... Но увы, все работает на примере известной нам всем формы:
PHP код:
|
|
|
|
|
#5 |
|
Banned
|
А теперь еще короче:
PHP код:
|
|
|
|
|
#6 |
|
Участник
|
все, убедили... работает
|
|
|