Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 раз |
|
Вернуться к началу |
|
|
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 - вычислять отдельно идентификатор параметра (список идентификаторов), с чего мы и начали. |
|
Вернуться к началу |
|
|
AllexL
Зарегистрирован: 10.03.2005 Сообщения: 434 Откуда: Donetsk
|
Добавлено: Пн Июл 16, 2012 8:17 am Заголовок сообщения: |
|
|
Юров Ю.С. писал(а): |
И не только лишний джоин, там ещё и фулскан таблицы _PRM_NAMES ...
Но если учитывать стоимость (cost) этих джоинов |
И чем тут страшен Фулскан? на этих 12.5 записях? |
|
Вернуться к началу |
|
|
Юров Ю.С.
Зарегистрирован: 11.03.2005 Сообщения: 383 Откуда: Павлоград
|
Добавлено: Пн Июл 16, 2012 3:09 pm Заголовок сообщения: |
|
|
AllexL писал(а): | И чем тут страшен Фулскан? на этих 12.5 записях? |
И я про то же. Слова страшные, а на времени выполнения не сказываются. |
|
Вернуться к началу |
|
|
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 |
|
|
Вернуться к началу |
|
|
olimp Site Admin
Зарегистрирован: 10.03.2005 Сообщения: 2661
|
Добавлено: Ср Июл 18, 2012 12:30 pm Заголовок сообщения: Re: Как определить ID параметра по наименованию |
|
|
Oleksandr писал(а): | Как лучше всего определить ID параметра объекта учета по наименованию? Причем какой именно объект учета не известно. Известен только его тип. |
Если ОУ не известен, то получишь набор значений |
|
Вернуться к началу |
|
|
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
|
|
Вернуться к началу |
|
|
|