Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
kvn75
Member

Откуда: Москва
Сообщений: 32
Привет всем.

Я почти уверен, что сам знаю ответ на этот вопрос. Нет нельзя создать!!!
Но всё-таки надеюсь, что я не прав.

Итак проблема.

Есть проект «А» в нём находятся все Таблицы, Запросы, Формы, Отчёты и Макросы.
Есть проект «Б» в нем находятся только Модули (стандартные и модули классов).

Проект «Б», подключен к проекту «А», как «библиотечная» база.

В проекте «Б» есть стандартный модуль mdlForms:
В нём есть две процедуры.
Процедура

Public Sub OpenForm(strFrmName As String)
    DoCmd.OpenForm strFrmName
End Sub


работает, и без проблем запускает формы из проекта «А».

А вот процедура

Public Sub FormInstances()
    Dim frm As Form
    Set frm = New Form_frmTest
    frm.Visible = True
    Set frm = Nothing
End Sub


работать не хочет…. Ругается что «Пользовательский тип (Form_frmTest) не определен».

Но это и понятно, так как в проекте «Б» нет такой формы.

На всякий случай модуль формы "frmTest" в проекте "А"

Option Compare Database
Option Explicit

Dim frm As Form

Private Sub Form_Close()
    Set frm = Nothing
End Sub

Private Sub Form_Open(Cancel As Integer)
    Set frm = Me
End Sub




Может кто-нибудь знает, какой-нибудь трюк, который позволит именно в такой модели из прилинкованного проекта «Б», создавать экземпляры форм в проекте «А».

Очень нужны идеи.
15 окт 21, 21:20    [22384379]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
vmag
Member

Откуда: MP
Сообщений: 4229
kvn75,

- вынести из А таблицы в отдельное хранилище
- прилинковать к А таблицы из хранилища
- импортировать в А все модули из Б
- работать с А без садомазо
15 окт 21, 21:35    [22384384]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
kvn75
Member

Откуда: Москва
Сообщений: 32
vmag
kvn75,

- вынести из А таблицы в отдельное хранилище
- прилинковать к А таблицы из хранилища
- импортировать в А все модули из Б
- работать с А без садомазо


Спасибо за совет. Ho!

Это садомазо не от хорошей жизни.

Проекту «А» более 20 лет.
Количество форм с модулями 588 шт. и отчётов с модулями 256. Плюс 74 модуля. Итого 918 шт.
А как мы все знаем, ограничение на количество объектов с модулями в Access 1000 шт.
Спецификации базы данных MS Access

Файл всего размером 105 МБ.
Почти все таблицы на SQL Server перенесены, в самом проекте только несколько локальных.

В начале лето начались всякие непонятные глюки…

Например, после редактирования нескольких объектов подряд, сообщает о нехватки свободного места… Хотя свободного диского пространства на диске более 200 гб.
При попытки компилировать также сообщает о нехватки свободного места и "коверкает" код … Например стирает часть кода. Часто в местах определения переменых.
При добавлении новых форм и отчётов с модулями, также сообщает о нехватки свободного места и рушиться.

Во время выполнения, не регулярно, но достаточно часто возникает сообщения уже о нехватки оперативной памяти, хотя на машине 64 гб.

Данные ошибки воспроизводяться везде, ни только на конкретной машине. Как минимум на 6 локальных PS и трех терминальных серверах.

Импорт всех объектов в новый файл а также сжатие и востановления а также режим декомпилирования не помогает.

После трех месяцев чистки кода, ничего не оставалось, как попробовать разделить на два проекта, в идеале собирался разделить на три:
«Локальные таблицы»
«Запросы, Формы, Отчёты и Макросы»
«Модули»

После разделения на «А» и «Б» проблема с нехваткой свободного места ушла! Ура победа!!!
Но не могу заставить в этой модели работать создания экземпляров форм. Может это и принципиально невозможно. Я прям уже в этом уверен. Просто понадеялся, вдруг я просто этого не умею. И кто-то что-нибудь посоветует.

