Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Ayrat
Зарегистрирован: 10.09.2012 Сообщения: 11
|
Добавлено: Пн 22 Окт 2012 10:45 Заголовок сообщения: LayerID |
|
|
Хочу написать скрипт на уровне БД, который автоматически выводит в ранее созданную мною SQL таблицу информацию по удаленным объектом, аналогичные данным из таблицы INGEO_LOGS. Проблема в том, что я не могу получить ID слоя, в котором был объект. Код:
sub dbMapObjects_DeleteComplete(aMapObjectID, aMy)
dim sql,a,b,c,d,e
set a=ActiveDb.SemDbTables.ExecSQL ("select idminor from local_log")
a.movelast
sqll= "INSERT INTO LOCAL_LOG(IDMAJOR,idminor) values(0,"&a.fields(0).value+1 &")"
ActiveDb.SemDbTables.ExecSQL sqll
ActiveDb.SemDbTables.ExecSQL "update local_log set eventtime='"&now&"' where idminor="&a.fields(0).value+1
ActiveDb.SemDbTables.ExecSQL "update local_log set user_id='"&application.activedb.LogonUserID&"' where idminor="&a.fields(0).value+1
set b=ActiveDb.SemDbTables.ExecSQL ("select username from ingeo_users where id='"&application.activedb.LogonUserID&"'")
ActiveDb.SemDbTables.ExecSQL "update local_log set user_name='"&b.fields(0).value&"' where idminor="&a.fields(0).value+1
ActiveDb.SemDbTables.ExecSQL "update local_log set storage=12 where idminor="&a.fields(0).value+1
ActiveDb.SemDbTables.ExecSQL "update local_log set operation=102 where idminor="&a.fields(0).value+1
ActiveDb.SemDbTables.ExecSQL "update local_log set OBJECTID='"&aMapObjectID&"' where idminor="&a.fields(0).value+1
ActiveDb.SemDbTables.ExecSQL "update local_log set details=layerID='"&application. activedb.mapobjects.LayerIDFromObjectID(aMapObjectID)&"' where idminor="&a.fields(0).value+1
end sub
Нужно получить ID слоя, не обращаясь к таблице INGEO_LOGS.
Есть вариант писать ID активного слоя, но дело в том, что объекты могут удаляться программно, не включая слои.
Еще вопрос: как получить USER_IP и USER_ID
|
|
Вернуться к началу |
|
 |
APopov
Зарегистрирован: 19.06.2006 Сообщения: 347 Откуда: Самара
|
Добавлено: Пн 22 Окт 2012 10:58 Заголовок сообщения: |
|
|
1) "C:\Program Files\Integro\InGeo\IngeoIntfs.chm"
MapObjects.LayerIDFromObjectID(anObjectID)
2) Юзерский ip знает только сервер ингео и собственно юзер. у сервера ингео нет возможности спросить его. но получить ип машины на которой выполняется скрип можно. гугл в помощь.
3) USER_ID? не этот application.activedb.LogonUserID ? а какой тогда вы имеете ввиду?
4) у вас очень не оптимальный код. количество SQL команд лучше минимизировать
UPD: еще раз перечитал ваш код: оказывается, у вас уже есть получение ИД слоя. тогда не понятно что же в итоге вам нужно.
_________________ ОАО "Самара-Информспутник",
инженер-программист Попов Артем |
|
Вернуться к началу |
|
 |
Ayrat
Зарегистрирован: 10.09.2012 Сообщения: 11
|
Добавлено: Пн 22 Окт 2012 12:12 Заголовок сообщения: |
|
|
дело в том, что application. activedb.mapobjects.LayerIDFromObjectID(aMapObjectID) не проходит. программа не может найти этот объект, тк он уже удален.
Описание: |
|
Размер файла: |
135.45 KB |
Просмотрено: |
8684 раз(а) |

|
|
|
Вернуться к началу |
|
 |
APopov
Зарегистрирован: 19.06.2006 Сообщения: 347 Откуда: Самара
|
Добавлено: Вт 23 Окт 2012 10:01 Заголовок сообщения: |
|
|
понял. тогда используйте событие dbMapObjects_WillDelete вместо dbMapObjects_DeleteComplete.
_________________ ОАО "Самара-Информспутник",
инженер-программист Попов Артем |
|
Вернуться к началу |
|
 |
Ayrat
Зарегистрирован: 10.09.2012 Сообщения: 11
|
Добавлено: Вт 23 Окт 2012 11:44 Заголовок сообщения: |
|
|
Спасибо, помогло!
|
|
Вернуться к началу |
|
 |
|