Зная hWnd окна Access, найти путь к открытой базе

Дмитрий Исаев
Дата: 25.11.2009 17:54:40
Я думаю, вопрос понятен. :) Известен handle открытого окна с Access (предположим, 97 или 2002), в котором открыта некая база (пусть MDB). Я хочу узнать путь на диске к этой базе. Вопрос: не слишком ли много я хочу? :)
Latuk
Дата: 25.11.2009 17:58:19
ну получи ссылку на апликейшн через гетобджект и сравни хендл - если твой то получай че хош из апликейшина
Бенедикт
Дата: 25.11.2009 18:05:05
Дмитрий Исаев,
AccessibleObjectFromWindow And Access
Бенедикт
Дата: 25.11.2009 18:34:11
Впрочем, раз доступ к родной объектной модели не нужен, можно кое-какую информацию из окон вытащить. В частности, из заголовка окна базы данных (класс окна ODb) можно вытащить название файла базы данных.
Serge Gavrilov
Дата: 26.11.2009 10:57:01
Latuk
ну получи ссылку на апликейшн через гетобджект и сравни хендл - если твой то получай че хош из апликейшина

если открыто несколько апликейшнс?
Дмитрий Исаев
Дата: 26.11.2009 11:15:44
Latuk
ну получи ссылку на апликейшн через гетобджект и сравни хендл - если твой то получай че хош из апликейшина
Мне как раз нужен не мой.

Бенедикт
Дмитрий Исаев,
AccessibleObjectFromWindow And Access
Имеется в виду это сообщение? Спасибо, буду изучать...

Бенедикт
Впрочем, раз доступ к родной объектной модели не нужен, можно кое-какую информацию из окон вытащить. В частности, из заголовка окна базы данных (класс окна ODb) можно вытащить название файла базы данных.
То название, которое отображается - без пути и расширения? Не, это неинтересно. :)
Бенедикт
Дата: 26.11.2009 12:56:31
Дмитрий Исаев
Имеется в виду это сообщение? Спасибо, буду изучать...
В основном это, но и в других есть полезная информация (отрицательный результат - тоже рузультат).
Дмитрий Исаев
То название, которое отображается - без пути и расширения? Не, это неинтересно. :)
Интересно тем, что в некоторых случаях может решить описанную в том сообщении проблему. Но не во всех.

А вот если условия/ситуация позволят открыть окно свойств базы данных, тогда задача может быть, скорее всего, решена полностью, и без обращения к ROT, т. к. в этом окне элементы управления оконные, стандартных классов.
Дмитрий Исаев
Дата: 26.11.2009 15:13:09
На всякий случай: задача решена
Дмитрий Исаев
Дата: 13.01.2010 10:28:09
Действительно, тот код находит только один хендл для базы, открытой несколько раз, но для меня это некритично.

Интересно, возможно ли в окне Access 97 перечислить открытые проекты ADP? MDB, например, успешно "взаимно перечисляются" в 97 и XP (библиотека olelibA97 подключается к XP). А с ADP проблема: у ADP-Аппликейшна вместо CurrentDB.Name, как оказалось, нужно смотреть CurrentProject.FullName.

В Access XP прекрасно работает простая поправка:
      On Error GoTo TestADP
      Debug.Print appAcc.CurrentDb.Name
      GoTo ResumeADP
TestADP:
      On Error Resume Next
      Debug.Print appAcc.CurrentProject.FullName
ResumeADP:
      On Error GoTo 0

Но в Access 97 выдаётся ошибка на этапе компиляции: на слово "CurrentProject" ругается "Метод или компонент данных не найден".

А теперь самое интересное: в окне Watches (см. скрин) мы наблюдаем и CurrentProject, и его FullName! (Хотя code completion твёрдо стоит на своём: CurrentDB знаю, CurrentProject не знаю.) Может, всё-таки можно как-то его вытащить?
Joss
Дата: 13.01.2010 10:52:49
Мда-а-а... Вещь конечно интересная.
CurrentProject - это вещь из ADO, а оно появилось только в Access 2000, так что Access 97 точно не знает, что это такое.

В Access 97 было DAO, а там была конструкция CurrentDB