powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Возможно ли создать экземпляр формы, находящийся в другом проекте?
31 сообщений из 31, показаны все 2 страниц
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40104831
kvn75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем.

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

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

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

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

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

Код: vbnet
1.
2.
3.
Public Sub OpenForm(strFrmName As String)
    DoCmd.OpenForm strFrmName
End Sub



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

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

Код: vbnet
1.
2.
3.
4.
5.
6.
Public Sub FormInstances()
    Dim frm As Form
    Set frm = New Form_frmTest
    frm.Visible = True
    Set frm = Nothing
End Sub



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

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

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

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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





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

Очень нужны идеи.
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40104834
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvn75,

- вынести из А таблицы в отдельное хранилище
- прилинковать к А таблицы из хранилища
- импортировать в А все модули из Б
- работать с А без садомазо
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40104863
kvn75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag
kvn75,

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


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

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

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

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

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

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

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

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

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

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

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

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


Если есть идеи, буду очень рад их услышать.
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40104881
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvn75
А вот процедура

Код: vbnet
1.
2.
3.
4.
5.
6.
Public Sub FormInstances()
    Dim frm As Form
    Set frm = New Form_frmTest
    frm.Visible = True
    Set frm = Nothing
End Sub



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


то есть уточни полное имя в пространстве имен
но Form_frmTest это не форма это модуль класса
имей ввиду
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40104882
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvn75
Количество форм с модулями 588 шт. и отчётов с модулями 256. Плюс 74 модуля. Итого 918 шт.
А как мы все знаем, ограничение на количество объектов с модулями в Access 1000 шт.

это явно проблема в проектировании базы.
Вам бы сюда копать (588 форм) это что то
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40104883
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvn75
Проекту «А» более 20 лет.
Количество форм с модулями 588 шт. и отчётов с модулями 256. Плюс 74 модуля. Итого 918 шт.
А как мы все знаем, ограничение на количество объектов с модулями в Access 1000 шт.


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

то что есть сейчас - это тупик, можно менять стойки, прыгать на месте, но лоб всё равно уперт в стену...
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40104885
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvn75, разбирался с этой проблемой так - наверняка как минимум сотня форм (думаю, штук 500) - однотипные - соберите их вместе (у меня максимум было 52 штуки в таблице). формы,отчеты можно сгруппировать в модули классов, в зависимости от функционала, конечно.
мне кажется копать лучше в этом направлении.
также лучше будет перейти на MSO x64, но там нужно учитывать нюансы.
ещё можно переходить из одной базы в другую, а не запускать модули одной базы из другой
переход из одной базы в другую
у меня таким легаси открывается сервисная база данных по обслуживанию основной
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
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 (для передачи пути к основной базе, например) - как это сделано в примере) и возможность запуска макроса из внешней базы - для скажем раскрытия на весь экран после запуска.
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40104921
kvn75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ROI, я так уже пробовал. К сожалению, так тоже не хочет работать. Сообщает «Пользовательский тип не определен»
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40104924
kvn75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ROI,я это прекрасно понимаю, с этого и начал. После интервью со «старожилами» удалось удалить из базы объектов 7. Это результат не принесло. Никто толком, ничего сказать не может.
Как всегда утверждают, что сейчас этим всем не пользуется, но может понадобится и т.д.
Конечно, мы будем долго и кропотливо всё вычищать, переносить в другие файлы. В результате будет «Новое приложение» с актуальными объектами и «Старое приложение» с о всем этим барахлом.

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

Ну всё-таки, мне уже просто для себя очень интересно, вообще это возможно реализовать или нет. Возможно ли создать экземпляр формы в проекте «А» если модуль с функцией находится в проекте «Б»?
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40104925
kvn75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag, я с тобой абсолютно согласен. Так в итоге и буду делать.
Но вопрос был про экземпляры форм в другом проекте.
А историю про 20 лет проекту, пришлось озвучить, так как начались сообщения про садомазо.
Решил немного прояснить ситуацию зачем мне это всё…
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40104929
kvn75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko, спасибо за ответ! Заинтриговал! Обязательно более детально посмотрю твой пример. Пока не успел, может вечером доберусь.
Про 64 бита тоже задумывался, но пока руки не дошли.
Фишка с переключением между базами мне известна, в другой фирме так и справлялись с похожей проблемой. Просто сейчас хотел попытаться сделать по-другому. Но вот пока застрял.

