powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / FAQ: Как обратится к полю формы или подчиненной формы
25 сообщений из 82, страница 1 из 4
FAQ: Как обратится к полю формы или подчиненной формы
    #32193114
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Вопросы
1.1. Как прочитать или изменить содержимое поля (объекта) формы.
1.2. Как прочитать или изменить то или иное свойство объекта формы

2. Ответ
2.1. Чтобы прочитать или изменить содержимое или свойство объекта формы, в первую очередь надо составить выражение, позволяющее однозначно определить доступ именно к этому объекту.

Если происходит обращение к объекту формы из модуля этой формы, можно использовать одно из следующих выражений Visual Basic for Application (VBA) :
[Поле 1].Value
Me![Поле 1].Value
Me(“Новое “”поле”” [данных]”).Value ‘ Выполняется несколько медленнее’
Me.Controls(“Новое “”поле”” [данных]”).Value (я указал прямые скобки т.к., несмотря на «соглашение об именах», Access разрешает создавать подобные имена, по крайней мере у меня на компьютере)
В “конструкциях Visual Basic” (например, при необходимости задать условие на значение поля по содержимому другого поля этой же формы) можно пользоваться такой записью:
[Поле 1].Value

Следущие способы подходят для обращений к объекту формы как изнутри, так и извне контекста текущей формы:
для VBA :
Forms![Форма1]![Поле1].Value
Forms![Форма1].Controls(“Новое “”поле”” [данных]”).Value
Forms(“Форма1”).Controls(“Новое “”поле”” [данных]”).Value
С помощью конструкций Visual Basic (в том числе для запросов и макросов):
[Forms]![Форма1]![Поле 1].[Value]

Обращение к объекту подчиненной формы из содержащей её формы:
Для VBA :
Me![Форма2]![Поле1].Value
Me("Форма2")!Поле1.Value
Me(“Форма2”).Controls(“Новое “”поле”” [данных]”).Value
С помощью конструкций Visual Basic :
Me![Форма2]![Поле1].Value

Чтобы обратиться к объекту, содержащемуся в подчиненной форме, вне зависимости от текущего контекста.
VBA :
Forms![Форма1]![Форма2].Form![Поле1].Value
Forms![Форма1]![Форма2].Form.Controls(“Новое “”поле”” [данных]”).Value
Forms(“Форма1”).Controls(“Форма2”).Form.Controls(“Новое “”поле”” [данных]”).Value
С помощью конструкций Visual Basic :
Forms![Форма1]![Форма2].Form![Поле1].Value

Аналогичным образом, с помощью вставки выражений типа ![Форма2].Form (или .Controls(“Форма2”).Form), строятся выражения для подчиненных форм третьего и далее уровней вложености. (Кстати, кто знает, сколько всего уровней вложений форм «разрешают» Access’ы? Три я попробовал – работает ok, а дальше?).

Корректная ссылка на свойство подчиненной формы или отчета требует указания полного идентификатора формы использованием свойства Form элемента управления-подчиненная форма. В данном примере: Forms![Заказы]![Заказано] является ссылкой на элемент управления, в котором выводится подчиненная форма. А Forms![Заказы]![Заказано].Form является ссылкой на саму подчиненную форму. Указание свойства Form для ссылки на подчиненную форму или на ее свойства является обязательным.

Для неоткрытой формы нельзя прочитать или изменить никакие из свойств ее объектов.

Вместо инструкции «.Value» может быть указано любое доступное свойство или метод объекта формы, например, .Name, .Width, .Enabled, .Tag и т.д. Если требуется прочитать или изменить именно содержимое объекта, то инструкцию «.Value» можно не использовать.

Примеры:
VBA :
MyVar = Forms(“Форма1”).Сontrols(“Форма2”).Form.Controls(“Новое “”поле”” [данных]”).Value
Me![Поле 1].Enabled = True
MyVar = Forms(MainFormName).Сontrols(“Форма2”).Form.Controls(“Новое ””поле”” [данных]”).Value
С помощью конструкции Visual Basic :
SELECT * FROM MyTable WHERE (MyTable.Field1=SForms![Форма1]![Форма2].Form![Поле1].Name)

Не знаю, нужно ли сдесь:
2.2. Особенности обращений к значению списков, полей со списками, группам переключателей
2.3. Особенности обращений к содержимому активного поля (.Text и .Value)

3. Дополнительная информация
3.1. Построитель выражений некоторых русифицированных версий Microsoft Access (у меня так делает Microsoft Access SP2) автоматически ставит несуществующую инструкцию [Форма] вместо [Form]. Для корректной работы программы следует вручную исправить полученное выражение.

