|
Пользовательские запросы
|
|||
---|---|---|---|
#18+
Не смог разобраться с созданием пользовательских запросов. В документации Cache примеров реализации запроса нету (или не нашёл). Если кто-нибудь сталкивался с созданием запросов, поделитесь, пожалуйста, исходным кодом. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2005, 16:13 |
|
Пользовательские запросы
|
|||
---|---|---|---|
#18+
Ты про запросы, текст которыx формируется "на клиенте" в зависимости от того, что указал юзверь ? Тогда, к примеру, так: /// в любом классе сделай следующий метод: ================== begin ================== classmethod getAnyData(tableName as %String, fieldList as %String="", topRowsQty as %Integer=0, whereCond as %String="", ordbyList as %String="") { // системный класс %ResultSet даёт возможность достучаться до запросов, которые ты либо заранее сделал в базе, либо (как сейчас) // которые "делает" пользователь; документация по этому классу здесь: // http://127.0.0.1:1972/apps/documatic затем войти в %Library и там найти %ResultSet s qrAnyData=##class(%ResultSet).%New("%DynamicQuery:SQL") // начинаем наращивать select-выражение тем, что получено "с клиента": s sqlExpr="select "_$Case(topRowsQty>0, 1:"top "_topRowsQty, :"")_$Case(fieldList="", 1:"*", :fieldList) s sqlExpr=sqlExpr_" from "_tableName_" " s sqlExpr=sqlExpr_$Case(whereCond="", 1:"", :" where "_whereCond) s sqlExpr=sqlExpr_$Case(ordbyList="", 1:"", :" order by "_ordbyList) // результат: sqlExpr = "select top 30 ID,tabNomer,Name,address,phone,INN from SomeTable where address %startswith 'МОСК%' order by Name,INN" etc. d qrAnyData.Prepare( sqlExpr ) // надо делать, если запрос заранее неизвестен, т.е. его нет в БД d qrAnyData.Execute() // что-то типа выхода на первую строку результата // Обязательно добавь команду, задающую режим обработки результатов запроса перед передачей "на клиента": иначе не будут работать преобразования LogicalToDisplay для числовых полей и "НА КЛИЕНТЕ" числа будут не выровненными (я с этим столкнулся): s qrAnyData.RuntimeMode=2 // чем обрабатывать результат - личное дело каждого, но чтобы проверить его в терминале, // можно вернуть список значений во всех полях с каким-нить разделителем (например, CHR(9)) s result="" // результат: наращиваемый список значений всех полей s delimeter=$C(9) // разделитель возвращаемых значений (например) = chr(1) while qrAnyData.Next() { for xColIdx=1:1:qrAnyData.GetColumnCount() { s result=result_qrAnyData.GetData(xColIdx)_delimeter } s result=result_$C(13)_$C(10) // добавляем для наглядности CR/LF } q result } ===================== end ================== ЗЫ-1. Я этот текст проверил запросе с обычным условием (отработал Ok) и на "заковыристом": отобрать строки по условию "поле Name содержит двойные кавычки", т.е. на таком: select * from peopleList where $find(Name,'"')>0 В терминале такой запрос надо давать так: w ##class(someClass).getAnyRows("peopleList","*",0,"$find(name, '""')>0") (отработал также нормально) ЗЫ-2. Не хочешь держать в классе -- можешь сделать в отдельном .mac-файле, тогда так: getAnyRows(tableName, fieldList="", topRowsQty=0, whereCond="", ordbyList="") PUBLIC {...(далее по тексту, см. ниже)... } вызов этой утилиты в Терминале (пусть она будет в файле "yourfile.mac"): w $$getAnyRows^yourfile(..... параметры....) Только я не знаю, как обращаться к такой утилите "с клиента". ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2005, 19:01 |
|
Пользовательские запросы
|
|||
---|---|---|---|
#18+
Имеются в виду запросы классов не на основе SQL. User-Written Class Queries Высылаю Вам небольшой документ на эту тему. Обратитесь к консультанту InterSystems, который работает с Вашей организацией. Он пришлет Вам дополнительные примеры. Вадим ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2005, 19:31 |
|
|
start [/forum/topic.php?fid=39&msg=33183107&tid=1559708]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
190ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 247ms |
total: | 541ms |
0 / 0 |