Надеялся, что всё-таки есть способ обойти эту проблему. Подожду ещё, может кто–нибудь такой же дорогой проходил.
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40104930
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При определенных ограничениях (коих я в постановке задачи не узрел),
вопрос решается довольно просто.
Подсказка: CommandBars.

Если подсказки будет не достаточно, распишу подробнее.
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40104934
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvn75
ROI, я так уже пробовал. К сожалению, так тоже не хочет работать. Сообщает «Пользовательский тип не определен»

а как вы пробывали?
а интелектуальная подсказкаи чё-нибудь подсовывает
ну и переменной объявленной как Form
нельзя присвоить класс (присваивайте форму frmTest)
покажите код
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40104935
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvn75
Может кто-нибудь знает, какой-нибудь трюк, который позволит именно в такой модели из прилинкованного проекта «Б», создавать экземпляры форм в проекте «А».

Очень нужны идеи.
Использование своих библиотек или как правильно построить масштабируемое приложение
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40104936
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvn75
Про 64 бита тоже задумывался, но пока руки не дошли.

забей.
пользы ни какой, акромя гемора.
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40104938
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к ссылке...
автор1 - Private : Экземпляры этого класса не могут быть созданны извне.Более того они извне не видны Вы можете создавать и использовать такие обьекты только изнутри проекта, в которм "сидит" этот класс модуль.


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


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


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


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


6 - GlobalMultiUse : Префикс Global означает , что использовать этот тип класса можно без дополнительный обьявлений, т.е класс создается автоматически, вы можете сразу использовать его свойства и методы как глобальные функции. . В остальном это то же самое что и 5
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40104940
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvn75,

откройте браузер объектов
и увидите подключенную базу за одно и доступные объекты
имя подключенной базы будет корневым пространством имен
от него и стройте путь до формы или до модуля (через точку)
имя приатаченой базы.имя модуля или класса
панург про видимость вам правильно говорит
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40104942
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROI,

До кучи (модули класса из библиотеки)
https://www.sql.ru/forum/423804/moduli-klassa-v-nadstroyki#
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40104945
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40105058
kvn75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ROI
kvn75
ROI, я так уже пробовал. К сожалению, так тоже не хочет работать. Сообщает «Пользовательский тип не определен»

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


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

Я пробовал писать имя проекта. Это не работает в конструкции с NEW Form_
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Function InstForm_B2()
   Dim frm As Form
   
   Set frm = New ProjectA.Form_frmTest2
   
   frm.Visible = True
   
   Set frm = Nothing
   
End Function



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

Код: vbnet
1.
2.
3.
Public Sub Test_A()
    ProjectB.OpenForm_B
End Sub



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

Код: vbnet
1.
2.
3.
Public Sub Test_A()
    OpenForm_B
End Sub



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

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

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



Как и советует Microsoft
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40105059
kvn75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Predeclared
При определенных ограничениях (коих я в постановке задачи не узрел),
вопрос решается довольно просто.
Подсказка: CommandBars.

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


К сожалению, недостаточно. Если не сложно, по подробней пожалуйста. :)
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40105062
kvn75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург
к ссылке...
автор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
Если я правильно понимаю, всё это касается использования обычных классов.
Но как это можно использовать в моей задаче, что-то я не пойму…
То-ли невнимательно прочитал тему по ссылки то-ли это немного не то.
Разве возможно изменить данное свойство у модуля формы?
Такой код, например вызывает ошибку.

Код: vbnet
1.
?vbe.VBProjects("ProjectA").VBComponents("Form_frmTest").Properties("Instancing")



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

Код: vbnet
1.
?vbe.VBProjects("ProjectB").VBComponents("clsTestB").Properties("Instancing")


