Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
 Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
Geo
Member

Откуда:
Сообщений: 6883
Выкладываю очередной (млин) вариант, и иду клеить обои. Если вернусь, прошу считать меня коммунистом:

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 июн 03, 18:47    [245374]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Владимир Саныч
    Member

    Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
    Сообщений: 40414
    > Действительно, может быть, лучше я вышлю тебе текст со всеми оформлятелями?

    Я тебя настолько достал?

    > И тады можно будет, в самом деле, подумать и пообсуждать спокойно и без спешки?

    А чем в форуме плохо?

    > А я потом буду ходить в готовый ФАК? :)

    Это ты к тому, чтобы я все написал вместо тебя? По-моему, ты уже замечательно это сделал.

    > например, поле источника данных формы и элемент коллекции .Controls

    Вообще-то, такой способ обращения к полям источника данных - фича недокументированная. Ее лучше не рекламировать. А упомянуть здесь можно возможную путаницу со свойствами самой формы (напр., Name).

    > При изменении состава коллекции (например при удалении или добавлении поля в форму) порядок нумерации элементов может измениться.

    И вообще обращением по номеру обычно пользуются в цикле, проходящем по всем элементам коллекции, да и то только если по какой-то причине не хочется пользоваться командой For Each.

    > Имейте в виду, что во втором случае, после окончания использования объектной переменной

    Что такое второй случай? Вроде второй случай здесь - это With.
    29 июн 03, 20:15    [245387]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Нуф-нуф
    Member

    Откуда: КМВ (Северный Кавказ)
    Сообщений: 777
    Млин, Володь, если б ты так "Сжатие БД" вычитывал :)
    29 июн 03, 20:41    [245395]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Владимир Саныч
    Member

    Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
    Сообщений: 40414
    Вань, я прошу прощения, но в сжатии я меньший специалист... :^)
    29 июн 03, 21:09    [245402]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Geo
    Member

    Откуда:
    Сообщений: 6883
    >Я тебя настолько достал?

    Млин, ведь хотел же, чтоб так не воспринял. Владимир Саныч, ни в коем случае. Я повторюсь, если б не твои подсказки/поправки, я б и сам сейчас не разбирался толком в вопросе. И я очень за это благодарен, чес-слово.

    >А чем в форуме плохо?

    А тем, что послезавтра у мя халявного инета не будет, т.е. он будет либо нехалявный, либо (через мобилу дорого, а стационарного телефона у мя нету) никакой :)

    > Это ты к тому, чтобы я все написал вместо тебя? По-моему, ты уже замечательно это сделал.

    Хех, спасиба. Но это не моя (вернее, не только моя заслуга).

    >> например, поле источника данных формы и элемент коллекции .Controls
    > Вообще-то, такой способ обращения к полям источника данных - фича недокументированная. Ее лучше не рекламировать. А упомянуть здесь можно возможную путаницу со свойствами самой формы (напр., Name).

    А чего ж ее не рекламировать, если "мастера" так делают. А потом вылазят ошибки, если не полностью обращение писать. Сам натыкался.

    >> При изменении состава коллекции (например при удалении или добавлении поля в форму) порядок нумерации элементов может измениться.
    >И вообще обращением по номеру обычно пользуются в цикле, проходящем по всем элементам коллекции, да и то только если по какой-то причине не хочется пользоваться командой For Each.

    Ок.

    >Что такое второй случай? Вроде второй случай здесь - это With.
    Охних. Конечно.
    29 июн 03, 21:18    [245404]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Владимир Саныч
    Member

    Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
    Сообщений: 40414
    > Млин, ведь хотел же, чтоб так не воспринял.

    Картинка с другого сайта. Я забыл морду поставить. Вот, компенсирую: Картинка с другого сайта.Картинка с другого сайта.Картинка с другого сайта.Картинка с другого сайта.Картинка с другого сайта.

    > >А чем в форуме плохо?
    > А тем, что послезавтра у мя халявного инета не будет, т.е. он будет либо нехалявный, либо (через мобилу дорого, а стационарного телефона у мя нету) никакой :)

    А со мной ты как общаться собираешься, если не через Интернет? Ну, приезжай сюда, я тебя по Тель-Авиву покатаю, на набережную сходим, на девочек посмотрим... Можно съездить в Иерусалим на могилу Руставели.

    > > Вообще-то, такой способ обращения к полям источника данных - фича недокументированная.
    > А чего ж ее не рекламировать, если "мастера" так делают. А потом вылазят ошибки, если не полностью обращение писать. Сам натыкался.

    Это все так, но надо сначала объяснить, что это такое. Насколько я понимаю, к этим полям нельзя добраться ни через Controls (их там нет), ни через Fields (у формы нет такой коллекции), а только непосредственно как MyForm!MyField. Вот это и надо сказать предварительно.
    29 июн 03, 21:36    [245409]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Geo
    Member

    Откуда:
    Сообщений: 6883
    >А со мной ты как общаться собираешься, если не через Интернет? Ну, приезжай сюда, я тебя по Тель-Авиву покатаю, на набережную сходим, на девочек посмотрим... Можно съездить в Иерусалим на могилу Руставели.
    :))

    >Это все так, но надо сначала объяснить, что это такое. Насколько я понимаю, к этим полям нельзя добраться ни через Controls (их там нет), ни через Fields (у формы нет такой коллекции), а только непосредственно как MyForm!MyField. Вот это и надо сказать предварительно.

    А я и не говорю, как к ним добраться, я говорю, что
    Несмотря на вышеуказанные правила, встроенные мастера создания форм создают поля с именами, совпадающими с именами соответствующих полей таблицы-источника данных. В этом случае следует использовать полный синтаксис обращения к объекту.
    И все, собсна. Что объяснить? Дополнительно написать, что если не использовать полный синтаксис, можно наткнуться на поле источника данных, а можно и не наткнуться?
    29 июн 03, 21:44    [245410]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Владимир Саныч
    Member

    Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
    Сообщений: 40414
    Я только говорю, что, прежде чем упоминать что-то, нужно объяснить, что это такое. Особенно когда речь идет о вещи, которую в хелпе не найти.

    Кстати, если имя контрола совпадает с именем поля, то обращение MyForm!MyField приводит именно к контролу, так что никаких проблем нет. Если поле с таким именем есть, а контрола нет, тогда тоже никаких проблем, приходим к полю. А проблемы начинаются тогда, когда случайно есть и контрол, и поле, но источник этого контрола не это поле. Вот тогда может случиться путаница. Тогда обращение через .Controls приводит к именно контролу (и снимает неоднозначность), а для именно поля никакого способа нет.

    И еще кстати. В отчетах такой способ обращения к полям не работает. Поэтому хотя для отчетов и верно все сказанное про формы, - но все-таки не совсем все.
    29 июн 03, 22:23    [245416]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Geo
    Member

    Откуда:
    Сообщений: 6883
    Понил. Пошло пить пиво и думать. Завтра опять новый вариант положу.
    Спокночи :)
    29 июн 03, 22:32    [245419]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Владимир Саныч
    Member

    Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
    Сообщений: 40414
    !לרוויה (ли-рваЯ!)

    (В русском такого нет. Это как приятного аппетита, но не едящему, а пьющему. Перевод - до насыщения (жидкостью), до утоления жажды.)
    29 июн 03, 22:40    [245420]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Sfagnum
    Member

    Откуда: из лесу
    Сообщений: 1492
    Всё таки как и говорил ВС квадратные скобки они как и были квадратными, так и остались, не смотря на то что переводчики так их испохабили и из математики дальше деления не пошли.

    Так что всё таки их правильно называть квадратными, но если настаиваешь на присутствии названия "прямые скобки", то упомяни где-нить их так обзывают переводчики.
    30 июн 03, 11:48    [245685]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Geo
    Member

    Откуда:
    Сообщений: 6883
    Внес изменения:
    в п. 2.1 :
    ...квадратные скобки ([] - в русифицированной версии Access они называются "прямыми") следует использовать, если имя элемента содержит внутренние пробелы или другие специальные символы (кроме, соответственно, "]" и "["), иначе их наличие не обязательно.
    далее "прямые" заменил на "квадратные"

    там же:
    Будьте внимательны, если пользуетесь подобными сокращениями. В случае, когда формы содержит одноименные элементы различных коллекций, пропуск идентификатора коллекции может повлечь за собой неверную работу вашей программы (см. п. 3.6). Хороший способ избегать подобных "совпадений" использовать префиксы в именах, например, название поля "Поле1" в форме может иметь имя "пфПоле1" и т.п.
    30 июн 03, 22:12    [246527]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Geo
    Member

    Откуда:
    Сообщений: 6883
    Ужас какой. "Название может иметь имя...". Очень хорошо. Завтра переделаю, но идея - добавить рекомендацию использовать префиксы и убрать упоминание о полях источника данных, надеюсь, останется.
    30 июн 03, 23:36    [246546]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Владимир Саныч
    Member

    Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
    Сообщений: 40414
    Они оба среднего рода, кто там кого может иметь!
    30 июн 03, 23:46    [246549]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Сашка Здоровый
    Member

    Откуда: Israel
    Сообщений: 49
    >!לרוויה (ли-рваЯ!)

    >(В русском такого нет. Это как приятного аппетита, но не едящему, а пьющему. Перевод - до насыщения (жидкостью), до утоления жажды.)


    Вот переводы на русский язык.

    1.(MP3)
    2.(MP3)
    3.(MP3)
    4.(MP3)
    1 июл 03, 09:25    [246689]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Geo
    Member

    Откуда:
    Сообщений: 6883
    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.
  • 1 июл 03, 11:51    [246918]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Владимир Саныч
    Member

    Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
    Сообщений: 40414
    Жалко, что не видно, где именно изменения. Но вроде мне прикопаться не к чему (кроме, может, нескольких ачипяток).
    1 июл 03, 11:57    [246926]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    incold
    Member

    Откуда:
    Сообщений: 1580
    Может я чего пропустил или недопонял, тогда кто мне объяснит.

    выражение типа (3) выполняется медленнее, чем (2) и (4).


    У Гетца Access 2002 Разработка настольных приложений.
    Глава 5. Объекты данных ADO.
    Что использовать: восклицательный знаки, точку или кавычки? (стр. 192)

    "...
    cat.Tables!tblCustomers.Columns!Address.Type
    cat.Tables("tblCustomers").Columns("Address").Type

    Оказывается "за кулисами" перед выполнением первого из приведенных операторов его синтаксис всегда преобразуется в соответствии со вторым вариантом, то есть вместо восклицательного знака употребляются скобки с кавычками. Поэтому, используя восклицательный знак, вы несколько повышаете темп ввода, за что расплачиваетесь замедлением выполнения. Мы рекомендуем всегда использовать второй вариант синтаксиса, то есть употреблять скобки с кавычками для обращения к объектам коллекций."
    1 июл 03, 12:14    [246964]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Geo
    Member

    Откуда:
    Сообщений: 6883
    2incold
    Да? Я сейчас в 97-м попробовал, Forms!Форма.Controls.Поле таки быстрее, чем Forms("Форма").Controls("Поле"). Не знаю почему Гетц прогнозирует обратное. Да и в хелпах сказано что, в частности, Ме!Поле работает быстрее, чем Ме("Поле")...

    2алл
    Если замечаний нету, то завтра-послезавтра, с повыдергиванными (на мой взгляд:) орфографическими ошибками, сливаю текст мегакнопкой. :)
    4 июл 03, 02:30    [250914]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    incold
    Member

    Откуда:
    Сообщений: 1580
    Да? Я сейчас в 97-м попробовал, Forms!Форма.Controls.Поле таки быстрее, чем Forms("Форма").Controls("Поле")

    А интересно каким это способом было определено.
    4 июл 03, 10:53    [251127]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    incold
    Member

    Откуда:
    Сообщений: 1580
    Тест на разницу в скорости обработки обращения к коллекции через ! или .("")

    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-й вариант
    4 июл 03, 11:58    [251289]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Владимир Саныч
    Member

    Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
    Сообщений: 40414
    2 Geo:

    Если есть желание проверить орфографические ошибки, то давай мне. Я по одной из профессий корректор.
    4 июл 03, 14:17    [251585]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Geo
    Member

    Откуда:
    Сообщений: 6883
    2incold
    функция проверки нарисована выше, результат: Forms("...")... - 21,6 c., Forms![...]... - 20,9 c. Машинка -Athlon 1333/484ddr266/Seagate B-IV 7200. Вот и вопрос. М.б., действительно, просто выкинуть этот пункт?

    2Владимир Саныч
    Пришли, пожалуйста, сюда: jorgen@mail.ru, свой адрес, завтра-послезавтра отправлю свой текст.
    Спасибо. :)
    4 июл 03, 19:39    [252064]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Владимир Саныч
    Member

    Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
    Сообщений: 40414
    Послано. :^)
    4 июл 03, 20:10    [252085]     Ответить | Цитировать Сообщить модератору
     Re: FAQ: Как обратится к полю формы или подчиненной формы  [new]
    Владимир Саныч
    Member

    Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
    Сообщений: 40414
    Поправка от Лоха:

    В SQL запросах (если там есть что-нибудь типа "Where ID=Forms!Form1!Control1") - только через !
    8 июл 03, 14:18    [254505]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
    Все форумы / Microsoft Access Ответить