|
|
|
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:04 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
к п. 3.1.: у меня так делает Microsoft Access 97 SP2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 21:17 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Думаю, последовательность изложения могла бы быть такой: 1. Разница между ! и . Причем как можно короче и понятнее, чтобы все прочитали, а не пролистнули. Например: ! - элемент коллекции . - свойство Можно добавить про разрешение ставить . вместо ! и про подводные камни при совпадении имен. Тут же можно добавить про квадратные скобки и про их обязательность для "некрасивых" имен. 2. Разница между А("В") и А!В. Сказать про скорость и про возможность вычисления имен на лету. 3. Про опускаемые по умолчанию названия свойств и коллекций. 4. После этого не нужно приводить столько примеров разных способов обращения к объекту. Примеров можно дать меньше, собственно на каждый случай достаточно дать один пример, самый полный (без опускания) и правильный (с ! везде, где положено). Главное - чтобы в каждом примере было видно, кто тут коллекция, кто свойство и кого можно опустить по умолчанию. Список служебных слов, которые нужно показать: Forms, Reports Me Controls Properties Form, Report (как свойства сабформы) 5. Если я что-то забыл, sorry. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 21:18 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Владимиру Санычу: к п. 1 - согласен, переделаю. к п. 2: > Me(“Новое “”поле”” [данных]”).Value ‘ Выполняется несколько медленнее’ Есть и Ме, и о скорости. М.б. этого достаточно? Если нет, прошу помочь, и подробнее написать о твоем опыте в этой области, все-таки срок моего использования аксеса явно маловат. А про вычисление имен на лету и потерю скорости при этом, включу. к п. 3 - в пункте 3.5 у меня вскользь об этом упомянуто. Если мало, опять же прошу поделиться своими знаниями. к п. 4: Дело в том, что каждый привык писать по-своему. Поэтому можно видеть и в ответах этого форума, и в чужих программах различные способы обращения к объектам формы. Отсюда и количество примеров - чтобы не наводить на мысли типа "а почему так, разве так можно?" По отчетам я осмысленно не стал ничего пока писать. Наверное, следует вынести отдельным абзацем слова о том, что все вышеописанное справедливо для отчетов, если заменить все вхождения Forms и Form на Reports и Report соответственно. А properties, мне кажется, все-таки выходят за рамки вопроса. p.s. Только доработки сделаю не сегодня - силы на исходе :) Завтра или послезавтра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 21:33 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Спасибо, Cat2. FAQ: Как обратится к полю формы или подчиненной формы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 21:37 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
> Есть и Ме, и о скорости. М.б. этого достаточно? Конечно. Мой пост имел целью не добавить что-то упущенное, а предложить другую последовательность изложения - более строгую. Если переделать твой пост по моей последовательности, то будет даже короче, чем сейчас. Я умышленно не делаю этого сам - не хочу, чтобы шло несколько конкурирующих версий одного текста. > Отсюда и количество примеров - чтобы не наводить на мысли типа "а почему так, разве так можно?" Такое количество примеров нехорошо по двум причинам. Во-первых, оно отвлекает внимание от остальной информации. Во-вторых, оно создает иллюзию полноты: если вдруг кто-то напишет какой-то вариант, которого в этих примерах случайно нет, то ему будет казаться, что его вариант неправилен, и он начнет спрашивать, почему его варианта нет в списке. Поэтому я и предлагаю вместо большого количества примеров дать явное объяснение про разные варианты, причем сделать это в самом начале. > По отчетам я осмысленно не стал ничего пока писать. Наверное, следует вынести отдельным абзацем слова о том, что все вышеописанное справедливо для отчетов, если заменить все вхождения Forms и Form на Reports и Report соответственно. Да, это логично. > А properties, мне кажется, все-таки выходят за рамки вопроса. А неужели ради них будем заводить отдельный фак и в нем все рассказывать заново? Кстати, они сюда просятся уже потому, что надо показать разницу между Me!Name и Me.Name. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 21:52 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
> Поэтому я и предлагаю вместо большого количества примеров дать явное объяснение про разные варианты, причем сделать это в самом начале. Понял, согласен. > неужели ради них будем заводить отдельный фак и в нем все рассказывать заново? Кстати, они сюда просятся уже потому, что надо показать разницу между Me!Name и Me.Name. По названию фака (которое сейчас более-менее отвечает смыслу часто задаваемых вопросов), по-моему, неочевидно, что в нем будут расписаны особенности обращения к свойствам объектов коллекций с помощью Properties. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 21:59 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Поясню, что я хотел. Полный и правильный синтаксис: Код: plaintext Видим, что ! и . идут через один (или одну). Чередуются имена коллекций и их элементов. А теперь - как это можно укоротить: Forms!MyForm - если код в самой форме (не путать, не если форма в фокусе), то можно и желательно заменить на Me. Кроме того, Me. можно опускать, если не возникнет двусмысленности. Controls! - коллекция по умолчанию, можно опускать, если не возникнет двусмысленности. Properties! - аналогично. Value - свойство по умолчанию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 22:08 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Опять же спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 22:12 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
> По названию фака (которое сейчас более-менее отвечает смыслу часто задаваемых вопросов), по-моему, неочевидно, что в нем будут расписаны особенности обращения к свойствам объектов коллекций с помощью Properties. К названию фака можно добавить одно слово, это не проблема. Но рассказывать про properties надо по следующим причинам: 1. Синтаксис обращения к ним такой же, и было бы жалко рассказывать о нем где-то в другом месте еще раз. 2. Надо объяснить разницу между ! и ., а она как раз объясняется при помощи термина properties. 3. И там же обязательно надо сказать, что нельзя заменять ! на ., если есть контрол и свойство с одинаковыми именами. Это тоже невозможно сделать, если не ввести понятие properties. 4. Мы обязаны упомянуть термин properties, когда заговорим про Value и про Form (а это тоже property определенного контрола). 5. Кстати, коллекция Controls - это тоже property формы, только не типа Integer или String, а типа Collection. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 22:18 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
2 Владимир Саныч "И вечно тем любезен я народу..." (АС Пушкин) Мне уж точно. :) Не было у меня в голове стройной картинки по этому вопросу. Теперь, по-моему, есть. Еще раз наше вам. Завтра попробую сделать версию 0.20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 22:24 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Гаумарджос! (Ответы на иврите принимаются.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 22:30 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
уже совсем торможу... Пушкин писал так "И вечно тем любезен буду я народу" (или примерно так, ох горе мне, горе). 2Владимир Саныч любишь заниматься преподаванием иврита, значит?.. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 22:35 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
"И вечно буду тем любезен я народу" :^) > любишь заниматься преподаванием иврита, значит?.. :) Угу. Он на Аксесс похож. Это единственные две вещи, которые я умею преподавать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 22:39 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
А вот еще ссылочка: /topic/37459\r ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 22:40 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Ничего не понял. Кто-то что-то уже посылал как готовое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 22:42 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Ну да, Cat2, machoune, и др. по своим форумам. Видимо, бесполезно :) А Cat2 за нами присматривает, вот и решил, видимо, обострить вопрос. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 22:45 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Забыто и вспомнено. Обращаться к элементу коллекции (например, Forms или Controls) можно следующими способами: C!Element C.Element (не рекомендуется во избежание неоднозначностей) C.Item("Element") (вроде работает медленно, где-то был топик с измерениями) C.Item(0) (причем нумерация с 0, в отличие от юзерских коллекций) При этом .Item можно опускать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 00:32 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Топик с измерениями - вот он. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 00:49 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
И вот еще ссылка - про опускание элементов синтаксиса и про то, как Аксесс это трактует.\r \r Если ctl - это контрол, то ctl.Controls возвращает:\r \r если это TextBox и т.п., то приаттаченный к нему Label\r \r если это OptionGroup, то и приаттаченный к нему Label, и коллекцию кнопок, расположенных внутри\r \r если это SubForm, то всегда коллекцию контролов на содержащейся внутри форме, а к приаттаченному Label\'у не добраться вообще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 01:00 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
2Саныч и All Me. можно опускать, если не возникнет двусмысленности не стоит. при полной комиляции будет ругаться. особенно если переносить из одного акса в другой сори если кого-то повтоил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 22:04 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
для Владимир Саныч: >Ничего не понял. Кто-то что-то уже посылал как готовое? Я посылал... Сени в начале ночи (1 ночи примерно)... Окончательно-окончательный вариант (новее, чем размещенный в окончательном факе :) Думаешь не стоило? :) //пока еще не опубликовали... для Geo: Думаю (еще думаю тока, а не предлогаю:) может быть стоит добавить и пунктик (укороченный) о том, что ежли обращаешся к одному объекту (контролу с длиннющим-пре-длиннющим путем) несколько раз, то лучше пользовать либо объектные переменные, либо конструкцию With - и пальчикам легче и по скорости выполнения быстрее. А на счет выкидывания "Me" уже где-то высказывался... кажется... //явно не здесь... или зрение не видит... или в другой топик отпостил... интересно в какой?.. и что подумают тамошние обитатели... а тутошние?... попал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 22:26 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
> Me. можно опускать, если не возникнет двусмысленности > не стоит. Разумеется. Кажется, где-то об этом говорилось, но не уверен, что достаточно внятно: нужно рассказать отдельно о том, что допускает синтаксис, и отдельно о соображениях за и против. > Я посылал... Сени в начале ночи (1 ночи примерно)... Окончательно-окончательный вариант (новее, чем размещенный в окончательном факе :) Думаешь не стоило? :) Именно так и думаю. А нам? А глянуть? А одним глазком? А вдруг что-нибудь умное посоветуем? Не надеешься? :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 23:04 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Нда... какой ху%ый день... Начался плохо и заканчивается еще хуже... Саныч, на счет теоретической части никаких обсуждений уже даааавно не было и они, собстна, не изменились. Изменился тока код: была выкинута строка МсжБокс "ОКей" из функции нажимания на кнопку в системной панели, добавил варианты ссылки на панель инструментов, с оговоркой, что так делать не надо, несколько изменил собственные функции (все протестировал) и навел некую красоту... Т.е. никаких координальных изменений, основанных только на ИМХО! Все мнения общества учтены... Впрочем... Может все еще не поздно тормознуть... Хотя, имхо, все уже устали от "сжимания".... //пошел выкладывать... Всем сорри за своевольный поступок :( каюсь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 23:14 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
2Нуф-нуф > Думаю (еще думаю тока, а не предлогаю:) может быть стоит добавить и пунктик (укороченный) о том, что ежли обращаешся к одному объекту (контролу с длиннющим-пре-длиннющим путем) несколько раз, то лучше пользовать либо объектные переменные, либо конструкцию With - и пальчикам легче и по скорости выполнения быстрее. Ок. 2Владимир Саныч Forms!MyForm.Controls!MyControl. Properties! Value Value в Properties нету :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 13:54 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Это есть необъяснимая загадка. Да, я уже и сам убедился, что в коллекции Properties имя Value отсутствует напрочь. Однако вот цитата из хелпа (курсив мой): You can use the Value property to determine or specify if a control is selected, the selected value or option within the control, or the text contained in a text box control. ... The Value property returns or sets a control's default property, which is the property that is assumed when you don't explicitly specify a property name. ... This means that the following two statements are equivalent. Forms!frmCustomers!optCreditApproved.Value = True Forms!frmCustomers!optCreditApproved = True Получается, что есть свойства, обратиться к которым можно только определенным способом... Гм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 14:21 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
2 ВС Да, уж... А вот еще: такая процедура Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. дает такие результаты: Forms![Форма1].Controls![Поле1] - 17,36 Forms![Форма1]![Поле1] - 17,36 me![Поле1] - 11,5 me![Поле1].value - 15,8 me.Controls.Item(0) - 10,4 me.Controls(0) - 10,4 me(0) - 11,5 me(0).value - 13.9 me("Поле1") - 12.7 me("Поле1").value - 15.0 Получается, что если в одном случае более полной записи скорость выполнения заметно падает, а в другом наоборот возрастает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 14:52 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Итого: .Item - не влияет Me - хорошо .Controls - хорошо, когда обращение по номеру, и не влияет, когда по имени .Value - плохо и обращение со стрингом хуже, чем по номеру или по имени ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 15:01 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Я кнешна извеняюсь, но я тоже тестил (тогда еще), что отражено в одном из вышеупомянутых топике: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Если присмотреться, то можно увидеть, что скорость при обращени по индексу зависит от самого индекса, вернее, от порядкового номера контрола в форме, и если через индекс обращаться к элементу с индексом 250, то наверно будет быстрее обратиться не через индекс... //не знает, что хочет этим сказать - просто так, знаете ли, дополнение подкинул... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 15:18 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
У меня идея, которая мне самому кажется здравой. Не говорить, какой синтаксис работает быстрее. А сказать только, что скорость может зависеть от синтаксиса по сложным многопараметрическим (sic!) формулам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 15:37 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
"Сейчас прольется чья-то кровь..." Сейчас, сейчас... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 15:44 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
1. Вопросы 1.1. Как обратиться к объекту формы? 1.2. Как обратиться к объекту формы, имя которого вычисляется на лету или содержит специальные символы? 1.3. Как обратиться к объекту подчиненной формы? 1.4. Обращение к объекту формы из контекста формы. 2. Ответы Чтобы прочитать или изменить содержимое или свойство объекта формы, в первую очередь надо составить выражение, позволяющее однозначно определить ссылку именно на этот объект. 2.1. Обращение к объекту формы Выражение, определяющее ссылку на объект формы, в общем виде выглядит так: Forms![Форма1].Controls![Поле1].Value (1) Обратите внимание, что операторы "!" и "." идут через один. Чередуются имена коллекций и их элементов, причем оператор "!" означает, что справа от него указан элемент коллекции, а оператор "." служит дя обращения к свойству этого элемента (см. пп. 3.5 и 3.6). Прямые скобки следует использовать, если имя элемента содержит внутренние пробелы, иначе их наличие не обязательно. Серым цветом здесь и далее выделены коллекции и свойства, используемые Access по умолчанию. Их также можно опускать, если при этом не возникнет двусмысленности. То есть выражение (1) может быть записать по-другому: Forms![Форма1]![Поле1] Будьте внимательны, если пользуетесь подобными сокращениями. В случае, когда формы содержит одноименные элементы различных коллекций (например, поле источника данных формы и элемент коллекции .Controls), пропуск идентификатора коллекции может повлечь за собой неверную работу вашей программы (см. п. 3.6). 2.2. Обращение к объектам, имена которых вычисляются "на лету" или не соответствуют "соглашению об именах". В выражении (1), разделенные оператором ".", перечисляются связки типа Коллекция![Имя элемента] (2) Любую из этих связок можно переписать в виде Коллекция.Item(ПорядковыйНомерЭлементаВколлекции) (3) где ПорядковыйНомерЭлементаВколлекции - выражение, возвращающее целое число (нумерация элементов в коллекции начинается с 0), а также Коллекция.Item("Строка-имя элемента") (4) где в качестве аргумента может быть указано любое выражение, возвращающее значение типа String, соответствующее имени существующего элемента коллекции. 2.3. Обращение к объекту подчиненной формы Корректная ссылка на свойство подчиненной формы или отчета требует указания полного идентификатора формы c использованием свойства Form элемента управления-подчиненная форма: Forms![Форма1].Controls![Форма2].Form.Controls![Поле1].Value В данном примере: Forms![Форма1].Controls![Форма2] является ссылкой на элемент управления, в котором выводится подчиненная форма. А Forms![Форма1].Controls![Форма2].Form является ссылкой на саму подчиненную форму. Указание свойства Form для ссылки на подчиненную форму или на ее свойства является обязательным. Аналогичным образом, с помощью вставки выражений типа .Controls![Форма2].Form (или .Controls(“Форма2”).Form), строятся выражения для подчиненных форм третьего и далее уровней вложености. 2.4. Обращение к объекту формы из контекста формы Для ссылки на текущий экземпляр объекта, в котором в данное время выполняется программа, используется ключевое слово Me. Все процедуры, связанные с текущим объектом, имеют доступ к объекту, указываемому с помощью слова. Пример использования слова Me в модуле формы, содержащей поле Поле1: Me.Controls![Поле1].Value 2.5. Ускорение работы программ. При построении выражений, определяющих ссылки на объект, вам следует иметь в виду, что программа, использующая ключевое слово Me, выполняется быстрее, чем использующая полный синтаксис имени объекта. Причем, чем больше уровень вложенности подчиненной формы, тем больший выигрыш в скорости вы получите, используя Me. если вам требуется обратиться к свойству .Value объекта, ключевое слово .Value лучше опустить. выражение типа (4) выполняется медленнее, чем (3) и (2). Кроме того, если в некотором фрагменте кода встречаются две и более ссылок а некоторый объект, присвойте его объектной переменной. Каждый раз, когда вы ссылаетесь на объект, Access приходится выяснять, к какому объекту относится ссылка, что приводит к выполнению лишней работы. Но если присвоить ссылку на объект переменной, Access «ищет» объект всего один раз и кэширует ссылку на него в памяти. Имейте в виду, что после окончания использования объектной переменной, ее следует очистить: objVar = nothing Примечания: вместо инструкции «.Value», использованной в большинстве примеров, может быть указано любое доступное свойство или метод объекта формы, например, .Name, .Width, .Enabled, .Tag и т.д. Если требуется прочитать или изменить именно содержимое объекта, то инструкцию «.Value» можно не использовать. все вышесказанное в равной мере относится и к отчетам, если заменить все вхождения ключевых слов Form и Forms на Report и Reports. 3. Дополнительная информация 3.1. Построитель выражений некоторых русифицированных версий Microsoft Access автоматически ставит несуществующую инструкцию [Форма] вместо [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 описаны довольно обширные «правила наименования объектов», суть которых сводится к рекомендации давать уникальные имена полям таблиц, самим таблицам, формам, переменным, функциям и пр. Причем имена не должны совпадать с длинным перечнем зарезервированных слов. В большинстве случаев вы можете отступать от этих правил, но в этом случае вы будете действовать на свой страх и риск. Несмотря на вышеуказанные правила, встроенные мастера создания форм создают поля с именами, совпадающими с именами соответствующих полей таблицы-источника данных. В этом случае следует использовать полный синтаксис обращения к объекту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 15:51 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
> "Сейчас прольется чья-то кровь..." > Сейчас, сейчас... Предчувствия его не обманули! > Выражение, определяющее ссылку на объект формы, в общем виде выглядит так: > Forms![Форма1].Controls![Поле1].Value (1) Это ссылка не на объект, а на его Value. > Прямые скобки Вроде они назывались квадратными... (?) > следует использовать, если имя элемента содержит внутренние пробелы, иначе их наличие не обязательно. А также минусы и прочую дребедень из какого-то списка. > Кроме того, если в некотором фрагменте кода встречаются две и более ссылок а некоторый объект, присвойте его объектной переменной. Или пользуйтесь With. > В принципе, их использование необходимо только для элементов, чьи имена содержат внутренние пробелы. Или прочую дребедень. > Обратите внимание: название формы, под которым она хранится в файле базы данных, и значение ее свойства Имя (Name) в роли объекта-подчиненной формы, которое и следует использовать в ссылках, – не одно и тоже! Это как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 16:06 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
А хорошо, что я не взялся писать альтернативный текст... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 16:15 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
2ВС Нашел-таки, к чему придраться :)) >Вроде они назывались квадратными... (?) В хелпе 97-го - прямые. >А также минусы и прочую дребедень из какого-то списка. Ок. >> Обратите внимание: название формы, под которым она хранится в файле базы данных, и значение ее свойства Имя (Name) в роли объекта-подчиненной формы, которое и следует использовать в ссылках, – не одно и тоже! > Это как? Да фих знает как сказать. Форма называется "Форма2", а ее контрол в Форме1 может иметь имя "Абырвалг". И писать придется [Форм1]![Абырвалг]![Поле1]. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 16:16 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
>А хорошо, что я не взялся писать альтернативный текст... Это еще почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 16:17 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
это... с первого прочтения не въехал ни во что практически :) Т.е. это не значит, что плохо написано, а значит то я прочитал то, что я знаю (знания былы оформлены словами) и меня постигло "растеряйство" :) Почитаю еще позже, а пока могу добавить, что не objVar = nothing, а Set objVar = nothing. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 16:19 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
> Нашел-таки, к чему придраться :)) Работа у нас такая... :^) >> Обратите внимание: название формы, под которым она хранится в файле базы данных, и значение ее свойства Имя (Name) в роли объекта-подчиненной формы, которое и следует использовать в ссылках, – не одно и тоже! > Это как? > Форма называется "Форма2", а ее контрол в Форме1 может иметь имя "Абырвалг". И писать придется [Форм1]![Абырвалг]![Поле1]. А. Теперь дошло. Тогда: Во-первых, это не значение ее свойства Имя (Name) в роли объекта-подчиненной формы, а значение свойства Имя (Name) того контрола, в котором она сидит. Во-вторых, не [Форм1]![Абырвалг]![Поле1], а [Форм1]![Абырвалг].Form![Поле1] - ты же сам написал: Указание свойства Form для ссылки на подчиненную форму или на ее свойства является обязательным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 16:22 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
> > А хорошо, что я не взялся писать альтернативный текст... > Это еще почему? А у тебя лучше вышло. Мои поправки - не в счет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 16:23 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
> Во-вторых, не [Форм1]![Абырвалг]![Поле1], а [Форм1]![Абырвалг].Form![Поле1] Хехе А без твоих и Нуф-Нуфовских поправок ничего бы и не вышло. Ланда, через полчасика очередное творение положу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 16:29 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
и еще одно "это..." :) это... лично мне как начинающему аксессисту, ну нифига не понятно когда же что пользовать! Например: Forms![Форма1]![Поле1] - совсем не понятно, что без данной ссылки не обойтись при обращении к контролу другой открытой формы . Т.е. я имею сказать, что необходимо к каждому варианту добавить Плюсы и Минусы использования (где можно указывать и отностилельную скорость выполнения в процентах), или что-то типа "Когда нужно использовать данный вариант" - выбрать вариант обращения к объекту (из представленных) для меня, как для начинающего аксессиста, ну просто не под силам, т.к. они просто перечислены и все :( И еще про обращение через индексы. Да быстро. Да удобно (может быть иногда). НО!!! Индексы контролов могут меняться при добавлении/удалении/изменении_z-расположения, делая код неработоспособным и найти такие ссылки по индексам в коде оч.сложно (А вот на какой контрол ссылкается в форме код Me(1) - на Контрол "Пупырышки" или контрол "Мурашки"? :) пока фсе... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 16:51 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
1. Вопросы 1.1. Как обратиться к объекту формы? 1.2. Как обратиться к объекту формы, имя которого вычисляется на лету или содержит специальные символы? 1.3. Как обратиться к объекту подчиненной формы? 1.4. Обращение к объекту формы из контекста этой формы. 2. Ответы Чтобы прочитать или изменить содержимое или свойство объекта формы, в первую очередь надо составить выражение, позволяющее однозначно определить ссылку именно на этот объект. 2.1. Обращение к объекту формы Выражение, определяющее ссылку на свойство .Value (значение) объекта формы, в общем виде выглядит так: Forms![Форма1].Controls![Поле1].Value (1) Обратите внимание, что операторы "!" и "." идут через один. Чередуются имена коллекций и их элементов, причем оператор "!" означает, что справа от него указан элемент коллекции, а оператор "." служит дя обращения к свойству этого элемента (см. пп. 3.5 и 3.6). Прямые скобки следует использовать, если имя элемента содержит внутренние пробелы или другие специальные символы (кроме, соответственно, "]" и "["), иначе их наличие не обязательно. Серым цветом здесь и далее выделены коллекции и свойства, используемые Access по умолчанию. Их также можно опускать, если при этом не возникнет двусмысленности. То есть выражение (1) может быть записать по-другому: Forms![Форма1]![Поле1] Будьте внимательны, если пользуетесь подобными сокращениями. В случае, когда формы содержит одноименные элементы различных коллекций (например, поле источника данных формы и элемент коллекции .Controls), пропуск идентификатора коллекции может повлечь за собой неверную работу вашей программы (см. п. 3.6). 2.2. Обращение к объектам, имена которых вычисляются "на лету" или не соответствуют "соглашению об именах". В выражении (1), разделенные оператором ".", перечисляются связки типа Коллекция![Имя элемента] (2) Любую из этих связок можно переписать в виде Коллекция.Item(ПорядковыйНомерЭлементаВколлекции) (3) где ПорядковыйНомерЭлементаВколлекции - выражение, возвращающее целое число (нумерация элементов в коллекции начинается с 0), а также Коллекция.Item("Строка-имя элемента") (4) где в качестве аргумента может быть указано любое выражение, возвращающее значение типа String, соответствующее имени существующего элемента коллекции. 2.3. Обращение к объекту подчиненной формы Корректная ссылка на свойство подчиненной формы или отчета требует указания полного идентификатора формы c использованием свойства Form элемента управления-подчиненная форма: Forms![Форма1].Controls![Форма2].Form.Controls![Поле1].Value В данном примере: Forms![Форма1].Controls![Форма2] является ссылкой на элемент управления, в котором выводится подчиненная форма. А Forms![Форма1].Controls![Форма2].Form является ссылкой на саму подчиненную форму. Указание свойства Form для ссылки на подчиненную форму или на ее свойства является обязательным. Аналогичным образом, с помощью вставки выражений типа .Controls![Форма2].Form (или .Controls(“Форма2”).Form), строятся выражения для подчиненных форм третьего и далее уровней вложености. 2.4. Обращение к объекту формы из контекста этой формы Для ссылки на текущий экземпляр объекта, в котором в данное время выполняется программа, используется ключевое слово Me. Все процедуры, связанные с текущим объектом, имеют доступ к объекту, указываемому с помощью слова. Пример использования слова Me в модуле формы, содержащей поле Поле1: Me.Controls![Поле1].Value 2.5. Ускорение работы программ. При построении выражений, определяющих ссылки на объект, вам следует иметь в виду, что программа, использующая ключевое слово Me, выполняется быстрее, чем использующая полный синтаксис имени объекта. Причем, чем больше уровень вложенности подчиненной формы, тем больший выигрыш в скорости вы получите, используя Me. если вам требуется обратиться к свойству .Value объекта, ключевое слово .Value лучше опустить. выражение типа (4) выполняется медленнее, чем (3) и (2). Кроме того, если в некотором фрагменте кода встречаются две и более ссылок а некоторый объект, присвойте его объектной переменной или используйте блок With. Каждый раз, когда вы ссылаетесь на объект, Access приходится выяснять, к какому объекту относится ссылка, что приводит к выполнению лишней работы. Но если, например, присвоить ссылку на объект переменной, Access «ищет» объект всего один раз и кэширует ссылку на него в памяти. Имейте в виду, что во втором случае, после окончания использования объектной переменной, ее следует очистить: Set objVar = nothing Примечания: вместо инструкции «.Value», использованной в большинстве примеров, может быть указано любое доступное свойство или метод объекта формы, например, .Name, .Width, .Enabled, .Tag и т.д. Если требуется прочитать или изменить именно содержимое объекта, то инструкцию «.Value» можно не использовать. все вышесказанное в равной мере относится и к отчетам, если заменить все вхождения ключевых слов Form и Forms на Report и Reports. 3. Дополнительная информация 3.1. Построитель выражений некоторых русифицированных версий Microsoft Access автоматически ставит несуществующую инструкцию [Форма] вместо [Form]. Для корректной работы программы следует вручную исправить полученное выражение. 3.2. Некоторые построители выражений обособляют все названия полей и форм, а также ключевые слов прямыми скобками, например, так: [Forms]![Форма1]![Форма2].[Form]![Поле1].[Value]. В принципе, их использование необходимо только для элементов, чьи имена содержат внутренние пробелы или другие специальные символы (за исключением самих прямых скобок - тогда надо пользоваться выражениями типа (3) или (4)). 3.3. В «Соглашении об именах полей, элементов управления и объектов» сказано, что имя может включать любую комбинацию букв, цифр, пробелов и специальных символов за исключением точки (.), восклицательного знака (!), надстрочного символа (`), прямых скобок ([ ]) и управляющих символов (с кодами ASCII от 0 до 31), а также не должно начинаться с символа пробела. Однако вы легко сможете создать объект, имя которого нарушает эти правила. Если вы решили спорить с программистами из Microsoft, тогда следует быть готовым к тому, что, например, «Пробелы в именах могут при некоторых обстоятельствах вызывать конфликты в программах Visual Basic». 3.4. Обратите внимание: название формы, под которым она хранится в файле базы данных, и имя (Name) объекта .Control, содержащего эту подчиненную формы, которое и следует использовать в ссылках, – не одно и тоже! 3.5. Отличия «.» и «!». Из системы помощи Microsoft Access 97: Операторы ! и . (точка) в идентификаторах указывают тип элемента, стоящего справа от оператора. Оператор ! указывает, что следующий за ним элемент является элементом, определяемым пользователем (элементом семейства). Например, с помощью оператора ! определяют ссылку на открытую форму, отчет или элемент управления в открытой форме или отчете. (Forms![Заказы]![КодЗаказа]) Оператор . (точка) обычно указывает, что следующий за ним элемент определен в Microsoft Access. Например, оператор . (точка) используется для ссылок на свойства форм, отчетов и элементов управления. Допускается также использование оператора . (точка) для ссылок на значение поля в инструкции SQL, метод Visual Basic for Application или семейство. Например, идентификатор Forms![Заказы].Controls представляет ссылку на семейство Controls формы «Заказы». 3.6. Совпадающие наименования полей, переменных, полей данных. В системе помощи Microsoft Access описаны довольно обширные «правила наименования объектов», суть которых сводится к рекомендации давать уникальные имена полям таблиц, самим таблицам, формам, переменным, функциям и пр. Причем имена не должны совпадать с длинным перечнем зарезервированных слов. В большинстве случаев вы можете отступать от этих правил, но в этом случае вы будете действовать на свой страх и риск. Несмотря на вышеуказанные правила, встроенные мастера создания форм создают поля с именами, совпадающими с именами соответствующих полей таблицы-источника данных. В этом случае следует использовать полный синтаксис обращения к объекту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 16:55 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
2 Нуф-Нуф > и еще одно "это..." :) это... лично мне как начинающему аксессисту, ну нифига не понятно когда же что пользовать! Мне тоже, как начинающему аксессисту, почти не ясно, что, и главное, как, я тут понаписал > Forms![Форма1]![Поле1] - совсем не понятно, что без данной ссылки не обойтись при обращении к контролу другой открытой формы. Это и не нужно. Я дал это как минимальный способ обращения, и лишь позже, упомянув про контексты, ввел "Me". >Т.е. я имею сказать, что необходимо к каждому варианту добавить Плюсы и Минусы использования (где можно указывать и отностилельную скорость выполнения в процентах) Про скорость вроде бы есть в соответствующем разделе... >, или что-то типа "Когда нужно использовать данный вариант" - выбрать вариант обращения к объекту (из представленных) для меня, как для начинающего аксессиста, ну просто не под силам, т.к. они просто перечислены и все :( Дык, бери самый длинный - не ошибешься. А вообще, цитируя Гетца: "В целом оптимизация кода обычно влияет на быстродействие приложения в гораздо меньшей степени, чем оптимизация доступа к данным, а всего один дополнительный индекс принесет больше пользы, чем долгие часы, затраченные на оптимизацию кода VBA". А про индексы - как бы само сабой разумеется, что прежде чем написать Me(0), надо узнать, кто в этом "0" живет. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 17:05 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Разделы "Ускорение работы" и "Примечания" перенес в "Дополнительную информацию". И давайте, пожалста, еще замечания, а то у меня завтра интернет халявный кончится, и я буду приходить редко и только с вопросами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 17:35 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
> И давайте, пожалста, еще замечания, а то у меня завтра интернет халявный кончится, и я буду приходить редко и только с вопросами. А я как раз хотел недельку подумать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 17:36 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
2ВС Действительно, может быть, лучше я вышлю тебе текст со всеми оформлятелями? И тады можно будет, в самом деле, подумать и пообсуждать спокойно и без спешки? А я потом буду ходить в готовый ФАК? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 17:41 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Geo друг, но истина "та тоже" :) >Это и не нужно. Я дал это как минимальный способ обращения, и лишь позже, упомянув про контексты, ввел "Me". Не согласен, но спорить с тобой не буду - ты автор, тебе и карты :) Просто останусь при мнении, что к КАЖДОМУ варианту надо добавить когда и зачем и почему пользовать надо так... >Про скорость вроде бы есть в соответствующем разделе... ключевое слово "в процентах" имелось в виду... >Дык, бери самый длинный - не ошибешься. А вообще, цитируя Гетца: С Гетцем согласен полностью, с тобой (бери самый длинный) не совсем. Или, во всяком случае, не понял что есть "самый длинный" - по количеству символов длинный? :) >А про индексы - как бы само сабой разумеется, что прежде чем написать Me(0), надо узнать, кто в этом "0" живет. :) Ага... Узнаем, пишем. Через неделю (не говоря уже "через год") удаляем из формы какую-нить ненужную линию или кнопочку и... наслаждаемся ошибками типа "Объект не поддерживает свойство или метод". Т.е. индексы сместятся и то что раньше было нашим "Полем", теперь стало нашей Кнопкой со всеми вытекающими... А ежли ссылаться по имени (а не по индексу), то добавляй-задобавляйся и удаляй-заудаляйся и меняй Z-zаменяйся - код останется работоспособным. во шо я имел... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 17:51 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Нуф-Нуфу :) >>Это и не нужно. Я дал это как минимальный способ обращения, и лишь позже, упомянув про контексты, ввел "Me". >Не согласен, но спорить с тобой не буду - ты автор, тебе и карты :) Просто останусь при мнении, что к КАЖДОМУ варианту надо добавить когда и зачем и почему пользовать надо так... Когда и зачем - есть раздел про скорость, упомянуто про неоднозначность. См., что тебе подходит, и используй соответственно. >>Про скорость вроде бы есть в соответствующем разделе... >ключевое слово "в процентах" имелось в виду... Очень нестабильные результаты в процентах. Сравни твои и мои измерения. Единственное, что можно сказать с уверенностью - работает "быстрее" или "медленнее". >>Дык, бери самый длинный - не ошибешься. А вообще, цитируя Гетца: >С Гетцем согласен полностью, с тобой (бери самый длинный) не совсем. Или, во всяком случае, не понял что есть "самый длинный" - по количеству символов длинный? :) В данном случае да. Имею в виду, что если не уверен, то бери полную запись, без Me и не опуская умолчания. >>А про индексы - как бы само сабой разумеется, что прежде чем написать Me(0), надо узнать, кто в этом "0" живет. :) >Ага... Узнаем, пишем. Через неделю (не говоря уже "через год") удаляем из формы какую-нить ненужную линию или кнопочку и... Согласен. Сейчас допишу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 18:01 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
>Имею в виду, что если не уверен, то бери полную запись, без Me и не опуская умолчания. Это первый шаг к жутким головнякам... Пишешь код, который потом собираешся использовать повторно, копируешь его в новую форму и... меняешь имена форм или удевляешься, а почему нажимаю кнопку в этой форме, а срабатывает другая? Еще раз повторю, что полный синтаксис доступа к форме вместо Ме можно использовать ТОЛЬКО в случае обращения к ДРУГОЙ форме! Для ссылки на контролы в форме с кодом ТОЛЬКО МЕ! //Впрочем, это уже цикл... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 18:14 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Нуф-Нуфу Ну, если ты настаиваешь :) Добавлю, что если из контекста, то "следует использовать" и далее по тексту :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 18:20 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Выкладываю очередной (млин) вариант, и иду клеить обои. Если вернусь, прошу считать меня коммунистом: 1. Вопросы 1.1. Как обратиться к объекту формы? 1.2. Как обратиться к объекту формы, имя которого вычисляется на лету или содержит специальные символы? 1.3. Как обратиться к объекту подчиненной формы? 1.4. Обращение к объекту формы из контекста этой формы. 2. Ответы Чтобы прочитать или изменить содержимое или свойство объекта формы, в первую очередь надо составить выражение, позволяющее однозначно определить ссылку именно на этот объект. 2.1. Обращение к объекту формы Выражение, определяющее ссылку на свойство .Value (значение) объекта формы, в общем виде выглядит так: Forms![Форма1].Controls![Поле1].Value (1) Обратите внимание, что операторы "!" и "." идут через один. Чередуются имена коллекций и их элементов, причем оператор "!" означает, что справа от него указан элемент коллекции, а оператор "." служит дя обращения к свойству этого элемента (см. пп. 3.5 и 3.6). Прямые скобки следует использовать, если имя элемента содержит внутренние пробелы или другие специальные символы (кроме, соответственно, "]" и "["), иначе их наличие не обязательно. Серым цветом здесь и далее выделены коллекции и свойства, используемые Access по умолчанию. Их также можно опускать, если при этом не возникнет двусмысленности. То есть выражение (1) может быть записать по-другому: Forms![Форма1]![Поле1] Будьте внимательны, если пользуетесь подобными сокращениями. В случае, когда формы содержит одноименные элементы различных коллекций (например, поле источника данных формы и элемент коллекции .Controls), пропуск идентификатора коллекции может повлечь за собой неверную работу вашей программы (см. п. 3.6). 2.2. Обращение к объектам, имена которых вычисляются "на лету" или не соответствуют "соглашению об именах". В выражении (1), разделенные оператором ".", перечисляются связки типа Коллекция![Имя элемента] (2) Любую из этих связок можно переписать в виде Коллекция.Item("Строка-имя элемента") (3) где в качестве аргумента может быть указано любое выражение, возвращающее значение типа String, соответствующее имени существующего элемента коллекции, а также Коллекция.Item(ПорядковыйНомерЭлементаВколлекции) (4) где ПорядковыйНомерЭлементаВколлекции - выражение, возвращающее целое число (нумерация элементов в коллекции начинается с 0). При изменении состава коллекции (например при удалении или добавлении поля в форму) порядок нумерации элементов может измениться. Поэтому, прежде чем использовать выражение (4), следует убедиться, что элемент с данным порядковым номером действительно является тем элементом, к которому вы хотите обратиться. 2.3. Обращение к объекту подчиненной формы Корректная ссылка на свойство подчиненной формы или отчета требует указания полного идентификатора формы c использованием свойства Form элемента управления-подчиненная форма: Forms![Форма1].Controls![Форма2].Form.Controls![Поле1].Value В данном примере: Forms![Форма1].Controls![Форма2] является ссылкой на элемент управления, в котором выводится подчиненная форма. А Forms![Форма1].Controls![Форма2].Form является ссылкой на саму подчиненную форму. Указание свойства Form для ссылки на подчиненную форму или на ее свойства является обязательным. Аналогичным образом, с помощью вставки выражений типа .Controls![Форма2].Form (или .Controls(“Форма2”).Form), строятся выражения для подчиненных форм третьего и далее уровней вложености. 2.4. Обращение к объекту формы из контекста этой формы Для ссылки на текущий экземпляр объекта, в котором в данное время выполняется программа, рекомендуется использовать ключевое слово Me. Все процедуры, связанные с текущим объектом, имеют доступ к объекту, указываемому с помощью слова Me. Пример использования слова Me в модуле формы, содержащей поле Поле1: Me.Controls![Поле1].Value 3. Дополнительная информация 3.1. Построитель выражений некоторых русифицированных версий Microsoft Access автоматически ставит несуществующую инструкцию [Форма] вместо [Form]. Для корректной работы программы следует вручную исправить полученное выражение. 3.2. Некоторые построители выражений обособляют все названия полей и форм, а также ключевые слов прямыми скобками, например, так: [Forms]![Форма1]![Форма2].[Form]![Поле1].[Value]. В принципе, их использование необходимо только для элементов, чьи имена содержат внутренние пробелы или другие специальные символы (за исключением самих прямых скобок - тогда надо пользоваться выражениями типа (3) или (4)). 3.3. В «Соглашении об именах полей, элементов управления и объектов» сказано, что имя может включать любую комбинацию букв, цифр, пробелов и специальных символов за исключением точки (.), восклицательного знака (!), надстрочного символа (`), прямых скобок ([ ]) и управляющих символов (с кодами ASCII от 0 до 31), а также не должно начинаться с символа пробела. Однако вы легко сможете создать объект, имя которого нарушает эти правила. Если вы решили спорить с программистами из Microsoft, тогда следует быть готовым к тому, что, например, «Пробелы в именах могут при некоторых обстоятельствах вызывать конфликты в программах Visual Basic». 3.4. Обратите внимание: название формы, под которым она хранится в файле базы данных, и имя (Name) объекта .Control, содержащего эту подчиненную формы, которое и следует использовать в ссылках, – не одно и тоже! 3.5. Отличия «.» и «!». Из системы помощи Microsoft Access 97: Операторы ! и . (точка) в идентификаторах указывают тип элемента, стоящего справа от оператора. Оператор ! указывает, что следующий за ним элемент является элементом, определяемым пользователем (элементом семейства). Например, с помощью оператора ! определяют ссылку на открытую форму, отчет или элемент управления в открытой форме или отчете. (Forms![Заказы]![КодЗаказа]) Оператор . (точка) обычно указывает, что следующий за ним элемент определен в Microsoft Access. Например, оператор . (точка) используется для ссылок на свойства форм, отчетов и элементов управления. Допускается также использование оператора . (точка) для ссылок на значение поля в инструкции SQL, метод Visual Basic for Application или семейство. Например, идентификатор Forms![Заказы].Controls представляет ссылку на семейство Controls формы «Заказы». 3.6. Совпадающие наименования полей, переменных, полей данных. В системе помощи Microsoft Access описаны довольно обширные «правила наименования объектов», суть которых сводится к рекомендации давать уникальные имена полям таблиц, самим таблицам, формам, переменным, функциям и пр. Причем имена не должны совпадать с длинным перечнем зарезервированных слов. В большинстве случаев вы можете отступать от этих правил, но в этом случае вы будете действовать на свой страх и риск. Несмотря на вышеуказанные правила, встроенные мастера создания форм создают поля с именами, совпадающими с именами соответствующих полей таблицы-источника данных. В этом случае следует использовать полный синтаксис обращения к объекту. 3.7. Ускорение работы программ. При построении выражений, определяющих ссылки на объект, следует иметь в виду, что программа, использующая ключевое слово Me, выполняется быстрее, чем использующая полный синтаксис имени объекта. Причем, чем больше уровень вложенности подчиненной формы, тем больший выигрыш в скорости вы получите, используя Me. если вам требуется обратиться к свойству .Value объекта, ключевое слово .Value лучше опустить. выражение типа (3) выполняется медленнее, чем (2) и (4). Кроме того, если в некотором фрагменте кода встречаются две и более ссылок а некоторый объект, присвойте его объектной переменной или используйте блок With. Каждый раз, когда вы ссылаетесь на объект, Access приходится выяснять, к какому объекту относится ссылка, что приводит к выполнению лишней работы. Но если, например, присвоить ссылку на объект переменной, Access «ищет» объект всего один раз и кэширует ссылку на него в памяти. Имейте в виду, что во втором случае, после окончания использования объектной переменной, ее следует очистить: Set objVar = nothing 3.8. Примечания: вместо инструкции «.Value», использованной в большинстве примеров, может быть указано любое доступное свойство или метод объекта формы, например, .Name, .Width, .Enabled, .Tag и т.д. Если требуется прочитать или изменить именно содержимое объекта, то инструкцию «.Value» можно не использовать. все вышесказанное в равной мере относится и к отчетам, если заменить все вхождения ключевых слов Form и Forms на Report и Reports. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 18:47 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
> Действительно, может быть, лучше я вышлю тебе текст со всеми оформлятелями? Я тебя настолько достал? > И тады можно будет, в самом деле, подумать и пообсуждать спокойно и без спешки? А чем в форуме плохо? > А я потом буду ходить в готовый ФАК? :) Это ты к тому, чтобы я все написал вместо тебя? По-моему, ты уже замечательно это сделал. > например, поле источника данных формы и элемент коллекции .Controls Вообще-то, такой способ обращения к полям источника данных - фича недокументированная. Ее лучше не рекламировать. А упомянуть здесь можно возможную путаницу со свойствами самой формы (напр., Name). > При изменении состава коллекции (например при удалении или добавлении поля в форму) порядок нумерации элементов может измениться. И вообще обращением по номеру обычно пользуются в цикле, проходящем по всем элементам коллекции, да и то только если по какой-то причине не хочется пользоваться командой For Each. > Имейте в виду, что во втором случае, после окончания использования объектной переменной Что такое второй случай? Вроде второй случай здесь - это With. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 20:15 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Млин, Володь, если б ты так "Сжатие БД" вычитывал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 20:41 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Вань, я прошу прощения, но в сжатии я меньший специалист... :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 21:09 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
>Я тебя настолько достал? Млин, ведь хотел же, чтоб так не воспринял. Владимир Саныч, ни в коем случае. Я повторюсь, если б не твои подсказки/поправки, я б и сам сейчас не разбирался толком в вопросе. И я очень за это благодарен, чес-слово. >А чем в форуме плохо? А тем, что послезавтра у мя халявного инета не будет, т.е. он будет либо нехалявный, либо (через мобилу дорого, а стационарного телефона у мя нету) никакой :) > Это ты к тому, чтобы я все написал вместо тебя? По-моему, ты уже замечательно это сделал. Хех, спасиба. Но это не моя (вернее, не только моя заслуга). >> например, поле источника данных формы и элемент коллекции .Controls > Вообще-то, такой способ обращения к полям источника данных - фича недокументированная. Ее лучше не рекламировать. А упомянуть здесь можно возможную путаницу со свойствами самой формы (напр., Name). А чего ж ее не рекламировать, если "мастера" так делают. А потом вылазят ошибки, если не полностью обращение писать. Сам натыкался. >> При изменении состава коллекции (например при удалении или добавлении поля в форму) порядок нумерации элементов может измениться. >И вообще обращением по номеру обычно пользуются в цикле, проходящем по всем элементам коллекции, да и то только если по какой-то причине не хочется пользоваться командой For Each. Ок. >Что такое второй случай? Вроде второй случай здесь - это With. Охних. Конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 21:18 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
> Млин, ведь хотел же, чтоб так не воспринял. Я забыл морду поставить. Вот, компенсирую: > >А чем в форуме плохо? > А тем, что послезавтра у мя халявного инета не будет, т.е. он будет либо нехалявный, либо (через мобилу дорого, а стационарного телефона у мя нету) никакой :) А со мной ты как общаться собираешься, если не через Интернет? Ну, приезжай сюда, я тебя по Тель-Авиву покатаю, на набережную сходим, на девочек посмотрим... Можно съездить в Иерусалим на могилу Руставели. > > Вообще-то, такой способ обращения к полям источника данных - фича недокументированная. > А чего ж ее не рекламировать, если "мастера" так делают. А потом вылазят ошибки, если не полностью обращение писать. Сам натыкался. Это все так, но надо сначала объяснить, что это такое. Насколько я понимаю, к этим полям нельзя добраться ни через Controls (их там нет), ни через Fields (у формы нет такой коллекции), а только непосредственно как MyForm!MyField. Вот это и надо сказать предварительно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 21:36 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
>А со мной ты как общаться собираешься, если не через Интернет? Ну, приезжай сюда, я тебя по Тель-Авиву покатаю, на набережную сходим, на девочек посмотрим... Можно съездить в Иерусалим на могилу Руставели. :)) >Это все так, но надо сначала объяснить, что это такое. Насколько я понимаю, к этим полям нельзя добраться ни через Controls (их там нет), ни через Fields (у формы нет такой коллекции), а только непосредственно как MyForm!MyField. Вот это и надо сказать предварительно. А я и не говорю, как к ним добраться, я говорю, что Несмотря на вышеуказанные правила, встроенные мастера создания форм создают поля с именами, совпадающими с именами соответствующих полей таблицы-источника данных. В этом случае следует использовать полный синтаксис обращения к объекту. И все, собсна. Что объяснить? Дополнительно написать, что если не использовать полный синтаксис, можно наткнуться на поле источника данных, а можно и не наткнуться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 21:44 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Я только говорю, что, прежде чем упоминать что-то, нужно объяснить, что это такое. Особенно когда речь идет о вещи, которую в хелпе не найти. Кстати, если имя контрола совпадает с именем поля, то обращение MyForm!MyField приводит именно к контролу, так что никаких проблем нет. Если поле с таким именем есть, а контрола нет, тогда тоже никаких проблем, приходим к полю. А проблемы начинаются тогда, когда случайно есть и контрол, и поле, но источник этого контрола не это поле. Вот тогда может случиться путаница. Тогда обращение через .Controls приводит к именно контролу (и снимает неоднозначность), а для именно поля никакого способа нет. И еще кстати. В отчетах такой способ обращения к полям не работает. Поэтому хотя для отчетов и верно все сказанное про формы, - но все-таки не совсем все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 22:23 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Понил. Пошло пить пиво и думать. Завтра опять новый вариант положу. Спокночи :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 22:32 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
!לרוויה (ли-рваЯ!) (В русском такого нет. Это как приятного аппетита, но не едящему, а пьющему. Перевод - до насыщения (жидкостью), до утоления жажды.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 22:40 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Всё таки как и говорил ВС квадратные скобки они как и были квадратными, так и остались, не смотря на то что переводчики так их испохабили и из математики дальше деления не пошли. Так что всё таки их правильно называть квадратными, но если настаиваешь на присутствии названия "прямые скобки", то упомяни где-нить их так обзывают переводчики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2003, 11:48 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Внес изменения: в п. 2.1 : ...квадратные скобки ([] - в русифицированной версии Access они называются "прямыми") следует использовать, если имя элемента содержит внутренние пробелы или другие специальные символы (кроме, соответственно, "]" и "["), иначе их наличие не обязательно. далее "прямые" заменил на "квадратные" там же: Будьте внимательны, если пользуетесь подобными сокращениями. В случае, когда формы содержит одноименные элементы различных коллекций, пропуск идентификатора коллекции может повлечь за собой неверную работу вашей программы (см. п. 3.6). Хороший способ избегать подобных "совпадений" использовать префиксы в именах, например, название поля "Поле1" в форме может иметь имя "пфПоле1" и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2003, 22:12 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Ужас какой. "Название может иметь имя...". Очень хорошо. Завтра переделаю, но идея - добавить рекомендацию использовать префиксы и убрать упоминание о полях источника данных, надеюсь, останется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2003, 23:36 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Они оба среднего рода, кто там кого может иметь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2003, 23:46 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
>!לרוויה (ли-рваЯ!) >(В русском такого нет. Это как приятного аппетита, но не едящему, а пьющему. Перевод - до насыщения (жидкостью), до утоления жажды.) Вот переводы на русский язык. 1.(MP3) 2.(MP3) 3.(MP3) 4.(MP3) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2003, 09:25 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
1. Вопросы 1.1. Как обратиться к объекту формы? 1.2. Как обратиться к объекту формы, имя которого вычисляется на лету или содержит специальные символы? 1.3. Как обратиться к объекту подчиненной формы? 1.4. Обращение к объекту формы из контекста этой формы. 2. Ответы Чтобы прочитать или изменить содержимое или свойство объекта формы, в первую очередь надо составить выражение, позволяющее однозначно определить ссылку именно на этот объект. 2.1. Обращение к объекту формы Выражение, определяющее ссылку на свойство .Value (значение) объекта формы, в общем виде выглядит так: Forms![Форма1].Controls![Поле1].Value (1) Обратите внимание, что операторы "!" и "." идут через один. Чередуются имена коллекций и их элементов, причем оператор "!" означает, что справа от него указан элемент коллекции, а оператор "." служит дя обращения к свойству этого элемента (см. пп. 3.5 и 3.6). квадратные скобки ([] - в русифицированной версии Access они называются "прямыми") следует использовать, если имя элемента содержит внутренние пробелы или другие специальные символы (кроме, соответственно, "]" и "["), иначе их наличие не обязательно. Серым цветом здесь и далее выделены коллекции и свойства, используемые Access по умолчанию. Их также можно опускать, если при этом не возникнет двусмысленности. То есть выражение (1) может быть записать по-другому: Forms![Форма1]![Поле1] Будьте внимательны, если пользуетесь подобными сокращениями. В случае, когда формы содержит одноименные элементы различных коллекций, пропуск идентификатора коллекции может повлечь за собой неверную работу вашей программы (см. п. 3.6). Хороший способ избегать подобных "совпадений" - использовать префиксы в именах, например, поле "Поле1" в форме переименовать в "фпПоле1" и т.п. 2.2. Обращение к объектам, имена которых вычисляются "на лету" или не соответствуют "соглашению об именах". В выражении (1), разделенные оператором ".", перечисляются связки типа Коллекция![Имя элемента] (2) Любую из этих связок можно переписать в виде Коллекция.Item("Строка-имя элемента") (3) где в качестве аргумента может быть указано любое выражение, возвращающее значение типа String, соответствующее имени существующего элемента коллекции, а также Коллекция.Item(ПорядковыйНомерЭлементаВколлекции) (4) где ПорядковыйНомерЭлементаВколлекции - выражение, возвращающее целое число (нумерация элементов в коллекции начинается с 0). При изменении состава коллекции (например при удалении или добавлении поля в форму) порядок нумерации элементов может измениться. Поэтому, прежде чем использовать выражение (4), следует убедиться, что элемент с данным порядковым номером действительно является тем элементом, к которому вы хотите обратиться. Выражение (4) можно использовать, например, если требуется в цикле перебрать все элементы коллекции. 2.3. Обращение к объекту подчиненной формы Корректная ссылка на свойство подчиненной формы или отчета требует указания полного идентификатора формы c использованием свойства Form элемента управления-подчиненная форма: Forms![Форма1].Controls![Форма2].Form.Controls![Поле1].Value В данном примере: Forms![Форма1].Controls![Форма2] является ссылкой на элемент управления, в котором выводится подчиненная форма. А Forms![Форма1].Controls![Форма2].Form является ссылкой на саму подчиненную форму. Указание свойства Form для ссылки на подчиненную форму или на ее свойства является обязательным. Аналогичным образом, с помощью вставки выражений типа .Controls![Форма2].Form (или .Controls(“Форма2”).Form), строятся выражения для подчиненных форм третьего и далее уровней вложености. 2.4. Обращение к объекту формы из контекста этой формы Для ссылки на текущий экземпляр объекта, в котором в данное время выполняется программа, рекомендуется использовать ключевое слово Me. Все процедуры, связанные с текущим объектом, имеют доступ к объекту, указываемому с помощью слова Me. Пример использования слова Me в модуле формы, содержащей поле Поле1: Me.Controls![Поле1].Value 3. Дополнительная информация 3.1. Построитель выражений некоторых русифицированных версий Microsoft Access автоматически ставит несуществующую инструкцию [Форма] вместо [Form]. Для корректной работы программы следует вручную исправить полученное выражение. 3.2. Некоторые построители выражений обособляют все названия полей и форм, а также ключевые слов квадратными скобками, например, так: [Forms]![Форма1]![Форма2].[Form]![Поле1].[Value]. В принципе, их использование необходимо только для элементов, чьи имена содержат внутренние пробелы или другие специальные символы (за исключением самих квадратных скобок - тогда надо пользоваться выражениями типа (3) или (4)). 3.3. В «Соглашении об именах полей, элементов управления и объектов» сказано, что имя может включать любую комбинацию букв, цифр, пробелов и специальных символов за исключением точки (.), восклицательного знака (!), надстрочного символа (`), квадратных скобок ([ ]) и управляющих символов (с кодами ASCII от 0 до 31), а также не должно начинаться с символа пробела. Однако вы легко сможете создать объект, имя которого нарушает эти правила. Если вы решили спорить с программистами из Microsoft, тогда следует быть готовым к тому, что, например, «Пробелы в именах могут при некоторых обстоятельствах вызывать конфликты в программах Visual Basic». 3.4. Обратите внимание: название формы, под которым она хранится в файле базы данных, и имя (Name) объекта .Control, содержащего эту подчиненную формы, которое и следует использовать в ссылках, – не одно и тоже! 3.5. Отличия «.» и «!». Из системы помощи Microsoft Access 97: Операторы ! и . (точка) в идентификаторах указывают тип элемента, стоящего справа от оператора. Оператор ! указывает, что следующий за ним элемент является элементом, определяемым пользователем (элементом семейства). Например, с помощью оператора ! определяют ссылку на открытую форму, отчет или элемент управления в открытой форме или отчете. (Forms![Заказы]![КодЗаказа]) Оператор . (точка) обычно указывает, что следующий за ним элемент определен в Microsoft Access. Например, оператор . (точка) используется для ссылок на свойства форм, отчетов и элементов управления. Допускается также использование оператора . (точка) для ссылок на значение поля в инструкции SQL, метод Visual Basic for Application или семейство. Например, идентификатор Forms![Заказы].Controls представляет ссылку на семейство Controls формы «Заказы». 3.6. Совпадающие наименования полей, переменных, полей данных. В системе помощи Microsoft Access описаны довольно обширные «правила наименования объектов», суть которых сводится к рекомендации давать уникальные имена полям таблиц, самим таблицам, формам, переменным, функциям и пр. Причем имена не должны совпадать с длинным перечнем зарезервированных слов. В большинстве случаев вы можете отступать от этих правил, но в этом случае вы будете действовать на свой страх и риск. Несмотря на вышеуказанные правила, встроенные мастера создания форм создают поля с именами, совпадающими с именами соответствующих полей таблицы-источника данных. В этом случае следует использовать полный синтаксис обращения к объекту. 3.7. Ускорение работы программ. При построении выражений, определяющих ссылки на объект, следует иметь в виду, что программа, использующая ключевое слово Me, выполняется быстрее, чем использующая полный синтаксис имени объекта. Причем, чем больше уровень вложенности подчиненной формы, тем больший выигрыш в скорости вы получите, используя Me. если вам требуется обратиться к свойству .Value объекта, ключевое слово .Value лучше опустить. выражение типа (3) выполняется медленнее, чем (2) и (4). Кроме того, если в некотором фрагменте кода встречаются две и более ссылок а некоторый объект, присвойте его объектной переменной или используйте блок With. Каждый раз, когда вы ссылаетесь на объект, Access приходится выяснять, к какому объекту относится ссылка, что приводит к выполнению лишней работы. Но если, например, присвоить ссылку на объект переменной, Access «ищет» объект всего один раз и кэширует ссылку на него в памяти. Имейте в виду, что в случае с объектной переменной, после окончания использования ее следует очистить: Set objVar = nothing 3.8. Примечания: вместо инструкции «.Value», использованной в большинстве примеров, может быть указано любое доступное свойство или метод объекта формы, например, .Name, .Width, .Enabled, .Tag и т.д. Если требуется прочитать или изменить именно содержимое объекта, то инструкцию «.Value» можно не использовать. все вышесказанное в равной мере относится и к отчетам, если заменить все вхождения ключевых слов Form и Forms на Report и Reports. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2003, 11:51 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Жалко, что не видно, где именно изменения. Но вроде мне прикопаться не к чему (кроме, может, нескольких ачипяток). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2003, 11:57 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Может я чего пропустил или недопонял, тогда кто мне объяснит. выражение типа (3) выполняется медленнее, чем (2) и (4). У Гетца Access 2002 Разработка настольных приложений. Глава 5. Объекты данных ADO. Что использовать: восклицательный знаки, точку или кавычки? (стр. 192) "... cat.Tables!tblCustomers.Columns!Address.Type cat.Tables("tblCustomers").Columns("Address").Type Оказывается "за кулисами" перед выполнением первого из приведенных операторов его синтаксис всегда преобразуется в соответствии со вторым вариантом, то есть вместо восклицательного знака употребляются скобки с кавычками. Поэтому, используя восклицательный знак, вы несколько повышаете темп ввода, за что расплачиваетесь замедлением выполнения. Мы рекомендуем всегда использовать второй вариант синтаксиса, то есть употреблять скобки с кавычками для обращения к объектам коллекций." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2003, 12:14 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
2incold Да? Я сейчас в 97-м попробовал, Forms!Форма.Controls.Поле таки быстрее, чем Forms("Форма").Controls("Поле"). Не знаю почему Гетц прогнозирует обратное. Да и в хелпах сказано что, в частности, Ме!Поле работает быстрее, чем Ме("Поле")... 2алл Если замечаний нету, то завтра-послезавтра, с повыдергиванными (на мой взгляд:) орфографическими ошибками, сливаю текст мегакнопкой. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 02:30 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Да? Я сейчас в 97-м попробовал, Forms!Форма.Controls.Поле таки быстрее, чем Forms("Форма").Controls("Поле") А интересно каким это способом было определено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 10:53 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Тест на разницу в скорости обработки обращения к коллекции через ! или .("") Celeron 866 Ram 128 Mb Win 98 SE Office XP Developer SP2 MS SQL Server 2000 SP1 Открыта форма имеется поле В цикле от 1 до 20000 в переменную считывается значение из поля затем записывается 1-й вариант обращение Forms!MyForm!MyField 2-й вариант обращение Forms("MyForm")("MyField") Перед началом цикла в переменную l_time =Timer() после цикла l_time =Timer()-l_time Результат (выполнялся 5 раз): 1-й вариант на 1,5% медленнее чем 2-й вариант ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 11:58 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
2 Geo: Если есть желание проверить орфографические ошибки, то давай мне. Я по одной из профессий корректор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 14:17 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
2incold функция проверки нарисована выше, результат: Forms("...")... - 21,6 c., Forms![...]... - 20,9 c. Машинка -Athlon 1333/484ddr266/Seagate B-IV 7200. Вот и вопрос. М.б., действительно, просто выкинуть этот пункт? 2Владимир Саныч Пришли, пожалуйста, сюда: jorgen@mail.ru, свой адрес, завтра-послезавтра отправлю свой текст. Спасибо. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 19:39 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Послано. :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 20:10 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Поправка от Лоха:\r \r В SQL запросах (если там есть что-нибудь типа "Where ID=Forms!Form1!Control1") - только через ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2003, 14:18 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
:( Уже дня три как поздно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2003, 21:14 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
Короче, будем делать версии. :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2003, 00:29 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
В моем корректировании этого топика обнаружился баг. В одном месте проскочило [/ color] с пробелом, из-за чего вторая половина получилась покрашена в неправильный цвет. Будем править баги... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2003, 13:49 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
почему я пишу: Код: plaintext подчиненная форма у меня табличная ширину сделать =0 тоже не получилось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 21:32 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
ты на форму ложил Control с именем [поле21]? Вот и не требуй от него никаких свойств... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2003, 09:11 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
ты на форму ложил Control с именем [поле21]? Вот и не требуй от него никаких свойств... ложил... а как же тогда? Как мне в подчинённой форме скрыть поле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2003, 09:33 |
|
||
|
FAQ: Как обратится к полю формы или подчиненной формы
|
|||
|---|---|---|---|
|
#18+
К разговорам о конфликтах имен. Почти час только что провозился, ища причину выпадений 97-го акцесса. (поменял у отчета источник данных) Пробовал все способы восстановления - бесполезно. При попытке открытия отчета - "отправлять/не отправлять отчет в микрософт?". Оказалось, что у нового источника данных имя поля совпадает с именем контрола на форме. А контрол формы использовался в обработчиках событий и в других контролах. Поменял имя - все ок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2004, 20:41 |
|
||
|
|

start [/forum/topic.php?all=1&fid=45&tid=1675321]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
181ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 513ms |

| 0 / 0 |
