16.09.2003, 16:34 | #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(); что я неправильно делаю? |
|
16.09.2003, 17:06 | #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). |
|
16.09.2003, 17:29 | #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); Опять не работает ? |
|
16.09.2003, 17:36 | #4 |
Banned
|
Заинтриговали... Но увы, все работает на примере известной нам всем формы:
PHP код:
|
|
16.09.2003, 17:43 | #5 |
Banned
|
А теперь еще короче:
PHP код:
|
|
16.09.2003, 18:17 | #6 |
Участник
|
все, убедили... работает
|
|