P.S.
На всякий случай!!! К количеству объектов в базе, к архитектуре решения, к выбору MS Access как платформы и т.д. Я не имею отношения. Никто переходить на другую платформу не собирается. Я работаю в этой Фирме только год, и мне приходиться со всем этим разбираться.


Если есть идеи, буду очень рад их услышать.
16 окт 21, 00:53    [22384435]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 2262
kvn75
А вот процедура

Public Sub FormInstances()
    Dim frm As Form
    Set frm = New Form_frmTest
    frm.Visible = True
    Set frm = Nothing
End Sub


попробуй так:
Set frm = New проектА.Form_frmTest

то есть уточни полное имя в пространстве имен
но Form_frmTest это не форма это модуль класса
имей ввиду

Сообщение было отредактировано: 16 окт 21, 06:42
16 окт 21, 06:53    [22384472]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 2262
kvn75
Количество форм с модулями 588 шт. и отчётов с модулями 256. Плюс 74 модуля. Итого 918 шт.
А как мы все знаем, ограничение на количество объектов с модулями в Access 1000 шт.

это явно проблема в проектировании базы.
Вам бы сюда копать (588 форм) это что то
16 окт 21, 06:59    [22384473]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
vmag
Member

Откуда: MP
Сообщений: 4229
kvn75
Проекту «А» более 20 лет.
Количество форм с модулями 588 шт. и отчётов с модулями 256. Плюс 74 модуля. Итого 918 шт.
А как мы все знаем, ограничение на количество объектов с модулями в Access 1000 шт.


За 20 лет сменилось 200 программистов и каждый не имея желания разбираться в сделанном, тупо ваял своё (тоже самое в очередной раз)...
- возьмите лист А4 и карандаш
- в течение месяца пишите на него кто какие использовал формы и отчеты
- через месяц импортируйте в пустую БД, то что есть на А4 и то, что на это завязано (без чего не запускается)
- ещё месяц импортируйте то, чего не будет хватать
Через два месяца (максимум), но я думаю что через неделю у вас будет нормальная рабочая БД...
Особое внимание уделяйте на те же яйца с разных боков - нужно оставлять только одну проекцию...

то что есть сейчас - это тупик, можно менять стойки, прыгать на месте, но лоб всё равно уперт в стену...

Сообщение было отредактировано: 16 окт 21, 07:20
16 окт 21, 07:29    [22384474]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 849
kvn75, разбирался с этой проблемой так - наверняка как минимум сотня форм (думаю, штук 500) - однотипные - соберите их вместе (у меня максимум было 52 штуки в таблице). формы,отчеты можно сгруппировать в модули классов, в зависимости от функционала, конечно.
мне кажется копать лучше в этом направлении.
также лучше будет перейти на MSO x64, но там нужно учитывать нюансы.
ещё можно переходить из одной базы в другую, а не запускать модули одной базы из другой
+ переход из одной базы в другую

у меня таким легаси открывается сервисная база данных по обслуживанию основной
Private Function RstopenBase()
Dim Path$, oldStich$
oldStich = vbNullString
    On Error GoTo Error_Handler
Path = CurrentProject.Path & fromEAV(426) & fromEAV(427)' это путь он хранится в таблице настроек 
    Dim oAccess  As Access.Application
  Set oAccess = CreateObject("Access.Application")    'Create a new Access instance
 With oAccess
  .OpenCurrentDatabase Path, False, oldStich
     .UserControl = True
   .TempVars.Add "PathGui", CurrentDb.Name
   .DoCmd.OpenForm "frmService" ' открываем форму для сжатия
  End With
Error_Handler_Exit:
    On Error Resume Next
  If Not oAccess Is Nothing Then Set oAccess = Nothing
Application.Quit
    Exit Function
Error_Handler:
    Resume Error_Handler_Exit
End Function

возврат практически аналогичен, +можно использовать коллекцию глобальных переменных tempvars (для передачи пути к основной базе, например) - как это сделано в примере) и возможность запуска макроса из внешней базы - для скажем раскрытия на весь экран после запуска.
16 окт 21, 07:40    [22384476]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
kvn75
Member

