|
|
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
создаю в приложении объект set OBJ = GetObject(path) (ком -объект) после завершения приложения, которое создало этот объект хочу чтобы он остался. есть мысль что если указать в качестве окна - родителя рабочий стол то поможет ? хотя путаюсь в мыслях как происходит закрытие дочерних объектов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 14:36 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
Тут лучше проявить конкретику, потому как некоторые приложения например сами отвязываются если в окно запущенной программы вмешивается пользователь, так например у Excel происходит Вообщем что за программа, какой у нее статус (может access с ней в режиме hide работает, а ты потом хочешь показать ее и оставить висеть) и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 14:47 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
программа - приложение Access я хочу чтоб он не убивался после того как будет закрыто вызвавшее его приложение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 14:52 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
Ага, вот так значит Я проводил опыты с Excel, вызывая его из Access. Там так: с ParentWindow ловить нечего, потому как в обоих случаев у Excel нет никакого ParentWindow. Наскоко я в курсе все решает COM технология, именно она глушит сама окно/программу, которая самма по себе то и не ведает что с ней будут творить - она себя полностью отдает COM интерфейсу. Чтобы оставить висеть Excel, я сделал так - просто не стал делать Set xlApp=Nothing - и все. Ссылка не обновилась и COM не убил программу, так и висит, пока я ее вручную не убил. Главное не вешать так прогру в скрытом режиме, а то токо через менеджер задач придется убивать, хотя тоже не очень сложно :) Думаю с Access также можно, поробуй.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 15:04 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
Очепятка: >>Set xlApp=Nothing - и все. Ссылка не обнУЛИлась и... Кстати, это к разговору об автоматической очистке ... Видно что с некоторыми COM объектами пока явно не обнулишь счетчик через Set xlApp=Nothing освобождение памяти происходить не будет, потому что сам компиллятор VBE не собирается делать это за нас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 15:14 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
к сожалению set ACCOBJ = nothing в случае с аксессом приводит к закрытию объекта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 15:15 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
2 АлексейК. в оле используется счетчик ссылок на созданные объекты. при каждом присваивании увеличивает на 1 при освобождении уменьшает на 1. когда количество ссылок равно 0 то объект уничтожается. в данном случае можно либо не освобождать текущую ссылку на объект либо выполнить присваивание еще раз. SergeySV предложил на мой взгляд вполне приемлемый путь. как раз то что тебе нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 15:16 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
в том то и дело что обнуляется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 15:26 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
Ну да АлексейК, я ж как раз обратное предлагал (наверное слишком сумборно) - не делать в своем коде Set ACCOBJ = Nothing Просто ниже, я пошел филосовствовать по поводу того, что некоторые предлагают в своем коде не писать Set rst=Nothing, так как все равно автомат. чистильщик VBE очистит память если время жизни переменной вышло. вроде бы с Recordset не было замечано в этом случае утечек памяти, а вот с внешними COM-объектами - пжл, на лицо явная утечка памяти, токо если это не преднамерено (как в твоем случае). По идее Recodset (ADO, DAO) это же тоже подключаемая библиотека, наверная таже технология COM используется, но эффекты разные. Видимо так задумано было специально, чтобы Com объекты типа программ Excel, Word, Access оставались висеть в памяти если нет явного Set ... = Nothing, ведь в реализации COM интерфейса помойму сам объект решает что ему делать и наверное он может и наплевать, на то что ему пришло указание, что в его услугах больше не нуждаются, а он раз такой и говорит - все фигня, хочу и вешу :-) - ИМХО мое предположение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 15:30 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
Хмм, ща поглядим... с Excel прокатывало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 15:31 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
надыбал фишку, буду думать как ее применить: если объект уже создан а я делаю set OBJ = GetObject(path) то объект назначается и после set OBJ = nothing объект не уничтожается!!!! правда не хочется cmdshell для предварительного создания использовать ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 15:35 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
Мдаам, действительно противный. закрывается даже тогда, когда теряет ссылку. Set =nothing делал - висит, ну думаю обманул, Excel закрыл, Access тоже закрылся :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 15:36 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
надо поиметь ссылку на созданный Аксесс.Аппликейшн из другого (не закрываемого) сеанса. Лучше всего - из того самого, который хочется оставит открытым (схватить себя за хвост). Я как-то че-то в этом роде смотрел, но плюнул и сделал через Shell (или ShellExecute). Что неудобно - могут быть у разных юзеров настроены разные пути (разные команды по умолчанию). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 15:39 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
Да, на =Nothing мне тоже удалось его прокатить, но как токо Excel закрываю, то Access грохается полюбому даже несмотря на то, что я там уже вручную какую-то базу открыл. Правда я сейчас смотрю вариант с CreateObject, а не с GetObject ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 15:39 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
Следуя совету ShellExecute мне удалось заставить висеть Access после закрытия Excel'я. Для этого в базу Access добавил функцию: Set a = GetObject(CurrentProject.FullName) переменная "a" объявлена на уровне формы как public Таким макаром мы сделали ссылку на самого себя и Access остался висеть - прикольно. Ща еще пощупаю код, как можно попроще ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 15:47 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
авторсхватить себя за хвост вот как бы это сделать... сеейчас ищу в свойствах объекта access путь к каталогу офиса откуда он запущен ... вроде где - то было ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 15:49 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
Так, уточняю: переменную "a" надо объвлять на уровне модуля, потому как если она умрет (время жизни вышло), а Excel пока еще не закрыт и начинает закрывать, то естественно ссылка Access на самого себя пропадает и он успешно закрывается. Теперь надо думать, что делать если в базу низя заранее добавить такой модуль с переменной и функцией. Тут варианты: 1. Добавить модуль и вписать туда строчки кода через COM (где-то на форуме был пример динамического создания и заполнения модуля) - достат. гемморойно, да еще и модуль будет висеть... 2. мда... думая я... нет у меня пока никакго второго варианта :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 15:53 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
объявлять переменную мне не подходит - проекты будут разные да и вроде кривовато.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 15:54 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
2 АлексейК а если тебе через реестр посмотреть где аксесс прописан? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 16:04 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
Тогда наверное действительно дучше делать через Shell, как например и у Гетца (кое что от меня): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 16:10 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
c путем к файлу аксесса разобрался Accesspath = ACC.Application.SysCmd(acSysCmdAccessDir) & "msaccess.exe" теперь новая засада почему то Call Shell(Accesspath & " " & Filepath, vbMaximizedFocus) открывает в режиме только чтение.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 16:10 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
1. я про криэйт и говорил - фихфам там такой же. 2. офтоп авторЧтобы оставить висеть Excel, я сделал так - просто не стал делать Set xlApp=Nothing - и все гы! - а ты сделай так без придания видимости: Код: plaintext 1. 2. 3. 4. у меня после этого в списке процессов столько EXCEL , сколько раз запускалось. (в списке задач EXCEL-а правда нет). И сам файл ручками открывается только с "уведомлением" (пока не убьеш процессы в менеджере) 3. автор свойствах объекта access путь к каталогу офиса может посмотреть в регистри путь по имени (Access.Application.9)(вернее по имени - класс, а в классе путь)? Но, сдается, может быть установлено несколько екзешников (да я как-то и по сети с другой машины екзешник запускал - а тот уж точно в реестр локал машины не был прописан :0). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 16:11 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
А зачем искать MSACCESS.EXE, Officce и так свои пути прописывает, достаточно написать MSACCESS.EXE и все, попробуйте... А если Access умудрились так хитр поставить, что путей не будет, тогда выведи диалог OpenFile и пусть пользователь сам его ищет, вот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 16:12 |
|
||
|
GetObject() как отвязать объект от родительского приложения?
|
|||
|---|---|---|---|
|
#18+
>>открывает в режиме только чтение.... у меня такого нет, пишу Shell ("MSACCESS.EXE c:\db2.mdb") и он нормально открывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 16:15 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32415455&tid=1676537]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 386ms |

| 0 / 0 |
