
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
26.06.2003, 21:04
|
|||
|---|---|---|---|
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
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. Прошу ваших дополнений, предложений и замечаний ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.06.2003, 21:17
|
|||
|---|---|---|---|
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
к п. 3.1.: у меня так делает Microsoft Access 97 SP2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.06.2003, 21:18
|
|||
|---|---|---|---|
|
|||
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
Думаю, последовательность изложения могла бы быть такой: 1. Разница между ! и . Причем как можно короче и понятнее, чтобы все прочитали, а не пролистнули. Например: ! - элемент коллекции . - свойство Можно добавить про разрешение ставить . вместо ! и про подводные камни при совпадении имен. Тут же можно добавить про квадратные скобки и про их обязательность для "некрасивых" имен. 2. Разница между А("В") и А!В. Сказать про скорость и про возможность вычисления имен на лету. 3. Про опускаемые по умолчанию названия свойств и коллекций. 4. После этого не нужно приводить столько примеров разных способов обращения к объекту. Примеров можно дать меньше, собственно на каждый случай достаточно дать один пример, самый полный (без опускания) и правильный (с ! везде, где положено). Главное - чтобы в каждом примере было видно, кто тут коллекция, кто свойство и кого можно опустить по умолчанию. Список служебных слов, которые нужно показать: Forms, Reports Me Controls Properties Form, Report (как свойства сабформы) 5. Если я что-то забыл, sorry. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.06.2003, 21:33
|
|||
|---|---|---|---|
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
Владимиру Санычу: к п. 1 - согласен, переделаю. к п. 2: > Me(“Новое “”поле”” [данных]”).Value ‘ Выполняется несколько медленнее’ Есть и Ме, и о скорости. М.б. этого достаточно? Если нет, прошу помочь, и подробнее написать о твоем опыте в этой области, все-таки срок моего использования аксеса явно маловат. А про вычисление имен на лету и потерю скорости при этом, включу. к п. 3 - в пункте 3.5 у меня вскользь об этом упомянуто. Если мало, опять же прошу поделиться своими знаниями. к п. 4: Дело в том, что каждый привык писать по-своему. Поэтому можно видеть и в ответах этого форума, и в чужих программах различные способы обращения к объектам формы. Отсюда и количество примеров - чтобы не наводить на мысли типа "а почему так, разве так можно?" По отчетам я осмысленно не стал ничего пока писать. Наверное, следует вынести отдельным абзацем слова о том, что все вышеописанное справедливо для отчетов, если заменить все вхождения Forms и Form на Reports и Report соответственно. А properties, мне кажется, все-таки выходят за рамки вопроса. p.s. Только доработки сделаю не сегодня - силы на исходе :) Завтра или послезавтра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.06.2003, 21:37
|
|||
|---|---|---|---|
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
Спасибо, Cat2. FAQ: Как обратится к полю формы или подчиненной формы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.06.2003, 21:52
|
|||
|---|---|---|---|
|
|||
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
> Есть и Ме, и о скорости. М.б. этого достаточно? Конечно. Мой пост имел целью не добавить что-то упущенное, а предложить другую последовательность изложения - более строгую. Если переделать твой пост по моей последовательности, то будет даже короче, чем сейчас. Я умышленно не делаю этого сам - не хочу, чтобы шло несколько конкурирующих версий одного текста. > Отсюда и количество примеров - чтобы не наводить на мысли типа "а почему так, разве так можно?" Такое количество примеров нехорошо по двум причинам. Во-первых, оно отвлекает внимание от остальной информации. Во-вторых, оно создает иллюзию полноты: если вдруг кто-то напишет какой-то вариант, которого в этих примерах случайно нет, то ему будет казаться, что его вариант неправилен, и он начнет спрашивать, почему его варианта нет в списке. Поэтому я и предлагаю вместо большого количества примеров дать явное объяснение про разные варианты, причем сделать это в самом начале. > По отчетам я осмысленно не стал ничего пока писать. Наверное, следует вынести отдельным абзацем слова о том, что все вышеописанное справедливо для отчетов, если заменить все вхождения Forms и Form на Reports и Report соответственно. Да, это логично. > А properties, мне кажется, все-таки выходят за рамки вопроса. А неужели ради них будем заводить отдельный фак и в нем все рассказывать заново? Кстати, они сюда просятся уже потому, что надо показать разницу между Me!Name и Me.Name. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.06.2003, 21:59
|
|||
|---|---|---|---|
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
> Поэтому я и предлагаю вместо большого количества примеров дать явное объяснение про разные варианты, причем сделать это в самом начале. Понял, согласен. > неужели ради них будем заводить отдельный фак и в нем все рассказывать заново? Кстати, они сюда просятся уже потому, что надо показать разницу между Me!Name и Me.Name. По названию фака (которое сейчас более-менее отвечает смыслу часто задаваемых вопросов), по-моему, неочевидно, что в нем будут расписаны особенности обращения к свойствам объектов коллекций с помощью Properties. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.06.2003, 22:08
|
|||
|---|---|---|---|
|
|||
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
Поясню, что я хотел. Полный и правильный синтаксис: Код: plaintext Видим, что ! и . идут через один (или одну). Чередуются имена коллекций и их элементов. А теперь - как это можно укоротить: Forms!MyForm - если код в самой форме (не путать, не если форма в фокусе), то можно и желательно заменить на Me. Кроме того, Me. можно опускать, если не возникнет двусмысленности. Controls! - коллекция по умолчанию, можно опускать, если не возникнет двусмысленности. Properties! - аналогично. Value - свойство по умолчанию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.06.2003, 22:12
|
|||
|---|---|---|---|
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
Опять же спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.06.2003, 22:18
|
|||
|---|---|---|---|
|
|||
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
> По названию фака (которое сейчас более-менее отвечает смыслу часто задаваемых вопросов), по-моему, неочевидно, что в нем будут расписаны особенности обращения к свойствам объектов коллекций с помощью Properties. К названию фака можно добавить одно слово, это не проблема. Но рассказывать про properties надо по следующим причинам: 1. Синтаксис обращения к ним такой же, и было бы жалко рассказывать о нем где-то в другом месте еще раз. 2. Надо объяснить разницу между ! и ., а она как раз объясняется при помощи термина properties. 3. И там же обязательно надо сказать, что нельзя заменять ! на ., если есть контрол и свойство с одинаковыми именами. Это тоже невозможно сделать, если не ввести понятие properties. 4. Мы обязаны упомянуть термин properties, когда заговорим про Value и про Form (а это тоже property определенного контрола). 5. Кстати, коллекция Controls - это тоже property формы, только не типа Integer или String, а типа Collection. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.06.2003, 22:24
|
|||
|---|---|---|---|
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
2 Владимир Саныч "И вечно тем любезен я народу..." (АС Пушкин) Мне уж точно. :) Не было у меня в голове стройной картинки по этому вопросу. Теперь, по-моему, есть. Еще раз наше вам. Завтра попробую сделать версию 0.20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.06.2003, 22:30
|
|||
|---|---|---|---|
|
|||
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
Гаумарджос! (Ответы на иврите принимаются.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.06.2003, 22:35
|
|||
|---|---|---|---|
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
уже совсем торможу... Пушкин писал так "И вечно тем любезен буду я народу" (или примерно так, ох горе мне, горе). 2Владимир Саныч любишь заниматься преподаванием иврита, значит?.. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.06.2003, 22:39
|
|||
|---|---|---|---|
|
|||
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
"И вечно буду тем любезен я народу" :^) > любишь заниматься преподаванием иврита, значит?.. :) Угу. Он на Аксесс похож. Это единственные две вещи, которые я умею преподавать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.06.2003, 22:40
|
|||
|---|---|---|---|
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
А вот еще ссылочка: /topic/37459\r ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.06.2003, 22:42
|
|||
|---|---|---|---|
|
|||
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
Ничего не понял. Кто-то что-то уже посылал как готовое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.06.2003, 22:45
|
|||
|---|---|---|---|
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
Ну да, Cat2, machoune, и др. по своим форумам. Видимо, бесполезно :) А Cat2 за нами присматривает, вот и решил, видимо, обострить вопрос. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.06.2003, 00:32
|
|||
|---|---|---|---|
|
|||
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
Забыто и вспомнено. Обращаться к элементу коллекции (например, Forms или Controls) можно следующими способами: C!Element C.Element (не рекомендуется во избежание неоднозначностей) C.Item("Element") (вроде работает медленно, где-то был топик с измерениями) C.Item(0) (причем нумерация с 0, в отличие от юзерских коллекций) При этом .Item можно опускать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.06.2003, 00:49
|
|||
|---|---|---|---|
|
|||
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
Топик с измерениями - вот он. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.06.2003, 01:00
|
|||
|---|---|---|---|
|
|||
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
И вот еще ссылка - про опускание элементов синтаксиса и про то, как Аксесс это трактует.\r \r Если ctl - это контрол, то ctl.Controls возвращает:\r \r если это TextBox и т.п., то приаттаченный к нему Label\r \r если это OptionGroup, то и приаттаченный к нему Label, и коллекцию кнопок, расположенных внутри\r \r если это SubForm, то всегда коллекцию контролов на содержащейся внутри форме, а к приаттаченному Label\'у не добраться вообще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.06.2003, 22:04
|
|||
|---|---|---|---|
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
2Саныч и All Me. можно опускать, если не возникнет двусмысленности не стоит. при полной комиляции будет ругаться. особенно если переносить из одного акса в другой сори если кого-то повтоил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.06.2003, 22:26
|
|||
|---|---|---|---|
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
для Владимир Саныч: >Ничего не понял. Кто-то что-то уже посылал как готовое? Я посылал... Сени в начале ночи (1 ночи примерно)... Окончательно-окончательный вариант (новее, чем размещенный в окончательном факе :) Думаешь не стоило? :) //пока еще не опубликовали... для Geo: Думаю (еще думаю тока, а не предлогаю:) может быть стоит добавить и пунктик (укороченный) о том, что ежли обращаешся к одному объекту (контролу с длиннющим-пре-длиннющим путем) несколько раз, то лучше пользовать либо объектные переменные, либо конструкцию With - и пальчикам легче и по скорости выполнения быстрее. А на счет выкидывания "Me" уже где-то высказывался... кажется... //явно не здесь... или зрение не видит... или в другой топик отпостил... интересно в какой?.. и что подумают тамошние обитатели... а тутошние?... попал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.06.2003, 23:04
|
|||
|---|---|---|---|
|
|||
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
> Me. можно опускать, если не возникнет двусмысленности > не стоит. Разумеется. Кажется, где-то об этом говорилось, но не уверен, что достаточно внятно: нужно рассказать отдельно о том, что допускает синтаксис, и отдельно о соображениях за и против. > Я посылал... Сени в начале ночи (1 ночи примерно)... Окончательно-окончательный вариант (новее, чем размещенный в окончательном факе :) Думаешь не стоило? :) Именно так и думаю. А нам? А глянуть? А одним глазком? А вдруг что-нибудь умное посоветуем? Не надеешься? :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.06.2003, 23:14
|
|||
|---|---|---|---|
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
Нда... какой ху%ый день... Начался плохо и заканчивается еще хуже... Саныч, на счет теоретической части никаких обсуждений уже даааавно не было и они, собстна, не изменились. Изменился тока код: была выкинута строка МсжБокс "ОКей" из функции нажимания на кнопку в системной панели, добавил варианты ссылки на панель инструментов, с оговоркой, что так делать не надо, несколько изменил собственные функции (все протестировал) и навел некую красоту... Т.е. никаких координальных изменений, основанных только на ИМХО! Все мнения общества учтены... Впрочем... Может все еще не поздно тормознуть... Хотя, имхо, все уже устали от "сжимания".... //пошел выкладывать... Всем сорри за своевольный поступок :( каюсь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.06.2003, 13:54
|
|||
|---|---|---|---|
FAQ: Как обратится к полю формы или подчиненной формы |
|||
|
#18+
2Нуф-нуф > Думаю (еще думаю тока, а не предлогаю:) может быть стоит добавить и пунктик (укороченный) о том, что ежли обращаешся к одному объекту (контролу с длиннющим-пре-длиннющим путем) несколько раз, то лучше пользовать либо объектные переменные, либо конструкцию With - и пальчикам легче и по скорости выполнения быстрее. Ок. 2Владимир Саныч Forms!MyForm.Controls!MyControl. Properties! Value Value в Properties нету :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=45&tablet=1&tid=1675321]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
191ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 209ms |
| total: | 484ms |

| 0 / 0 |