Откуда: Москва
Сообщений: 32
ROI, я так уже пробовал. К сожалению, так тоже не хочет работать. Сообщает «Пользовательский тип не определен»
16 окт 21, 12:57    [22384542]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
kvn75
Member

Откуда: Москва
Сообщений: 32
ROI,я это прекрасно понимаю, с этого и начал. После интервью со «старожилами» удалось удалить из базы объектов 7. Это результат не принесло. Никто толком, ничего сказать не может.
Как всегда утверждают, что сейчас этим всем не пользуется, но может понадобится и т.д.
Конечно, мы будем долго и кропотливо всё вычищать, переносить в другие файлы. В результате будет «Новое приложение» с актуальными объектами и «Старое приложение» с о всем этим барахлом.

Но сейчас я попробовал разделить два файла, и увидел, что это решает мою проблему (почти решает) сразу. Пока столкнулся только с этой проблемой (создания экземпляров) и жутко не удобно вести разработку, нужно постоянно переключаться между двумя файлами. Постоянно закрывать и открывать их это бесит и очень мешает!

Ну всё-таки, мне уже просто для себя очень интересно, вообще это возможно реализовать или нет. Возможно ли создать экземпляр формы в проекте «А» если модуль с функцией находится в проекте «Б»?
16 окт 21, 12:59    [22384545]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
kvn75
Member

Откуда: Москва
Сообщений: 32
vmag, я с тобой абсолютно согласен. Так в итоге и буду делать.
Но вопрос был про экземпляры форм в другом проекте.
А историю про 20 лет проекту, пришлось озвучить, так как начались сообщения про садомазо.
Решил немного прояснить ситуацию зачем мне это всё…
16 окт 21, 13:00    [22384546]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
kvn75
Member

Откуда: Москва
Сообщений: 32
alecko, спасибо за ответ! Заинтриговал! Обязательно более детально посмотрю твой пример. Пока не успел, может вечером доберусь.
Про 64 бита тоже задумывался, но пока руки не дошли.
Фишка с переключением между базами мне известна, в другой фирме так и справлялись с похожей проблемой. Просто сейчас хотел попытаться сделать по-другому. Но вот пока застрял.

Надеялся, что всё-таки есть способ обойти эту проблему. Подожду ещё, может кто–нибудь такой же дорогой проходил.
16 окт 21, 13:13    [22384551]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
Predeclared
Member

Откуда: And God I know I'm one
Сообщений: 1031
При определенных ограничениях (коих я в постановке задачи не узрел),
вопрос решается довольно просто.
Подсказка: CommandBars.

Если подсказки будет не достаточно, распишу подробнее.
16 окт 21, 13:18    [22384552]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 2262
kvn75
ROI, я так уже пробовал. К сожалению, так тоже не хочет работать. Сообщает «Пользовательский тип не определен»

а как вы пробывали?
а интелектуальная подсказкаи чё-нибудь подсовывает
ну и переменной объявленной как Form
нельзя присвоить класс (присваивайте форму frmTest)
покажите код
16 окт 21, 14:11    [22384563]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 5359
kvn75
Может кто-нибудь знает, какой-нибудь трюк, который позволит именно в такой модели из прилинкованного проекта «Б», создавать экземпляры форм в проекте «А».

Очень нужны идеи.
Использование своих библиотек или как правильно построить масштабируемое приложение
16 окт 21, 14:12    [22384564]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 2262
kvn75
Про 64 бита тоже задумывался, но пока руки не дошли.

забей.
пользы ни какой, акромя гемора.
16 окт 21, 14:13    [22384566]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 5359
Панург
Использование своих библиотек или как правильно построить масштабируемое приложение
к ссылке...
автор
1 - Private : Экземпляры этого класса не могут быть созданны извне.Более того они извне не видны Вы можете создавать и использовать такие обьекты только изнутри проекта, в которм "сидит" этот класс модуль.


