Почти все
Во-первых, возникает вопрос, в каком методе формы/источника данных вы это делаете.
По науке код размещают в методе 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).