Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
Продублирую вопрос сюда, чтобы не было лишнего офтопика В одной из тем упомянуто, что можно не только с %Library.ResultSet делать динамические запросы. А можно какой-нибудь пример, а то по документации ничего не понял (да ее и мало там на эту тему). И чем лучше %ResultSet.SQL чем %Library.ResultSet? Мне показалось, что он выгружает сразу все строки запроса в глобал, и за счет отказа от вызова .Next получаем прирост скорости? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2010, 23:50 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
Блок А.Н., Код: plaintext 1. 2. 3. 4. 5. 6. 7. Про то, "чем лучше", не знаю... но на паре тестов у меня работает значительно быстрее. Как устроен "внутри" тоже не подскажу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 06:10 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
Блок А.Н., из того же топика: KSergio %ResultSet.SQL быстрее %Library.ResultSet (особенно при переборе большого числа записей результата) начиная с версии 5.2. Но абсолютных чудес не бывает, для всех динамических запросов при первом выполнении необходима компиляция запроса, т.е. накладные расходы. Поэтому стоит динамические запросы использовать только тогда, когда это необходимо, и не забывать про передачу параметров , чтобы для плодить серию запросов ... Из документации класса %ResultSet.SQL метод %Prepare() ... Для %ResultSet.SQL это означает получение sql текста запроса в первом параметре и поиске реализации запроса в кэше запросов ... Для %ResultSet.SQL, аргументами являются: 1. sqlStatement (byref) - Выражение SQL Select, также массив или строка с разделителем $$$NL ; 2. returnError (byref) - если возникнет ошибка, в нем будет объект %SYSTEM.Error... Если ошибок не произойдет, в returnError будет $$$NULLOREF; 3. %importPackages - $list-список имен пакетов, используемых для разрешения любых неопределенных имен в выражении SELECT. Например, для SELECT %ID from MyTable, если %importPackages содержит "Sample", тогда схема, связанная с пакетом Sample будет использована для определения MyTable. 4.%args - значения параметров '?', содержащихся в SQL выражении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 11:02 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
Вот это то и непонятно - из того топика брал пример - переделывал запрос на параметрический. А при каждом запуске формировался новый RS.CacheSqlXXXX. А вот то что обычном %ResultSet приходиться время от времени чистить запросы $system.SQL.Purge(), если например запрос не изменился а в таблицу индексы понадобавил, сталкивался не раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 11:17 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
А что за "также массив или строка с разделителем $$$NL" кто знает? Пока ни нашел ничего из примеров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 11:24 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
я делал небольшие тесты, по SQL запросам на Cache 5.0.21 и Cache 2010 цифр точных уже не помню, но по скорости расположились они так для Cache2010 1. &sql 2. %ResultSet.SQL 3. %Library.ResultSet а отличие в скорости от 5.0, если не ошибаюсь то разница была почти в 10 раз отличие %ResultSet.SQL от %Library.ResultSet в том что, при подготовке запроса, генерируется отдельный класс, а не программа как для %Library.ResultSet, в этом классе сразу описаны поля которые должны появится на выходе т.е. для запроса вида Код: plaintext Код: plaintext 1. 2. и последнее класс %Library.ResultSet устарел, и полагаю касатаельного этого класса изменений уже не будет, только если исправление ошибок а вот %ResultSet.SQL, будет продолжать усовершенствоваться _________________________________ Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 11:33 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
doublefintА что за "также массив или строка с разделителем $$$NL" кто знает? Пока ни нашел ничего из примеров. Наверное нечто типа этого Код: plaintext 1. 2. 3. 4. 5. 6. Типа читабельнее смотрится. А куда аргументы для запроса совать? В каком виде? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 20:39 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
Прикольно :-) буду попробовать :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 21:02 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
А как запрос класса оттуда запустить? Можно или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 21:26 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. Код: plaintext 1. Блок А.Н. А как запрос класса оттуда запустить? Можно или нет? Судя по документации для таких запросов остается старый добрый %Library.ResultSet _________________________________ Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 22:13 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
DAiMor Код: plaintext 1. Точнее "возврата каретки"+"перевода строки". Т.е. можно в текстовом файле написать запрос, а потом его преспокойненько прочитать и выполнить. DAiMor Код: plaintext 1. Т.е. начиная с 4-го... А сколько максимально штук? А то бывало ограничение типа до 9-ти аргументов... Или что-то возле того. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 23:34 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
в метод нельзя передавать больше 254 параметров, 3 уже есть значит остается еще 251, думаю достаточно _________________________________ Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2010, 00:25 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.А как запрос класса оттуда запустить? Можно или нет? В документации на предка ResultSet.SQL - IResultSet метод %Prepare первым аргументом также может быть <className>:<queryName> или <className>:<methodName>. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2010, 02:34 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
Хм, че-то не получается Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2010, 07:31 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
может так попробовать Код: plaintext дома cache не стоит, поэтому с именем класса могу ошибиться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2010, 13:46 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
Да, так работает Но по исходникам класса видно, что просто вызывается %Library.ResultSet Правда у меня дома всего лишь 2007, может в поздних версих иначе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2010, 15:09 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
Есть работающий запрос (%ResultSet.SQL). Как получить метаданные запроса (наименование и тип полей)? Пробовал так: Код: plaintext 1. 2. Код: plaintext В объекте %ResultSet.SQL есть свойство %Metadata, похоже, в нем лежит сериализованный список (%Collection.ListOfObj) объектов %ResultSet.MD.Column. Но как его десериализовать? $zv: Cache for Windows (x86-32) 2008.2 DS (Build 615) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2010, 01:01 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
Ну, вы то %Prepare не выполнили еще, так что там ничего нет s sql="Select * From Test" s md=##class(%ResultSet.SQL).%PrepareMetaData(sql,.err,"User") А далее %Metadata - это список У меня получилось, что в lg(%Metadata,1) - количество колонок а далее по 10 записей на колонку, среди этих 10ти первым идет имя поля то есть 2 12 22 и т.д. Но не уверен, что от версии к версии каше это не меняется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2010, 06:20 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
Неправильно написал код Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2010, 06:22 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
Эх Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2010, 10:23 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
И в списке приватных переменных действительно не определена переменная tObjects, зато есть переменная tOjects Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2010, 10:33 |
|
||
|
%ResultSet.SQL
|
|||
|---|---|---|---|
|
#18+
Попробуйте примеры из документации , например так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2010, 10:24 |
|
||
|
|

start [/forum/topic.php?fid=39&msg=36508473&tid=1558169]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
24ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 316ms |

| 0 / 0 |