2 - PublicNotCreatable : Экземпляры этого класса тоже не могут быть созданны извне , однако они могут быть использованы если уже созданы "изнутри".


3 - SingleUse : Вы можете использовать CreateObject function или ключевое слово New для создания экземпляров этого класса. При этом каждый новый элемент класса будет стартовать в отдельном "рабочем пространстве" Это свойство не появляется, если вы создаете ActiveX DLL. Обратите внимание вы таки можете насоздавать хоть сотню экземпляров этого класса.


4 -GlobalSingleUse : Префикс Global означает , что использовать этот тип класса можно без дополнительный обьявлений. В остальном это то же самое что и 3


5 - MultiUse : Да, именно, вы можете создавать и использовать экземпляры этого класса отовсюду, при этом допустимо, что одна физическая копия обьекта в памяти будет обслуживать все созданные экземпляры. Некоторые проблемы, связанные с использованием этого свойства(отказ в корректной работе при определенных настройках DCOM ) я расcматривал в статье о настройке DCOM компонентов


6 - GlobalMultiUse : Префикс Global означает , что использовать этот тип класса можно без дополнительный обьявлений, т.е класс создается автоматически, вы можете сразу использовать его свойства и методы как глобальные функции. . В остальном это то же самое что и 5
16 окт 21, 14:24    [22384568]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 2262
kvn75,

откройте браузер объектов
и увидите подключенную базу за одно и доступные объекты
имя подключенной базы будет корневым пространством имен
от него и стройте путь до формы или до модуля (через точку)
имя приатаченой базы.имя модуля или класса
панург про видимость вам правильно говорит

Сообщение было отредактировано: 16 окт 21, 14:21
16 окт 21, 14:27    [22384570]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 2262
ROI,

До кучи (модули класса из библиотеки)
https://www.sql.ru/forum/423804/moduli-klassa-v-nadstroyki#
16 окт 21, 15:02    [22384574]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 2262
ROI,

И есче полезное
https://www.sql.ru/forum/156857-2/kak-ispolzovat-moduli-klassa-iz-drugih-proektov-vba
16 окт 21, 15:25    [22384579]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
kvn75
Member

Откуда: Москва
Сообщений: 32
ROI
kvn75
ROI, я так уже пробовал. К сожалению, так тоже не хочет работать. Сообщает «Пользовательский тип не определен»

а как вы пробывали?
а интелектуальная подсказкаи чё-нибудь подсовывает
ну и переменной объявленной как Form
нельзя присвоить класс (присваивайте форму frmTest)
покажите код


Ой! Извини, забыл процитировать твой вопрос.

Я пробовал писать имя проекта. Это не работает в конструкции с NEW Form_
Public Function InstForm_B2()
   Dim frm As Form
   
   Set frm = New ProjectA.Form_frmTest2
   
   frm.Visible = True
   
   Set frm = Nothing
   
End Function


И на сколько я понимаю, находясь в модули проекта А можно вызвать функцию проекта «Б», хоть с указанием имени,

Public Sub Test_A()
    ProjectB.OpenForm_B
End Sub


хоть без него,

Public Sub Test_A()
    OpenForm_B
End Sub


Оба варианта работают.

А вот указать в модули из Проекте «Б» вызов функции в проекте «А» нельзя. Или я не прав?

А с обращением к классу в проекте «Б» и созданием из него экземпляров у меня проблем нет.
Использую трюк с функций в стандартном модуле.
Option Explicit
Public Function New_clsEmployee() As clsEmployee
    Set New_clsEmployee = New clsEmployee
    End Function


Как и советует Microsoft
17 окт 21, 19:27    [22384808]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
kvn75
Member

Откуда: Москва
Сообщений: 32
Predeclared
При определенных ограничениях (коих я в постановке задачи не узрел),
вопрос решается довольно просто.
Подсказка: CommandBars.

Если подсказки будет не достаточно, распишу подробнее.


К сожалению, недостаточно. Если не сложно, по подробней пожалуйста. :)
17 окт 21, 19:29    [22384809]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
kvn75
Member

