Список форумов Акцент Акцент
официальный форум разработчика программы Акцент
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Как определить ID параметра по наименованию

 
Начать новую тему   Ответить на тему    Список форумов Акцент -> Акцент 7.0
Предыдущая тема :: Следующая тема  
Автор Сообщение
Oleksandr
Гость





СообщениеДобавлено: Чт Июл 12, 2012 8:59 pm    Заголовок сообщения: Как определить ID параметра по наименованию Ответить с цитатой

Как лучше всего определить ID параметра объекта учета по наименованию? Причем какой именно объект учета не известно. Известен только его тип.
Вернуться к началу
Юров Ю.С.



Зарегистрирован: 11.03.2005
Сообщения: 383
Откуда: Павлоград

СообщениеДобавлено: Пт Июл 13, 2012 7:15 am    Заголовок сообщения: Ответить с цитатой

Код:
Set ent=workarea.EmptyElement(acEntity)
ent.Type=1003
If ent.Params.Exists("Наименование параметра") Then _
  ID параметра = ent.Params.Item("Наименование параметра").ID


Только зачем вам знать его ID, если в SQL запросе легко можно обратиться по названию параметра?
Код:
    "       left join ENT_PARAMS ep on ENTITIES.ENT_ID=ep.ENT_ID)"&_
    "       left join ENT_PARAM_NAMES pn on (pn.PRM_ID=ep.PRM_ID and pn.PRM_NAME='Наименование параметра')"&_


прим.
условие связи с константой
on (pn.PRM_ID=... and pn.PRM_NAME='Наименование параметра')
не работает на DAO 3.5 (6 версия Акцент-Dao с базой данных Access-97), на всём остальном работает.


Последний раз редактировалось: Юров Ю.С. (Сб Июл 14, 2012 7:25 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Oleksandr
Гость





СообщениеДобавлено: Пт Июл 13, 2012 2:30 pm    Заголовок сообщения: Ответить с цитатой

Юров Ю.С. писал(а):
Код:
Set ent=workarea.EmptyElement(acEntity)
ent.Type=1003
If ent.Params.Exists("Наименование параметра") Then _
  ID параметра = ent.Params.Item("Наименование параметра").ID


Только зачем вам знать его ID, если в SQL запросе легко можно обратиться по названию параметра?
Код:
    "       left join ENT_PARAMS ep on ENTITIES.ENT_ID=ep.ENT_ID)"&_
    "       left join ENT_PARAM_NAMES pn on (pn.PRM_ID=ep.PRM_ID and pn.PRM_NAME='Наименование параметра')"&_


прим.
условие связи с end
on (pn.PRM_ID=... and pn.PRM_NAME='Наименование параметра')
не работает на DAO 3.5 (6 версия Акцент-Dao с базой данных Access-97), на всём остальном работает.

Спасибо за развернутый ответ. EmptyElement - да, это то что нужно. Я это свойство "недоискал". А вообще, я и сделал в запросе, но это ведь дополнительные 2 джоина, а так ID вставил и дело в шляпе. Только вместо left в моём случае нужно inner
Вернуться к началу
Юров Ю.С.



Зарегистрирован: 11.03.2005
Сообщения: 383
Откуда: Павлоград

СообщениеДобавлено: Сб Июл 14, 2012 7:45 pm    Заголовок сообщения: Ответить с цитатой

Oleksandr писал(а):
А вообще, я и сделал в запросе, но это ведь дополнительные 2 джоина, а так ID вставил и дело в шляпе.

И не только лишний джоин, там ещё и фулскан таблицы _PRM_NAMES ...
Но если учитывать стоимость (cost) этих джоинов, то наверно лучше отдать предпочтение варианту с лучшей читаемостью кода, т.е кому как нравится :)

Oleksandr писал(а):
Только вместо left в моём случае нужно inner

Справедливое замечание. Однозначно вторая связь должна быть inner, у меня ошибка.
А если ДАО-версия, то двойная ошибка: left + inner DAO не поймёт, только два раза inner, а если нужно left - вычислять отдельно идентификатор параметра (список идентификаторов), с чего мы и начали.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
AllexL



