2015-06-11 3 views
2

Мне любопытно, каковы различия между следующими и если есть преимущества для одного над другим.Какая разница между ссылкой на поле DAO Recordset?

Предположим, MS Access и DAO Recordset

rst![field] 
rst.Fields("field") 
+1

С 'rst. [Field]', Access жалуется * «Метод или элемент данных не найден» *. – HansUp

+0

@ Хэнсуп, ты прав, это была моя ошибка. Тем не менее, можно использовать метод точек с элементами управления в форме, такой как me.ctrName.value –

+0

В форме, конечно. Но этот вопрос касается «DAO.Recordset». – HansUp

ответ

3

rst![field] относится к элементу с именем поле в коллекции набора записей по умолчанию. Коллекция Fields является коллекцией по умолчанию для набора записей. Таким образом, ! позволяет ссылаться на поле без явного указания, что вы хотите Field.

Из того, что я читал в прошлом, ! ссылка - это самый быстрый способ доступа к члену коллекции. Я не совсем уверен в величине воздействия производительности; Я использую !, потому что он более краткий (по сравнению с rst.Fields("field")).

И если вы будете получать доступ к более чем одному из полого Recordset, рассмотрит With блока:

With rst 
    Debug.Print !ID.Value 
    Debug.Print !Last_Name.Value 
End With 

, мол, что может быть еще быстрее, потому что доступ не должен начинаться с rst снова каждым чтобы добраться до целевого поля. Опять же, я не уверен, какое улучшение производительности предлагает; Мне нравится, когда он делает код более кратким.

rst.Fields(<field name>) полезен, если вы не знаете имя поля раньше времени. В этих случаях используйте строковую переменную для хранения имени поля и подачи этой переменной в rst.Fields. Но я не вижу никакой пользы от rst.Fields и жестко закодированного имени поля. Это просто больше набирать, чтобы получить прибыль.

Как боковая точка, рассмотрите, что на самом деле дает вам rst![field]. Обычно вы хотите .Value, который является свойством поля по умолчанию, поэтому вам не нужно явно запрашивать .Value в таких ситуациях. Однако в такой ситуации, как добавление поля набора записей в коллекцию VBA, в коллекцию добавляется поле объекта, а не его .Value. Это может быть неприятным сюрпризом! Gord Thompson убедил меня всегда включать .Value, когда я хочу .Value, так вот что я пытаюсь сделать.

+1

вопрос о добавлении поля в коллекцию, а не ее значение уже укусил меня. Я смог понять это, но, как вы сказали, это было неприятным сюрпризом. –

Смежные вопросы