не вызывает ошибки возвращает значение 2
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40105065
kvn75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ROI
kvn75,

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


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

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Function InstForm_B()
   Dim frm As Form
   
   Set frm = New ProjectA.Form_frmTest
   
   frm.Visible = True
   
   Set frm = Nothing
   
End Function



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

Работоет только в таком варианте
Код: vbnet
1.
2.
3.
Public Sub Test_A()
    ProjectB.OpenForm_B
End Sub



Модуль в проекте "Б"
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
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




За дополнительные ссылки на схожие темы, также большое спасибо.
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40105072
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvn75
... К сожалению, недостаточно. Если не сложно, по подробней пожалуйста. :)

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

В проект А совсем-совсем "залезать" нельзя?
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40105074
kvn75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Predeclared
kvn75
... К сожалению, недостаточно. Если не сложно, по подробней пожалуйста. :)

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

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


Смотря на сколько...
Я только в начале этого пути.
Пока разделил так: Таблицы, запросы , макросы, формы и отчёты в одном. Модули в другом. Вроде всё фурычит. Кроме этого New Form_...
Я надеялся так всё и оставить. Но если есть идеи как из функций в проекте Б, что-то дёргать в А, и это что-то вернёт мне ссылку на инстанс формы из проекта А, буду рад услышать.
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40105075
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvn75
Но если есть идеи как из функций в проекте Б, что-то дёргать в А, и это что-то вернёт мне ссылку на инстанс формы из проекта А, буду рад услышать.

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

Вопрос не праздный однако...
Так-то можно в любом проекте повесить скрытую дежурную форму, которая каждые 10 сек будет читать возможные инструкции, например из txt файла (что нужно делать) и делать что угодно, а инструкции будут даваться из первого проекта...
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40105083
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvn75
Спасибо большое, что пытаешься помочь.
Про указания имя Проекта я в курсе. Но в этом случае

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Function InstForm_B()
   Dim frm As Form
   
   Set frm = New ProjectA.Form_frmTest
   
   frm.Visible = True
   
   Set frm = Nothing
   
End Function



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

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

kvn75
Работоет только в таком варианте
Код: vbnet
1.
2.
3.
Public Sub Test_A()
    ProjectB.OpenForm_B
End Sub




Модуль в проекте "Б"
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
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


доработай функцию.
передавай в функцию имя формы в качестве параметра.
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40105205
kvn75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag
kvn75
Но если есть идеи как из функций в проекте Б, что-то дёргать в А, и это что-то вернёт мне ссылку на инстанс формы из проекта А, буду рад услышать.

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

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



Наверное, я действительно всех уже запутал, что мне нужно.
Выкладываю пример. Может теперь будет понятней, что я хочу получить в итоге.
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40105260
kvn75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ROI
kvn75
Спасибо большое, что пытаешься помочь.
Про указания имя Проекта я в курсе. Но в этом случае

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Function InstForm_B()
   Dim frm As Form
   
   Set frm = New ProjectA.Form_frmTest
   
   frm.Visible = True
   
   Set frm = Nothing
   
End Function



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

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


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

Код: vbnet
1.
 Set frm = New Form_frmTest



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

ROI

Код: vbnet
1.
2.
3.
Public Sub Test_A()
    ProjectB.OpenForm_B
End Sub



Модуль в проекте "Б"
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
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


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


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

Код: vbnet
1.
Set frm = New ProjectA.Form_frmTest
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40105279
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvn75
... Но если есть идеи как из функций в проекте Б, что-то дёргать в А, и это что-то вернёт мне ссылку ...

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

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

Проект А, бэк модуль формы frmWorks:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
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



Проект В, любое место:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
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
...
Рейтинг: 0 / 0
Возможно ли создать экземпляр формы, находящийся в другом проекте?
    #40105284
kvn75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Predeclared
kvn75
... Но если есть идеи как из функций в проекте Б, что-то дёргать в А, и это что-то вернёт мне ссылку ...

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

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

Проект А, бэк модуль формы frmWorks:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
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



Проект В, любое место:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
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



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

И спасибо всем кто пытался помочь.
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Возможно ли создать экземпляр формы, находящийся в другом проекте?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]