Я создал регистрационную форму с именем login, где имя пользователя вводится в текстовое поле txtEmployee, и мне нужно отобразить его на второй странице в другой форме в MS Access.Передача параметров между формами в MS Access
ответ
DoCmd.OpenForm
позволяет передавать произвольное значение в качестве последнего параметра. Это значение можно получить в новой форме Me.OpenArgs
:
' Invoked by some Button on the first form '
Sub GoToSecondPage()
DoCmd.OpenForm "MySecondPage", acNormal, , , , , txtEmployee.Value
End Sub
' Second form '
Sub Form_Open(Cancel As Integer)
If Not IsNull(Me.OpenArgs) Then
lblShowEmployeeName.Value = Me.OpenArgs
End If
End Sub
(. Пример кода непроверенного)
Лично я бы передать их через открытые аргументы при открытии формы. Например, из формы А ваш будет писать
DoCmd.OpenForm "frmB", , , , , acDialog,”Badger”
А потом в OnOpen случае формы B вы можете захватить то, что вы послали, как этот
Me.txtSomething=Me.OpenArgs
Вы можете передавать только одну вещь, однако, что я делаю много пропускает строку с разделителями в открытых аргументах и затем разделяет это.
Почему вы открываете acDialog? – Fionnuala
Ну, этот пример был взят из всплывающей формы, поэтому я хотел, чтобы он был модальным, это, конечно, можно удалить, если OP просто хочет нормальную форму. –
пара идей ...
Используйте событие AfterUpdate на поле Логин имя пользователя, чтобы написать имя глобальной переменной, а затем заполнить поле на второй странице с событием OnLoad.
Или, если вы планируете оставить журнал в виде открыт в любое время вы можете установить значение по умолчанию для поля непосредственно = [Формы]! [LoginForm]! [UserName]
Почему бы не создать публичная функция, которая хранит &/или извлекает глобальную переменную, которую вы сохраняете после выполнения первой формы? Это позволит вам не только использовать его в одной или нескольких формах, но и как критерии в запросе (например, для возврата записей, которые соответствуют сохраненному имени пользователя).
Я согласен, что это «поддельная» система безопасности, но есть также моменты, когда этого достаточно для ваших нужд. Я реализовал это раньше, когда я сопоставляю имя пользователя строки среды с записью в пользовательской таблице.
BTW, я рассматриваю эту функцию как персонализацию, а не безопасность.
Просто мысль.
Я бы никогда не использовал глобальный для этого. Вместо этого я бы использовал переменную STATIC внутри функции, которая возвращает значение, и если оно не установлено, оно откроет форму для сбора информации. Это означало бы, что и самовосстановление, и безопасность могут быть изменены в другом месте кода. –
Вы можете передать строку с разделителями в качестве параметра OpenArgs:
DoCmd.OpenForm FormName:="miscForm", OpenArgs:=paramstring
Вот процедура для обработки колонны труб с разделителями, переданного в качестве параметра DoCmd.OpenForm:
Dim Pstring As Variant
If Len(Me.OpenArgs) > 0 Then
Pstring = Split(Me.OpenArgs, "|")
var1 = Pstring(0)
<etc..>
End If
Обычно я вижу необходимость сделать это как указание проблемы дизайна. То есть, если вам нужно передать эту информацию в форму, вы в основном должны использовать какой-то структурированный способ сделать это. –
@David: Вы имеете в виду переменную типа 'struct'? Я использую это только для одной формы в моем текущем приложении Access, так что мне не нужно помещать материал в базу данных, прежде чем я открою форму, а затем снова, когда я буду в форме. Я открыт для лучшей идеи, я не эксперт по форме доступа. –
Существует несколько способов решения этой задачи. Один из них состоит в том, чтобы просто вытолкнуть данные в вызываемую форму из вызывающего контекста. Это можно сделать, открыв форму с помощью achidden и acDialog, и когда вы закончите получать данные в вызываемую форму, вы сделаете ее видимой, что делает ее модальной и выполнение кода в вызывающем контексте останавливается. Обычно я этого не делаю. Я скорее всего использую модуль класса, но это выгодно только тогда, когда у вас есть несколько атрибутов, которые нужно передать, например, при фильтрации по нескольким критериям. –
- 1. Передача параметров между двумя формами в VB.Net
- 2. Передача информации между формами
- 3. Передача массиваList между формами
- 4. Передача данных между формами
- 5. Передача данных между формами
- 6. Передача AVLTree между формами
- 7. Передача параметров вперед и назад между формами в C#
- 8. Передача данных между формами wpf
- 9. Передача данных между несколькими формами
- 10. Передача данных между формами C#
- 11. Передача объекта между формами C#
- 12. Передача данных между формами окон
- 13. Передача значений метокбоксов между формами
- 14. Передача данных между формами VB.NET
- 15. Передача строки между двумя формами
- 16. Передача данных между формами DIRECTLY
- 17. Передача данных между формами классов
- 18. Передача данных между формами C#
- 19. Передача значений между формами (winforms)
- 20. MS Access Form - Между
- 21. Передача данных между формами в C#
- 22. Передача значений объекта между формами в VB.NET
- 23. Передача объекта между формами в C#
- 24. Передача данных в Datagrid между двумя формами
- 25. C# Передача значений между формами в DataGridView
- 26. Передача данных между формами в Qt
- 27. Передача значений между формами в PHP
- 28. Передача данных между формами в разных приложениях
- 29. Передача параметров между маршрутами
- 30. Передача параметров между JSP
Является ли пользователь имя совпадает с именем пользователя входа в Windows? Если это так, вы можете получить имя от: http://www.mvps.org/access/api/api0008.htm – Fionnuala
Кроме того, почему вам нужно отображать имя пользователя, конечно, пользователь знает, кто они? Если вам нужно имя по какой-то другой причине, вы должны сказать это, потому что есть более одного способа передать информацию. Например, если имя используется для фильтрации записей, аргумент Where для метода OpenForm, вероятно, лучше всего. – Fionnuala
Похоже, вы создали систему с поддельной безопасностью. Почему вы это сделали, вместо использования Jet ULS или безопасности Windows NTFS или Active Directory? –