28.05.2020, 10:45 | #1 |
Участник
|
Вычисление длины string-поля в запросе
Здравствуй.
Можно ли в запросе в обозревателе таблицы использовать функцию типа strLen для определения количества символов в поле типа String? Ну что-то типа select strLen(Field1) from Table1 |
|
28.05.2020, 11:11 | #2 |
Участник
|
Нельзя
Запрос напрямую выполняется в MS SQL. С "переводом", конечно, из синтаксиса X++ в синтаксис MS SQL. Но "перевода" встроенных функций X++ в синтаксис MS SQL не существует. Поэтому такая операция запрещена
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
28.05.2020, 11:44 | #3 |
Участник
|
сформулируйте вопрос полностью, ответ станет очевидным.
SQL - это язык запроса данных. Этот язык оперирует данными и не заботится о внешнем виде полученных данных. Обозреватель таблиц - это форма в Аксапте. Как и все формы/отчеты в Аксапте эта форма заботится о представлении данных и о взаимодействии с полученными данными (фильтрация, сортировка, выравнивание, форматирование и т.п.) мало того, почти все инструменты Аксапты прежде всего заточены на представление и взаимодействие с пользователем. В том числе "запросы". (обратите внимание что в Аксапте есть запросы select и query - они в разной степени заточены на взаимодействие с пользователем) Именно поэтому select/query в Аксапте в корне отличаются от запросов в SQL Запросы в SQL готовят данные создавая новую сущность. SQL не волнует как эту сущность потом будут представлять пользователю. Запросы в Аксапте раскладывают полученные даные по заранее подготовленным табличным переменных, в которых помимо способа хранения определены форматы и способ представления. в этом принципиальная разница. поэтому в Аксапту не завезли произвольных выражений вместо полей. (можно было... но в свое время Дамгаард-разработчики не успели/не смогли, а теперь Майкрософт-разработчики занимаются всякой фигней лишь бы не лазить в ядро работы с базой) ============== в Аксапте можно воспользоваться классами Statement и ResultSet, чтобы выполнить произвольный SQL-запрос. в коде вы получите обычный SQL resultSet. Но вам придется написать дополнительный код чтобы отобразить этот resultSet пользователю. я видел на проектах такие доработки. но в стандартной Аксапте нет готовых инструментов чтобы отобразить произвольный resultSet. нужно программировать. |
|
28.05.2020, 11:56 | #4 |
Участник
|
Цитата:
Сообщение от mazzy
==============
в Аксапте можно воспользоваться классами Statement и ResultSet, чтобы выполнить произвольный SQL-запрос. в коде вы получите обычный SQL resultSet. Но вам придется написать дополнительный код чтобы отобразить этот resultSet пользователю. я видел на проектах такие доработки. но в стандартной Аксапте нет готовых инструментов чтобы отобразить произвольный resultSet. нужно программировать. Мне не для пользователя надо, а для разработчика. Просто немного странно, что в аксапте не реализовали работу с запросами, как в редакторе запросов MS SQL Server Management Studio. Вроде и акспата и студия майкросовт?!? И как я понял в аксапте нет даже аналога редактора запросов, как вариант, чтобы посмотреть результаты select-запроса советовали 'рисовать' job. |
|
28.05.2020, 13:06 | #5 |
Участник
|
Цитата:
Сообщение от Metrofun
Мне не для пользователя надо, а для разработчика.
Просто немного странно, что в аксапте не реализовали работу с запросами, как в редакторе запросов MS SQL Server Management Studio. Вроде и акспата и студия майкросовт?!? И как я понял в аксапте нет даже аналога редактора запросов, как вариант, чтобы посмотреть результаты select-запроса советовали 'рисовать' job. "в стандартной аксапте не реализовали работу с запросами" да, в стандартной не реализовали. "в стандартной аксапте нет даже аналога редактора запросов" в стандартной нет редактора запросов select. в стандартной есть редактор запросов query. но более контруктивным являлись бы вопросы: 1. как вы, люди добрые, редактируете запросы? 2. как вы, люди добрые, определяете длину строкового поля? на первый вопрос вам бы ответили про tabax, sidax и sysTableBrowser, xTableBrowser и о других проектах на эту тему вам бы обязательно рассказали про разницу между SQL таблицами, временными таблицами аксапты и временными талицами MS SQL на второй вопрос вас бы спросили про кеширование на вашей таблице и рассказали бы о том, что в режиме EntireTable запрос на SQL может вообще не отправляться. в общем, Аксапта - это обычный такой ORM со своими тараканами. Типа Hibernate ранних версий. у ORM есть свои достоинства и есть свои недостатки. Также конструктивным был бы вопрос что Майкрософт сделал чтобы развить ORM, запоженный в Аксапту? Вам рассказали бы грустную историю про Query, View, DataSet, про несчастный DataEnity и про умертвия DataContract https://www.youtube.com/watch?v=IQKMxyc8QcY именно так. можно дать совет? не делайте select-запросы. работайте сразу с query. Вам же намного проще будет сделать следующий шаг и дать разработанный вами функционал для пользователя. Создайте query в АОТ мышкой и заинджектите его в код. В коде только меняйте необходимые фильтры, сортировки и тп. X++: Query q = new Query(querystr(mySuperQueryInAOT)); MyTable myTable; ; SysQuery::findOrCreateRange(q.datasource(myTable.tableId), fieldnum(MyTable, MyField)).value('!Value*'); Последний раз редактировалось mazzy; 28.05.2020 в 13:12. |
|
28.05.2020, 19:59 | #6 |
Участник
|
Цитата:
Хотя в стандарте этого нет, но тот же DevTools для DAX2012 содержит механизмы просмотра данных по Query из AOT. На просмотрах инета есть утилитки, позволяющие вписать в код вызов просмотра данных Query в момент отладки. |
|
28.05.2020, 21:09 | #7 |
Administrator
|
Цитата:
Цитата:
Ну и когда начинаешь "брать барьер" - начинаешь понимать, почему разработчики АХ этого не сделали. И далеко не всегда даже получается и "взять барьер", даже если взялся.
__________________
Возможно сделать все. Вопрос времени |
|