Как запустить событие нажатия двух разных БД, используя третью БД - PullRequest
0 голосов
/ 01 июня 2019

У меня есть две базы данных в MS Access, имеющие разные коды, но обе имеют уникальную форму, т.е. форму2. Теперь у меня есть форма в третьей базе данных, и я хочу запустить событие базы данных 1 и базы данных 2 form2, используя эту форму.

У меня есть код для этой цели в третьей форме, и код правильно выполняет обе формы БД, но событие click в это время не выполняется.

Мой код указан ниже

Private Sub Command0_Click()
OpenRemoteForm "C:\Data\Offer\Chrome\Main_Ch.accdb", "Form2", "Command17_Click()"
End Sub

Function OpenRemoteForm(strDbFile As String, strFormName As String, strclick As String)
    Dim objAcc As Object
    Dim accFrm As Object
    Dim rst As DAO.Recordset
    DoCmd.RunCommand acCmdAppMinimize
    Dim strBookmark As String

    Set objAcc = CreateObject("Access.Application")
    objAcc.OpenCurrentDatabase (strDbFile)

'    objAcc.DoCmd.OpenForm strFormName
'    With objAcc.Forms(strFormName)
'        Set rst = .RecordsetClone
'        rst.FindFirst strKeyFieldName & "=" & lngIDToFind
'        If rst.NoMatch Then
'            MsgBox "No Match"
'        Else
'            .Bookmark = rst.Bookmark
'        End If
'    End With

    objAcc.UserControl = True

End Function

Когда я нажимаю кнопку в третьей форме БД, событие одновременного запуска должно выполняться из БД 1, формы 2 и DB2, формы 2 одновременно.

1 Ответ

0 голосов
/ 01 июня 2019

В этой процедуре нет кода для вызова процедуры в другой базе данных. Если вы хотите вызвать процедуру формы с 3-го дБ, процедура не может быть закрытой. Удалить приватный классификатор из кнопки Нажмите на объявление события в двух БД.

Имя формы может определенно передаваться в переменной и ссылаться таким образом. Необходимо открыть форму перед вызовом процедуры.
objAcc.DoCmd.OpenForm strFormName

Процедуры ссылки на формы сложнее. Один из подходов состоит в том, чтобы дать обеим кнопкам одинаковое имя и явно указать это имя.
objAcc.Forms(strFormName).Command17_Click

Другой подход использует встроенную функцию CallByName, которая позволяет передавать ссылку на процедуру в переменной.
CallByName objAcc.Forms(strFormName), strClick, vbMethod
Необходимо удалить скобки из параметра strClick.
OpenRemoteForm "C:\Data\Offer\Chrome\Main_Ch.accdb", "Form2", "Command17_Click"

Если вы хотите открыть БД, а затем просто передать управление пользователю, на самом деле даже не нужен весь этот код, декларирующий и устанавливающий объекты приложения. За этими формами должен быть код для запуска их собственного события Click кнопки, используя события Open или Load. Если форма открыта по умолчанию при открытии БД, то код в этих событиях должен выполняться при открытии БД. Методы простого открытия файла используют команды FollowHyperlink или Shell.

Рекомендовать присваивать более значимые имена, чем значения по умолчанию, присвоенные Access.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...