Откуда: Москва
Сообщений: 32
Панург
Панург
Использование своих библиотек или как правильно построить масштабируемое приложение
к ссылке...
автор
1 - Private : Экземпляры этого класса не могут быть созданны извне.Более того они извне не видны Вы можете создавать и использовать такие обьекты только изнутри проекта, в которм "сидит" этот класс модуль.


2 - PublicNotCreatable : Экземпляры этого класса тоже не могут быть созданны извне , однако они могут быть использованы если уже созданы "изнутри".


3 - SingleUse : Вы можете использовать CreateObject function или ключевое слово New для создания экземпляров этого класса. При этом каждый новый элемент класса будет стартовать в отдельном "рабочем пространстве" Это свойство не появляется, если вы создаете ActiveX DLL. Обратите внимание вы таки можете насоздавать хоть сотню экземпляров этого класса.


4 -GlobalSingleUse : Префикс Global означает , что использовать этот тип класса можно без дополнительный обьявлений. В остальном это то же самое что и 3


5 - MultiUse : Да, именно, вы можете создавать и использовать экземпляры этого класса отовсюду, при этом допустимо, что одна физическая копия обьекта в памяти будет обслуживать все созданные экземпляры. Некоторые проблемы, связанные с использованием этого свойства(отказ в корректной работе при определенных настройках DCOM ) я расcматривал в статье о настройке DCOM компонентов


6 - GlobalMultiUse : Префикс Global означает , что использовать этот тип класса можно без дополнительный обьявлений, т.е класс создается автоматически, вы можете сразу использовать его свойства и методы как глобальные функции. . В остальном это то же самое что и 5


Спасибо за информацию!
Я знал только про: 1 – Private, 2 – PublicNotCreatable
Если я правильно понимаю, всё это касается использования обычных классов.
Но как это можно использовать в моей задаче, что-то я не пойму…
То-ли невнимательно прочитал тему по ссылки то-ли это немного не то.
Разве возможно изменить данное свойство у модуля формы?
Такой код, например вызывает ошибку.

?vbe.VBProjects("ProjectA").VBComponents("Form_frmTest").Properties("Instancing")


А у модуля класса такое свойство есть, по этому данный код

?vbe.VBProjects("ProjectB").VBComponents("clsTestB").Properties("Instancing")

не вызывает ошибки возвращает значение 2
17 окт 21, 19:42    [22384816]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
kvn75
Member

Откуда: Москва
Сообщений: 32
ROI
kvn75,

откройте браузер объектов
и увидите подключенную базу за одно и доступные объекты
имя подключенной базы будет корневым пространством имен
от него и стройте путь до формы или до модуля (через точку)
имя приатаченой базы.имя модуля или класса
панург про видимость вам правильно говорит


Спасибо большое, что пытаешься помочь.
Про указания имя Проекта я в курсе. Но в этом случае

Public Function InstForm_B()
   Dim frm As Form
   
   Set frm = New ProjectA.Form_frmTest
   
   frm.Visible = True
   
   Set frm = Nothing
   
End Function


оно не работает.

Работоет только в таком варианте
Public Sub Test_A()
    ProjectB.OpenForm_B
End Sub


Модуль в проекте "Б"
Option Compare Database
Option Explicit

Public Function OpenForm_B()
    Const cFrm  As String = "frmTest"
    DoCmd.OpenForm cFrm
End Function

Public Function InstForm_B()
   Dim frm As Form
   
   Set frm = New Form_frmTest
   
   frm.Visible = True
   
   Set frm = Nothing
   
End Function



За дополнительные ссылки на схожие темы, также большое спасибо.
17 окт 21, 20:01    [22384822]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
Predeclared
Member

Откуда: And God I know I'm one
Сообщений: 1031
kvn75
... К сожалению, недостаточно. Если не сложно, по подробней пожалуйста. :)

Прошу прощения, я вчера, видимо, отведал не тех грибочков, и "воевал с ветряными мельницами". :)

