powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / как выбрать данные???
4 сообщений из 29, страница 2 из 2
как выбрать данные???
    #36103857
NMN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NMN
Гость
Ну вообще-то вот так должно быть.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
ClassMethod a(className As %String, colName As %String, val As %String) As %String
{
	s:$g(val)="" val="36,2"
	s className="hndb.balls"
	s colName="bFirm"
	s tDisplay=""
	f i= 1 : 1 :$l(val,",") {
		Set o="##Class("_className_").%OpenId("_$p(val,",",i)_")"
		Set @("obj="_o) ;открываем экземпляр класса
		;w obj,!
		Set @("r=obj."_colName) ; вычитываем значение параметра
		Set tDisplay=tDisplay_$Select(tDisplay'="":",", 1 :"")_ r
		Do obj.%Close() ; закрываем объект
	}
	q tDisplay
}
...
Рейтинг: 0 / 0
как выбрать данные???
    #36104419
Socratdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно еще через SQL.
Работать будет значительно быстрее!

Вот мой вариант со всеми нужными проверками:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
ClassMethod a(className As %String, colName As %String, idList As %String) As %String 
{ 
	; Получаем имя таблицы по имени класса
	s table = $$$comClassKeyGet(className,$$$cCLASSsqlqualifiednameQ)
	; Проверяем существование поля
	s fieldExist = $D($$$EXTSQLCOL($$$rEXT,className,colName))> 0 
	if $$TableExists^%apiSQL(table)&&fieldExist {
		s rs = ##class(%ResultSet).%New()
		; Выборка уникальных значений
		s sc = rs.Prepare("SELECT LIST(DISTINCT "_colName_") AS result FROM "_table_" WHERE %ID IN ("_idList_")")
		q:'sc ""
		s sc = rs.Execute()
		q:'sc ""
		q:rs.Next() rs.Data("result")
	}
	q ""
}
Результат еще можно отсортировать.
...
Рейтинг: 0 / 0
как выбрать данные???
    #36104637
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NMNНу вообще-то вот так должно быть.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
ClassMethod a(className As %String, colName As %String, val As %String) As %String
{
	s:$g(val)="" val="36,2"
	s className="hndb.balls"
	s colName="bFirm"
	s tDisplay=""
	f i= 1 : 1 :$l(val,",") {
		Set o="##Class("_className_").%OpenId("_$p(val,",",i)_")"
		Set @("obj="_o) ;открываем экземпляр класса
		;w obj,!
		Set @("r=obj."_colName) ; вычитываем значение параметра
		Set tDisplay=tDisplay_$Select(tDisplay'="":",", 1 :"")_ r
		Do obj.%Close() ; закрываем объект
	}
	q tDisplay
}


этот вариант будет работать если указать в ClassMethod [ ProcedureBlock = 0 ], иначе выдает ошибку <UNdefine> на переменную r
...
Рейтинг: 0 / 0
как выбрать данные???
    #36180542
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007DAiMorкстати по словам "не работает" сложно определить ошибку
пробуйте так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
ClassMethod a(className As %String, colName As %String, val As %String) As %String
{
	s:$g(val)="" val="36,2"
	s className="hndb.balls"
	s colName="bFirm"
	s tDisplay=""
	f i= 1 : 1 :$l(val,",") {
		Set o=$zobjclassmethod(className,"%OpenId",$p(val,",",i))
		s r=$zobjproperty(o,colName) ; вычитываем значение свойства
		s tDisplay=tDisplay_$s(tDisplay'="":",", 1 :"")_r
		; Do o.%Close() ; закрываем объект  - ненужно		
	}
	q tDisplay
}


PS использовать разделители в строках думаю не лучший способ версиях выше 5.0
есть уже $LISTFROMSTRING ($LFS) и $LISTTOSTRING ($LTS)
и уже ходить по листбилду, или лучше сразу такие строки в листбилде собирать, и нет необходимости помнить разделители
_________________________________
Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST

спасибо заработало: как раз то что нужно !!!
на этапе формирования забыл какие бывают функции $ZOBJXXX (блин, а ведь знал)
формирую через разделитель для того чтобы JS мог работать с данными

на сервере $LB(""_1_"","М это что-то!"), на клиенте javascript:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
   function $LG=(list,li) { //разбор Кашевого списка из строковых переменных
     if (!list) return ""; if (!li) li= 1 ; if (li< 1 ) return ""; 
     var strlen=list.length; var ci= 1 ; var item="";
     for (var pos= 0 ;pos<strlen;){ 
       var len=list.charCodeAt(pos); //длина елемента
       if (list.charCodeAt(pos+ 1 )!= 1 ) { //ошибка, только текстовый формат
        alert("list type error on "+ci+" element");
        break;
       } 
       if (ci==li){item=list.substring(pos+ 2 ,pos+len); break;}
       pos+=len; ci++; 
      }
     return item;
   }
...
Рейтинг: 0 / 0
4 сообщений из 29, страница 2 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / как выбрать данные???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]