Мне любопытно, каковы различия между следующими и если есть преимущества для одного над другим.Какая разница между ссылкой на поле DAO Recordset?
Предположим, MS Access и DAO Recordset
rst![field]
rst.Fields("field")
Мне любопытно, каковы различия между следующими и если есть преимущества для одного над другим.Какая разница между ссылкой на поле DAO Recordset?
Предположим, MS Access и DAO Recordset
rst![field]
rst.Fields("field")
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
, так вот что я пытаюсь сделать.
вопрос о добавлении поля в коллекцию, а не ее значение уже укусил меня. Я смог понять это, но, как вы сказали, это было неприятным сюрпризом. –
С 'rst. [Field]', Access жалуется * «Метод или элемент данных не найден» *. – HansUp
@ Хэнсуп, ты прав, это была моя ошибка. Тем не менее, можно использовать метод точек с элементами управления в форме, такой как me.ctrName.value –
В форме, конечно. Но этот вопрос касается «DAO.Recordset». – HansUp