В проект А совсем-совсем "залезать" нельзя?
17 окт 21, 21:48    [22384841]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
kvn75
Member

Откуда: Москва
Сообщений: 32
Predeclared
kvn75
... К сожалению, недостаточно. Если не сложно, по подробней пожалуйста. :)

Прошу прощения, я вчера, видимо, отведал не тех грибочков, и "воевал с ветряными мельницами". :)

В проект А совсем-совсем "залезать" нельзя?


Смотря на сколько...
Я только в начале этого пути.
Пока разделил так: Таблицы, запросы , макросы, формы и отчёты в одном. Модули в другом. Вроде всё фурычит. Кроме этого New Form_...
Я надеялся так всё и оставить. Но если есть идеи как из функций в проекте Б, что-то дёргать в А, и это что-то вернёт мне ссылку на инстанс формы из проекта А, буду рад услышать.
17 окт 21, 23:08    [22384851]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
vmag
Member

Откуда: MP
Сообщений: 4229
kvn75
Но если есть идеи как из функций в проекте Б, что-то дёргать в А, и это что-то вернёт мне ссылку на инстанс формы из проекта А, буду рад услышать.

ну ты хоть пример упрощенный выложи с парой mdb...
типа в первом mdb в форме вычисляется Поле1 + Поле2
тогда во втором mdb что примерно нужно от первого?
kvn75
Смотря на сколько...
Я только в начале этого пути...

Вопрос не праздный однако...
Так-то можно в любом проекте повесить скрытую дежурную форму, которая каждые 10 сек будет читать возможные инструкции, например из txt файла (что нужно делать) и делать что угодно, а инструкции будут даваться из первого проекта...
17 окт 21, 23:56    [22384855]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 2262
kvn75
Спасибо большое, что пытаешься помочь.
Про указания имя Проекта я в курсе. Но в этом случае

Public Function InstForm_B()
   Dim frm As Form
   
   Set frm = New ProjectA.Form_frmTest
   
   frm.Visible = True
   
   Set frm = Nothing
   
End Function


оно не работает.

И не будет.
Ты пытаешься присвоить переменной с типом Form класс
не соответствие типов однако

kvn75
Работоет только в таком варианте
Public Sub Test_A()
    ProjectB.OpenForm_B
End Sub



Модуль в проекте "Б"
Option Compare Database
Option Explicit

Public Function OpenForm_B()
    Const cFrm  As String = "frmTest"
    DoCmd.OpenForm cFrm
End Function

Public Function InstForm_B()
   Dim frm As Form
   
   Set frm = New Form_frmTest
   
   frm.Visible = True
   
   Set frm = Nothing
   
End Function

доработай функцию.
передавай в функцию имя формы в качестве параметра.
18 окт 21, 05:37    [22384871]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
kvn75
Member

Откуда: Москва
Сообщений: 32
vmag
kvn75
Но если есть идеи как из функций в проекте Б, что-то дёргать в А, и это что-то вернёт мне ссылку на инстанс формы из проекта А, буду рад услышать.

ну ты хоть пример упрощенный выложи с парой mdb...
типа в первом mdb в форме вычисляется Поле1 + Поле2
тогда во втором mdb что примерно нужно от первого?
kvn75
Смотря на сколько...
Я только в начале этого пути...

Вопрос не праздный однако...
Так-то можно в любом проекте повесить скрытую дежурную форму, которая каждые 10 сек будет читать возможные инструкции, например из txt файла (что нужно делать) и делать что угодно, а инструкции будут даваться из первого проекта...



Наверное, я действительно всех уже запутал, что мне нужно.
Выкладываю пример. Может теперь будет понятней, что я хочу получить в итоге.

К сообщению приложен файл (Experement01.zip - 61Kb) cкачать
18 окт 21, 15:42    [22385078]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
kvn75
Member

Откуда: Москва
Сообщений: 32
ROI
kvn75
Спасибо большое, что пытаешься помочь.
Про указания имя Проекта я в курсе. Но в этом случае

