Тема: Работа с динамическими выборками

Изучаю динамические выборки. Появились вопросы:

1. tdmQueryConditionAttribute - как правильно перечислять название атрибута и его значение (запятые, скобки и т.п.)? Достаточно для примера куска кода.

2. Как использовать неравенства типа <= '14.03.2012' для tdmQueryConditionCreateTime, например?

Вообще, хорошо бы взглянуть на реально рабочий пример СЛОЖНОЙ динамической выборки.

Re: Работа с динамическими выборками

Пример:

  Set q = ThisApplication.CreateQuery
    q.AddCondition 2, "OBJECT_D_JOURNAL" ' Тип объекта
    q.AddCondition 4, "STATUS_D_JOURNALS_WORK" ' Статус
    q.AddCondition 1, vJournalType,"ATTR_D_JOURNAL_NAME" ' атрибут
    q.AddCondition 10, ">='01.01.2011' And <='31.12.2011'" ' Дата создания

Действительно сложных динамических выборок небывает, так как через код невозможно задать отношения "Входит в состав", "Имеет в составе" и т.д.

(изменено: DeTrah, 18 мая 2012г. 07:21:54)

Re: Работа с динамическими выборками

И еще вопрос: как задать условие "или"/"и" для узлов классификатора?
Такой вариант не работает:

Dim hor, udovl, neud
norm= "Нормальный": vys = "Высокий"
q.AddCondition 1,  norm Or vys, "ATTR_SHED_PRIOR_EX"
Вылазит ошибка: несоответствие типа String: ...

И такой не работает:
q.AddCondition 1, "NODE_PRIOR_HIGH" Or "NODE_PRIOR_NORMAL", "ATTR_SHED_PRIOR_EX"

А вот такой без Or работал нормально:
q.AddCondition 1,  "Высокий", "ATTR_SHED_PRIOR_EX"

(изменено: McZag, 18 мая 2012г. 08:03:08)

Re: Работа с динамическими выборками

DeTrah пишет:

И еще вопрос: как задать условие "или"/"и" для узлов классификатора?
Такой вариант не работает:

Dim hor, udovl, neud
norm= "Нормальный": vys = "Высокий"
q.AddCondition 1,  norm Or vys, "ATTR_SHED_PRIOR_EX"
Вылазит ошибка: несоответствие типа String: ...

И такой не работает:
q.AddCondition 1, "NODE_PRIOR_HIGH" Or "NODE_PRIOR_NORMAL", "ATTR_SHED_PRIOR_EX"

А вот такой без Or работал нормально:
q.AddCondition 1,  "Высокий", "ATTR_SHED_PRIOR_EX"

norm Or vys
В данном случае результатом операции является булевый тип. Т.е. обе ваши строки, если они не пустые, приводятся к значению истина и затем над ними производится операция OR. Этот булевый результат вы пытаетесь передать в функцию, которая ждет для данного аргумента строку

"NODE_PRIOR_HIGH" Or "NODE_PRIOR_NORMAL"
То же самое, вы используете булевую операцию над строками

Чтобы задать условие OR или AND в строке, заключите эти операторы в строку.
Например,
norm & " Or " & vys
или
"NODE_PRIOR_HIGH" & " Or " & "NODE_PRIOR_NORMAL"

Есть еще одна немаловажная деталь, которую вам наверняка придется использовать. Когда вы формируете подобную строку, необходимо учитывать наличие кавычек в выражении. Например, если вы должны сформировать строку которая записывается как
Условие_1 Оператор "Условие_2" (второе условие должно быть заключено в кавычки), то такую строку необходимо сформировать в соответствии с синтаксисом языка.
Например, чтобы в бейсике создать одну двойную кавычку в строке, нужно записать подряд четыре кавычки """". Крайние будут обрамлять строку, а две внутренние будут преобразованы в одну кавычку.

Re: Работа с динамическими выборками

Полезная информация!
Спасибо!

Re: Работа с динамическими выборками

А подскажите пожалуйста такой момент - можно ли задать в динамической выборке свойство "Искать в составе"?

Re: Работа с динамическими выборками

Lilya пишет:

А подскажите пожалуйста такой момент - можно ли задать в динамической выборке свойство "Искать в составе"?

Напрямую нет возможности управлять свойствами связи

Re: Работа с динамическими выборками

McZag пишет:

Напрямую нет возможности управлять свойствами связи

А Как то добавить подобную возможность можно? Для статических выборок. Потому как там задается програмно почти все, а вот именно этой мелочи, которая гробит всю выборку, нет.

Re: Работа с динамическими выборками

Kirzaa пишет:

А Как то добавить подобную возможность можно? Для статических выборок. Потому как там задается програмно почти все, а вот именно этой мелочи, которая гробит всю выборку, нет.

Постараемся добавить к новой версии. Пока прямых программных способов управлять некоторыми свойствами выборок нет

Re: Работа с динамическими выборками

Lilya пишет:

А подскажите пожалуйста такой момент - можно ли задать в динамической выборке свойство "Искать в составе"?

Я немного подумал и написал такой код:

Set myQuery = ThisApplication.Queries("QUERY_MYQUERY")

queryCode = myQuery.Query

optionsByID = split (queryCode, " ")
optionsByID(2) = "1"
queryCode = Join (optionsByID)
ThisScript.SysAdminModeOn
myQuery.Query = queryCode

Попробуйте. Пожизненную совместимость гарантировать не могу, но на век TDMS 4.0 и следующей версии точно хватит

Re: Работа с динамическими выборками

McZag пишет:

...и следующей версии...

Да когда же она будет? совсем TDMS умирает...

Re: Работа с динамическими выборками

Shoorup пишет:

Да когда же она будет? совсем TDMS умирает...

Странная позиция, комментировать не буду - нет смысла. Новая версия выйдет в этом году.

Re: Работа с динамическими выборками

McZag пишет:

Я немного подумал и написал такой код:

Set myQuery = ThisApplication.Queries("QUERY_MYQUERY")

queryCode = myQuery.Query

optionsByID = split (queryCode, " ")
optionsByID(2) = "1"
queryCode = Join (optionsByID)
ThisScript.SysAdminModeOn
myQuery.Query = queryCode

Попробуйте. Пожизненную совместимость гарантировать не могу, но на век TDMS 4.0 и следующей версии точно хватит

Спасибо! работает  :)