Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Присвоить переменной имя формы


Автор: Woodlin 12.11.2009, 13:07
Подскажите как решить проблему: есть форма поиска "Поиск", которая вызывается из формы1 или из формы2 для поиска записи. Не получается сделать так, чтобы найденная запись из формы "Поиск" возвращалась в форму 1 или 2, в зависимости из какой был вызван "Поиск".

Сделал в "Поиск" поле, в которое заносится имя вызвавшей формы и как теперь значение этого поля присвоить переменной никак не пойму. 

Автор: Akina 12.11.2009, 13:16
В форме поиска должна быть публичная процедура или функция. Именно её и следует вызывать. Само собой по окончании её работы возврат произойдёт в точку вызова.

Автор: bopoha 12.11.2009, 13:44
Стоит делать примерно так.
Вариант 1. 
В модуле:
Код

Public Function MyFind() As String

    Dim frmPoisk As Form_f_poisk
    
    DoCmd.OpenForm "f_poisk", , , , , acDialog '-- окно открывается как диалоговое
    
    If Not SysCmd(acSysCmdGetObjectState, acForm, "f_poisk") = acObjStateOpen Then
        Exit Function
    End If
    
    Set fromPoisk = Forms("f_poisk")
    MyFind = frmPoisk.GetFilter()
    Set fromPoisk = Nothing
    
End Function


В форме f_poisk:
Код

Public Function GetFilter() as String
     GetFilter = ... '--- выражение поиска
End Function


Вариант 2. Мой любимый. При помощи пользовательских событий. Подробности тут: http://5codelines.net/events1/


Автор: Woodlin 13.11.2009, 06:33
bopoha, 
скачал Ваш пример использования пользовательских событий... и упёрся в стену.
У меня вызываемая форма для выбора(поиска) записи имеет субформу(в виде таблицы), собственно содержащую список записей.
 И я не знаю как прописать строчку:
          RaiseEvent OnClientSelect(Me.[Список изложниц].Form![Номер_изложницы]),
   

Автор: bopoha 13.11.2009, 10:44
Woodlin, 
Цитата(Woodlin @  13.11.2009,  06:33 Найти цитируемый пост)
 И я не знаю как прописать строчку:
          RaiseEvent OnClientSelect(Me.[Список изложниц].Form![Номер_изложницы]),


В чем именно заключается проблемма? Событие это вызывать нужно на кнопке.
И примерчик свой приложите.

Автор: Woodlin 13.11.2009, 12:56
bopoha, 
Цитата(bopoha @  13.11.2009,  10:44 Найти цитируемый пост)
В чем именно заключается проблемма? Событие это вызывать нужно на кнопке.
И примерчик свой приложите. 


В своей БД я постарался сделать как в Вашем примере с пользовательскими событиями.
В Вашем примере форма Поиска не содержит субформу, а у меня содержит. 
Проблема в том, что я не смог правильно прописать:
      RaiseEvent OnClientSelect(Me.[Список изложниц].Form![Номер_изложницы]),




О... чуть не забыл свой пример:

Автор: bopoha 13.11.2009, 18:16
Woodlin, 

Какокго типа значения поля Me.[Список изложниц].Form![Номер_изложницы]?
Строкового.
Какого типа параметр события?
Код

Event OnClientSelect(ByVal lK_KLIENT As Long)

Long.
Делайте выводы.

Информация к размышлению:
1. Переименуйте событие
2. Переименуйте параметр.
3. Пробелы в именах объектов - источник ошибок. Т.к. один или два там пробела не видно. Вместо пробелов лучше использовать символ "_".
Объявить тип формы с пробелом в имени можно так:
Код

Set m_frmKlientSepis = New [Form_Поиск изложницы]

6. Русские буквы в именах объектов, методов, полей то же возможный источник проблем при работе программы в разных версиях Access. Лучше латиница.

Автор: Woodlin 14.11.2009, 14:23
bopoha, 

Цитата(bopoha @  13.11.2009,  18:16 Найти цитируемый пост)
Информация к размышлению:
1. Переименуйте событие
2. Переименуйте параметр.
3. Пробелы в именах объектов - источник ошибок. Т.к. один или два там пробела не видно. Вместо пробелов лучше использовать символ "_".
Объявить тип формы с пробелом в имени можно так:
Set m_frmKlientSepis = New [Form_Поиск изложницы]


всё исправил, отлично работает.
Спасибо  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)