Зарегистрирован: 10.03.2005
Сообщения: 434
Откуда: Donetsk

СообщениеДобавлено: Пн Июл 16, 2012 8:17 am    Заголовок сообщения: Ответить с цитатой

Юров Ю.С. писал(а):

И не только лишний джоин, там ещё и фулскан таблицы _PRM_NAMES ...
Но если учитывать стоимость (cost) этих джоинов

И чем тут страшен Фулскан? на этих 12.5 записях? Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Юров Ю.С.



Зарегистрирован: 11.03.2005
Сообщения: 383
Откуда: Павлоград

СообщениеДобавлено: Пн Июл 16, 2012 3:09 pm    Заголовок сообщения: Ответить с цитатой

AllexL писал(а):
И чем тут страшен Фулскан? на этих 12.5 записях? Smile

И я про то же. Слова страшные, а на времени выполнения не сказываются.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
APOSTROFF



Зарегистрирован: 07.12.2005
Сообщения: 13

СообщениеДобавлено: Вт Июл 17, 2012 7:37 pm    Заголовок сообщения: Ответить с цитатой

Юров Ю.С. писал(а):

Код:
   
    "       left join ENT_PARAMS ep on ENTITIES.ENT_ID=ep.ENT_ID)"&_
    "       left join ENT_PARAM_NAMES pn on (pn.PRM_ID=ep.PRM_ID and pn.PRM_NAME='Наименование параметра')"&_



Я бы добавил еще проверку на NODE_TYPE, так как при изменении типа объекта
Код:
   
  left join ENT_PARAM_NAMES pn on (pn.PRM_ID=ep.PRM_ID and pn.PRM_NAME='Наименование параметра')

будет давать две записи с разными ENT_PARAM_NAMES.PRM_ID
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Oleksandr
Гость





СообщениеДобавлено: Ср Июл 18, 2012 10:47 am    Заголовок сообщения: Ответить с цитатой

APOSTROFF писал(а):

Я бы добавил еще проверку на NODE_TYPE, так как при изменении типа объекта

Да
Вернуться к началу
olimp
Site Admin


Зарегистрирован: 10.03.2005
Сообщения: 2661

СообщениеДобавлено: Ср Июл 18, 2012 12:27 pm    Заголовок сообщения: Re: Как определить ID параметра по наименованию Ответить с цитатой

Oleksandr писал(а):
Как лучше всего определить ID параметра объекта учета по наименованию? Причем какой именно объект учета не известно. Известен только его тип.


Код:
MsgBox Ent.Params(prmName).ID
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
olimp
Site Admin


Зарегистрирован: 10.03.2005
Сообщения: 2661

СообщениеДобавлено: Ср Июл 18, 2012 12:30 pm    Заголовок сообщения: Re: Как определить ID параметра по наименованию Ответить с цитатой

Oleksandr писал(а):
Как лучше всего определить ID параметра объекта учета по наименованию? Причем какой именно объект учета не известно. Известен только его тип.


Если ОУ не известен, то получишь набор значений
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Oleksandr
Гость





СообщениеДобавлено: Чт Июл 19, 2012 1:48 am    Заголовок сообщения: Ответить с цитатой

Интересное замечание!

код:
Set ent=workarea.EmptyElement(acEntity)
ent.Type=0
If ent.Params.Exists("Имя параметра") Then par0 = ent.Params.Item("Имя параметра").ID
ent.Type=1
If ent.Params.Exists("Имя параметра") Then par1 = ent.Params.Item("Имя параметра").ID

будет работать некорректно.

нужно делать так:
Set ent=workarea.EmptyElement(acEntity)
ent.Type=0
If ent.Params.Exists("Имя параметра") Then par0 = ent.Params.Item("Имя параметра").ID
ent.reload
ent.Type=1
If ent.Params.Exists("Имя параметра") Then par1 = ent.Params.Item("Имя параметра").ID

Smile
Вернуться к началу
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Акцент -> Акцент 7.0 Часовой пояс: GMT + 2
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group