Public Function InstForm_B()
   Dim frm As Form
   
   Set frm = New ProjectA.Form_frmTest
   
   frm.Visible = True
   
   Set frm = Nothing
   
End Function


оно не работает.

И не будет.
Ты пытаешься присвоить переменной с типом Form класс
не соответствие типов однако


Ну так я об этом и пишу с самого начала.
В обычной модели, когда всё лежит в одном файле, я могу без проблем создать экземпляр формы с помощью данной инструкции.

 Set frm = New Form_frmTest


И никакой ошибки несоответствия типов не возникает. Так как данный модуль находится в данном проекте.
А я пытаюсь узнать, можно ли как-то извернуться, чтобы этого же добиться из другого, «подчинённого», проекта.

ROI

Public Sub Test_A()
    ProjectB.OpenForm_B
End Sub


Модуль в проекте "Б"
Option Compare Database
Option Explicit

Public Function OpenForm_B()
    Const cFrm  As String = "frmTest"
    DoCmd.OpenForm cFrm
End Function

Public Function InstForm_B()
   Dim frm As Form
   
   Set frm = New Form_frmTest
   
   frm.Visible = True
   
   Set frm = Nothing
   
End Function

доработай функцию.
передавай в функцию имя формы в качестве параметра.


А зачем её дорабатывать, это просто пример.
Я пытался показать, что я умею вызывать функции из другого проекта с указанием имени проекта. И это работает для вызова функций, но не подходит для указания в конструкции

Set frm = New ProjectA.Form_frmTest
18 окт 21, 17:55    [22385184]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
Predeclared
Member

Откуда: And God I know I'm one
Сообщений: 1031
kvn75
... Но если есть идеи как из функций в проекте Б, что-то дёргать в А, и это что-то вернёт мне ссылку ...

В начальной постановке задачи, про ссылку упоминания не было, было только про создание экземпляров форм. :)

Есть экзотический вариант:

Проект А, бэк модуль формы frmWorks:
Public Function GetInstanceByName(formname As String) As Access.Form
    Dim obj As Object
    Select Case formname
        Case Is = "frm1"
            Set obj = New Form_frm1
        Case Is = "frm2"
            Set obj = New Form_frm2
        Case Else
            'I don't know
            Set obj = Me
    End Select
    Set GetInstanceByName = obj.Form
End Function


Проект В, любое место:
Public Sub Test1()
    Dim frm As Access.Form
    
    DoCmd.OpenForm "frmWorks", , , , , acHidden
    Set frm = Forms("frmWorks").GetInstanceByName("frm2")
    DoCmd.Close acForm, "frmWorks"
    frm.Visible = True
End Sub
18 окт 21, 20:49    [22385228]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать экземпляр формы, находящийся в другом проекте?  [new]
kvn75
Member

Откуда: Москва
Сообщений: 32
Predeclared
kvn75
... Но если есть идеи как из функций в проекте Б, что-то дёргать в А, и это что-то вернёт мне ссылку ...

В начальной постановке задачи, про ссылку упоминания не было, было только про создание экземпляров форм. :)

Есть экзотический вариант:

Проект А, бэк модуль формы frmWorks:
Public Function GetInstanceByName(formname As String) As Access.Form
    Dim obj As Object
    Select Case formname
        Case Is = "frm1"
            Set obj = New Form_frm1
        Case Is = "frm2"
            Set obj = New Form_frm2
        Case Else
            'I don't know
            Set obj = Me
    End Select
    Set GetInstanceByName = obj.Form
End Function


Проект В, любое место:
Public Sub Test1()
    Dim frm As Access.Form
    
    DoCmd.OpenForm "frmWorks", , , , , acHidden
    Set frm = Forms("frmWorks").GetInstanceByName("frm2")
    DoCmd.Close acForm, "frmWorks"
    frm.Visible = True
End Sub


Это я и искал!!!
Похоже, что это решает мою задачу.
Спасибо большое!

И спасибо всем кто пытался помочь.
18 окт 21, 22:23    [22385252]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Microsoft Access Ответить