02.03.2018, 14:31 | #1 |
Участник
|
переделать SQL-запрос в X++ Query
Как этот SQL-запрос переписать на X++ (Query, QueryBuildDataSource)?
X++: select _log.* from SysDataBaseLog _log inner join SqlDictionary _dic on _log.Table_ = _dic.TableID and (_log.Field % 65536) = _dic.FieldID where _log.Table_ = '50591' order by _log.Field Код: (_log.Field % 65536) = _dic.FieldID |
|
02.03.2018, 15:29 | #2 |
Участник
|
Какая версия АХ ?
В АХ 2012 в таблице SysDataBaseLog нет поля Field, зато для Array-полей в таблице SqlDictionary есть поле Array с индексом, возможно по нему и FieldID можно вычислить и Field из SysDataBaseLog. |
|
02.03.2018, 16:04 | #3 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: SuperStar88 (1). |
02.03.2018, 16:09 | #4 |
Участник
|
Версия AX 2009 UP5
а, прошу прощения, там не SysDataBaseLog, а своя таблица SysDataBaseLog_ХХХ Интересует, как можно через addRange или addLink связать вычисляемое поле с полем другой таблицы. То есть, берём значение поля одной таблицы, вычисляем остаток от деления на 65536 и результат сравниваем с полем другой таблицы. |
|
02.03.2018, 16:13 | #5 |
Участник
|
|
|
02.03.2018, 17:00 | #6 |
Участник
|
Я предложил несколько иной способ связи между таблицами, вместо вычисления остатка от деления в запросе, что сделать в Query мне кажется нельзя, можно попробовать сделать это на арифметических операциях, которые можно запихать в "сложный" Range. Тем более ваш запрос может задваивать(затраивать и т.д.) записи по Array-полям, т.к. в таблице SqlDictionary FieldId не является уникальным в рамках таблицы, уникальна только связка полей FieldId + Array.
Info: ID полей таблицы типа EDT массив (array elements) |
|
12.03.2018, 12:59 | #7 |
Дмитрий Ерин
|
Попробуйте "расширенный диапазон", должно отработать:
X++: qbdsDBLog = query.addDataSource(tablenum(DatabaseLog), "DBlog"); qbdsSQLDict = qbdsDBLog.addDataSource(tablenum(SqlDictionary), "SQLDict"); qbdsSQLDict.addLink(fieldnum(DatabaseLog, logTable), fieldnum(SqlDictionary, tabId)); qbdsSQLDict.addRange(fieldnum(SqlDictionary, RecId)).value("(SQLDict.fieldId == DBlog.logField mod 65536)"); |
|
|
|