3.2. Некоторые (или все?) построители выражений обособляют все названия полей и форм, а также ключевые слов прямыми скобками таким образом: [Forms]![Форма1]![Форма2].[Form]![Поле1].[Value]. В принципе, их использование не обязательно.

3.3. В «Соглашении об именах полей, элементов управления и объектов» сказано: имя может включать любую комбинацию букв, цифр, пробелов и специальных символов за исключением точки (.), восклицательного знака (!), надстрочного символа (`), прямых скобок ([ ]) и управляющих символов (с кодами ASCII от 0 до 31), а также не должно начинаться с символа пробела. Несмотря на это, вы легко сможете создать, например, поле, имя которого нарушает вышеизложенные правила. Если вы решили спорить с программистами из Microsoft, тогда следует быть готовым к тому, что, например «Пробелы в именах могут при некоторых обстоятельствах вызывать конфликты в программах Visual Basic».

3.4. Обратите внимание: название формы, под которым она хранится в файле базы данных, и значение ее свойства Имя (Name) в роли объекта-подчиненной формы, которое и следует использовать в ссылках, – не одно и тоже!

3.5. Отличия «.» и «!».
Из системы помощи Microsoft Access 97:
Операторы ! и . (точка) в идентификаторах указывают тип элемента, стоящего справа от оператора.
Оператор ! указывает, что следующий за ним элемент является элементом, определяемым пользователем (элементом семейства). Например, с помощью оператора ! определяют ссылку на открытую форму, отчет или элемент управления в открытой форме или отчете. (Forms![Заказы]![КодЗаказа])
Оператор . (точка) обычно указывает, что следующий за ним элемент определен в Microsoft Access. Например, оператор . (точка) используется для ссылок на свойства форм, отчетов и элементов управления. Допускается также использование оператора . (точка) для ссылок на значение поля в инструкции SQL, метод Visual Basic for Application или семейство. Например, идентификатор Forms![Заказы].Controls представляет ссылку на семейство Controls формы «Заказы».

3.6. Совпадающие наименования полей, переменных, полей данных.
В системе помощи Microsoft Access описаны довольно обширные «правила наименования объектов», суть которых сводится к рекомендации давать уникальные имена полям таблиц, самим таблицам, формам, переменным, функциям и пр. Причем имена не должны совпадать с длинным перечнем зарезервированных слов. В большинстве случаев вы можете отступать от этих правил, но в этом случае вы либо будете действовать на свой страх и риск, либо должны четко осознавать, чего и как вы хотите добиться (например, описанная в стандартном модуле функции MsgBox будет перехватывать и обрабатывать все вызовы встроенной функции Microsoft Access).
Несмотря на вышеуказанные правила, встроенные мастера создания форм, создавая формы на основе таблиц, создают поля с именами, совпадающими с именами соответствующих полей таблицы-источника данных. В случае обращения к таким именам, они будут обрабатываться в соответствии с положениями, описанными в п. 3.5.

Прошу ваших дополнений, предложений и замечаний
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32193119
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к п. 3.1.: у меня так делает Microsoft Access 97 SP2
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32193120
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Думаю, последовательность изложения могла бы быть такой:

1. Разница между ! и .

Причем как можно короче и понятнее, чтобы все прочитали, а не пролистнули. Например:

! - элемент коллекции
. - свойство

Можно добавить про разрешение ставить . вместо ! и про подводные камни при совпадении имен.

Тут же можно добавить про квадратные скобки и про их обязательность для "некрасивых" имен.

2. Разница между А("В") и А!В.

Сказать про скорость и про возможность вычисления имен на лету.

3. Про опускаемые по умолчанию названия свойств и коллекций.

4. После этого не нужно приводить столько примеров разных способов обращения к объекту. Примеров можно дать меньше, собственно на каждый случай достаточно дать один пример, самый полный (без опускания) и правильный (с ! везде, где положено). Главное - чтобы в каждом примере было видно, кто тут коллекция, кто свойство и кого можно опустить по умолчанию.

Список служебных слов, которые нужно показать:

Forms, Reports
Me
Controls
Properties
Form, Report (как свойства сабформы)

5. Если я что-то забыл, sorry.
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32193126
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимиру Санычу:

к п. 1 - согласен, переделаю.

к п. 2:
> Me(“Новое “”поле”” [данных]”).Value ‘ Выполняется несколько медленнее’
Есть и Ме, и о скорости. М.б. этого достаточно? Если нет, прошу помочь, и подробнее написать о твоем опыте в этой области, все-таки срок моего использования аксеса явно маловат.
А про вычисление имен на лету и потерю скорости при этом, включу.

к п. 3 - в пункте 3.5 у меня вскользь об этом упомянуто. Если мало, опять же прошу поделиться своими знаниями.

к п. 4:
Дело в том, что каждый привык писать по-своему. Поэтому можно видеть и в ответах этого форума, и в чужих программах различные способы обращения к объектам формы. Отсюда и количество примеров - чтобы не наводить на мысли типа "а почему так, разве так можно?"
По отчетам я осмысленно не стал ничего пока писать. Наверное, следует вынести отдельным абзацем слова о том, что все вышеописанное справедливо для отчетов, если заменить все вхождения Forms и Form на Reports и Report соответственно.
А properties, мне кажется, все-таки выходят за рамки вопроса.

p.s. Только доработки сделаю не сегодня - силы на исходе :) Завтра или послезавтра.
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32193131
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Cat2.
FAQ: Как обратится к полю формы или подчиненной формы
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32193135
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Есть и Ме, и о скорости. М.б. этого достаточно?

Конечно. Мой пост имел целью не добавить что-то упущенное, а предложить другую последовательность изложения - более строгую. Если переделать твой пост по моей последовательности, то будет даже короче, чем сейчас. Я умышленно не делаю этого сам - не хочу, чтобы шло несколько конкурирующих версий одного текста.

> Отсюда и количество примеров - чтобы не наводить на мысли типа "а почему так, разве так можно?"

Такое количество примеров нехорошо по двум причинам. Во-первых, оно отвлекает внимание от остальной информации. Во-вторых, оно создает иллюзию полноты: если вдруг кто-то напишет какой-то вариант, которого в этих примерах случайно нет, то ему будет казаться, что его вариант неправилен, и он начнет спрашивать, почему его варианта нет в списке.

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

> По отчетам я осмысленно не стал ничего пока писать. Наверное, следует вынести отдельным абзацем слова о том, что все вышеописанное справедливо для отчетов, если заменить все вхождения Forms и Form на Reports и Report соответственно.

Да, это логично.

> А properties, мне кажется, все-таки выходят за рамки вопроса.

А неужели ради них будем заводить отдельный фак и в нем все рассказывать заново? Кстати, они сюда просятся уже потому, что надо показать разницу между Me!Name и Me.Name.
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32193139
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Поэтому я и предлагаю вместо большого количества примеров дать явное объяснение про разные варианты, причем сделать это в самом начале.
Понял, согласен.

> неужели ради них будем заводить отдельный фак и в нем все рассказывать заново? Кстати, они сюда просятся уже потому, что надо показать разницу между Me!Name и Me.Name.
По названию фака (которое сейчас более-менее отвечает смыслу часто задаваемых вопросов), по-моему, неочевидно, что в нем будут расписаны особенности обращения к свойствам объектов коллекций с помощью Properties.
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32193143
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Поясню, что я хотел. Полный и правильный синтаксис:

Код: plaintext
Forms!MyForm.Controls!MyControl.Properties!Value


Видим, что ! и . идут через один (или одну). Чередуются имена коллекций и их элементов. А теперь - как это можно укоротить:

Forms!MyForm - если код в самой форме (не путать, не если форма в фокусе), то можно и желательно заменить на Me. Кроме того, Me. можно опускать, если не возникнет двусмысленности.

Controls! - коллекция по умолчанию, можно опускать, если не возникнет двусмысленности.

Properties! - аналогично.

Value - свойство по умолчанию.
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32193145
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять же спасибо :)
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32193148
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> По названию фака (которое сейчас более-менее отвечает смыслу часто задаваемых вопросов), по-моему, неочевидно, что в нем будут расписаны особенности обращения к свойствам объектов коллекций с помощью Properties.

К названию фака можно добавить одно слово, это не проблема. Но рассказывать про properties надо по следующим причинам:

1. Синтаксис обращения к ним такой же, и было бы жалко рассказывать о нем где-то в другом месте еще раз.
2. Надо объяснить разницу между ! и ., а она как раз объясняется при помощи термина properties.
3. И там же обязательно надо сказать, что нельзя заменять ! на ., если есть контрол и свойство с одинаковыми именами. Это тоже невозможно сделать, если не ввести понятие properties.
4. Мы обязаны упомянуть термин properties, когда заговорим про Value и про Form (а это тоже property определенного контрола).
5. Кстати, коллекция Controls - это тоже property формы, только не типа Integer или String, а типа Collection.
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32193154
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир Саныч
"И вечно тем любезен я народу..." (АС Пушкин)
Мне уж точно. :)
Не было у меня в голове стройной картинки по этому вопросу. Теперь, по-моему, есть. Еще раз наше вам.
Завтра попробую сделать версию 0.20.
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32193157
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Гаумарджос!

(Ответы на иврите принимаются.)
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32193159
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уже совсем торможу...
Пушкин писал так "И вечно тем любезен буду я народу" (или примерно так, ох горе мне, горе).
2Владимир Саныч
любишь заниматься преподаванием иврита, значит?.. :)
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32193161
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
"И вечно буду тем любезен я народу" :^)

> любишь заниматься преподаванием иврита, значит?.. :)

Угу. Он на Аксесс похож. Это единственные две вещи, которые я умею преподавать.
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32193162
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот еще ссылочка: /topic/37459\r
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32193163
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ничего не понял. Кто-то что-то уже посылал как готовое?
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32193165
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну да, Cat2, machoune, и др. по своим форумам. Видимо, бесполезно :)
А Cat2 за нами присматривает, вот и решил, видимо, обострить вопрос. :)
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32194178
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Забыто и вспомнено. Обращаться к элементу коллекции (например, Forms или Controls) можно следующими способами:

C!Element
C.Element (не рекомендуется во избежание неоднозначностей)
C.Item("Element") (вроде работает медленно, где-то был топик с измерениями)
C.Item(0) (причем нумерация с 0, в отличие от юзерских коллекций)

При этом .Item можно опускать.
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32194184
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Топик с измерениями - вот он.
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32194188
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
И вот еще ссылка - про опускание элементов синтаксиса и про то, как Аксесс это трактует.\r
\r
Если ctl - это контрол, то ctl.Controls возвращает:\r
\r
если это TextBox и т.п., то приаттаченный к нему Label\r
\r

если это OptionGroup, то и приаттаченный к нему Label, и коллекцию кнопок, расположенных внутри\r
\r

если это SubForm, то всегда коллекцию контролов на содержащейся внутри форме, а к приаттаченному Label\'у не добраться вообще
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32194380
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Саныч и All

Me. можно опускать, если не возникнет двусмысленности

не стоит.
при полной комиляции будет ругаться.
особенно если переносить из одного акса в другой
сори если кого-то повтоил
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32194385
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для Владимир Саныч:
>Ничего не понял. Кто-то что-то уже посылал как готовое?
Я посылал... Сени в начале ночи (1 ночи примерно)... Окончательно-окончательный вариант (новее, чем размещенный в окончательном факе :) Думаешь не стоило? :) //пока еще не опубликовали...

для Geo:
Думаю (еще думаю тока, а не предлогаю:) может быть стоит добавить и пунктик (укороченный) о том, что ежли обращаешся к одному объекту (контролу с длиннющим-пре-длиннющим путем) несколько раз, то лучше пользовать либо объектные переменные, либо конструкцию With - и пальчикам легче и по скорости выполнения быстрее.

А на счет выкидывания "Me" уже где-то высказывался... кажется... //явно не здесь... или зрение не видит... или в другой топик отпостил... интересно в какой?.. и что подумают тамошние обитатели... а тутошние?... попал...
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32194392
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Me. можно опускать, если не возникнет двусмысленности
> не стоит.

Разумеется. Кажется, где-то об этом говорилось, но не уверен, что достаточно внятно: нужно рассказать отдельно о том, что допускает синтаксис, и отдельно о соображениях за и против.

> Я посылал... Сени в начале ночи (1 ночи примерно)... Окончательно-окончательный вариант (новее, чем размещенный в окончательном факе :) Думаешь не стоило? :)

Именно так и думаю. А нам? А глянуть? А одним глазком? А вдруг что-нибудь умное посоветуем? Не надеешься? :^)
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32194394
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нда... какой ху%ый день... Начался плохо и заканчивается еще хуже...
Саныч, на счет теоретической части никаких обсуждений уже даааавно не было и они, собстна, не изменились.
Изменился тока код: была выкинута строка МсжБокс "ОКей" из функции нажимания на кнопку в системной панели, добавил варианты ссылки на панель инструментов, с оговоркой, что так делать не надо, несколько изменил собственные функции (все протестировал) и навел некую красоту... Т.е. никаких координальных изменений, основанных только на ИМХО! Все мнения общества учтены... Впрочем... Может все еще не поздно тормознуть... Хотя, имхо, все уже устали от "сжимания".... //пошел выкладывать...

Всем сорри за своевольный поступок :( каюсь...
...
Рейтинг: 0 / 0
FAQ: Как обратится к полю формы или подчиненной формы
    #32194471
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Нуф-нуф
> Думаю (еще думаю тока, а не предлогаю:) может быть стоит добавить и пунктик (укороченный) о том, что ежли обращаешся к одному объекту (контролу с длиннющим-пре-длиннющим путем) несколько раз, то лучше пользовать либо объектные переменные, либо конструкцию With - и пальчикам легче и по скорости выполнения быстрее.

Ок.

2Владимир Саныч
Forms!MyForm.Controls!MyControl. Properties! Value
Value в Properties нету :(
...
Рейтинг: 0 / 0
25 сообщений из 82, страница 1 из 4
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / FAQ: Как обратится к полю формы или подчиненной формы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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