Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Обращение к полю через форму - что за объект? / 25 сообщений из 25, страница 1 из 1
06.08.2003, 11:38
    #32228435
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
Этот вопрос у нас возникал при обсуждении факов, но вслух произнесен не был - наверно, по причинам фрейдистского характера. Имеется возможность писать что-нибудь типа

Код: plaintext
1.
2.
3.
4.
5.
frm.fld

где

frm - объект типа форма
fld - поле в рекордсете формы, для которого никакого контрола нет


А какого типа объект выдается таким синтаксисом? Вроде это и не поле, и не контрол. Я проверил TypeName - получилось AccessField. Что это за зверь? Какие у него есть свойства и методы? ObjectBrowser его не показывает.

Спасибо...
...
Рейтинг: 0 / 0
06.08.2003, 11:40
    #32228445
Albert Gor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
.Value доступно для изменения. Проверено практикой :)
...
Рейтинг: 0 / 0
06.08.2003, 11:42
    #32228448
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
Про Value - это единственное, что я знал. :^)
...
Рейтинг: 0 / 0
06.08.2003, 11:46
    #32228458
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
Саныч, при включеном свойсnве Show hidden members
он показываеться. Даже их 2 штуки AccessField и _AccessField
Ничего акромя Value у него нет. В MSDN ни слова.
...
Рейтинг: 0 / 0
06.08.2003, 11:48
    #32228465
IgorM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
В ObjectBrowser сделай доступными скрытые компоненты (правая кнопка) и потом ищи. Кроме Value никаких других свойств у объектов этого типа нет.
...
Рейтинг: 0 / 0
06.08.2003, 11:50
    #32228471
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
2 Senin Viktor & IgorM:

Понял, thanx! Кстати, у меня _AccessField нет, зато есть _AccessProperty и __AccessProperty. :^)
...
Рейтинг: 0 / 0
06.08.2003, 11:55
    #32228482
Albert Gor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
По нему без проблем связывается подчиненная форма. А подотчет иногда глючит. Приходится вытаскивать поле и делать его невидимым.
...
Рейтинг: 0 / 0
06.08.2003, 11:55
    #32228484
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
А там в скрытых есть много интересного... Например, _CheckBoxInOption (и т.д.) и _ChildLabel - разновидности контролов на случай, когда они являются чьими-нибудь детьми.
...
Рейтинг: 0 / 0
06.08.2003, 11:57
    #32228486
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
> А подотчет иногда глючит.

В отчетах это вообще никогда не работает. :^)
...
Рейтинг: 0 / 0
10.08.2003, 18:14
    #32232215
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
Кстати. А есть ли какая-нибудь коллекция, в которую они все входят? Как к ним обращаться полным синтаксисом?

frm.коллекция!fld
...
Рейтинг: 0 / 0
10.08.2003, 19:06
    #32232234
Обращение к полю через форму - что за объект?
Влдаимир Саныч. А зачем, если не секрет, это нужно. Если нужно поле источника и все его свойства тогда так
frm.Recordset.Fields(Index)
ну а если только значение т.е. Value тогда быстрее и короче
frm.Recordset.Collect(Index)
...
Рейтинг: 0 / 0
10.08.2003, 19:14
    #32232239
vdimas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
2 Владимир Саныч

Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub Form_Load()
    Dim frm As Form
    Set frm = Me.Sotrudnik.Form
    Dim ctlID As Control
    
    Set ctlID = frm.Controls( "ID" )
End Sub


Dim ctlID As Control может быть
Dim ctlID As TextBox , и т.д.

2 Шкуренко Александр
контрол нужен, чтобы управлять параметрами именно контрола.
...
Рейтинг: 0 / 0
10.08.2003, 19:20
    #32232240
vdimas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
в догонку, у этого подчиненного объекта и события можно перехватывать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private WithEvents ChildFrm As Form

Private Sub Form_Load()
    Set ChildFrm = Me.Sotrudnik.Form
    Dim ctl As Control
    
    Set ctl = frm.Controls( "ID" )
End Sub

Private Sub ChildFrm_BeforeUpdate(Cancel As Integer)
' валидация какая-нить...'
End Sub
...
Рейтинг: 0 / 0
10.08.2003, 19:21
    #32232242
Обращение к полю через форму - что за объект?
Владимир Саныч. Прошу прощения за очепятку.

to vdimas
>контрол нужен, чтобы управлять параметрами именно контрола.

В п. 1 было написано:
fld - поле в рекордсете формы, для которого никакого контрола нет

Может я чего путаю?
...
Рейтинг: 0 / 0
10.08.2003, 19:35
    #32232249
vdimas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
не, это я путаю...

Просто в предыдущих топах поднимался вопрос о том как добраться до полей таблицы с целью изменения ширины полей. В предложеном мною варианте эту таблицу можно было указывать в специально предназначенной форме как подчиненную. Таким образом: реальной формы, как объекта проекта нет, а вот полями, этой таблицы все-равно управлять можно. И даже логику полноценную строить - указал как события перехватывать.

Вот теперь до-конца показал.
...
Рейтинг: 0 / 0
10.08.2003, 20:43
    #32232273
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
> frm.Recordset.Collect

Это интересно... Доберусь до Аксесса 2000, попробую. Thanx.
...
Рейтинг: 0 / 0
19.05.2004, 15:41
    #32524246
фыыф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
нашел эти грабли по 100-му разу
?me.Controls("Code")
4144
но при этом в
me.Controls(i).Name
такого нет
и объявить
Dim ctl as Control
Set ctl = me.Controls("Code")
нельзя - "несоответствие типа данных"

...пока нашел, что контрола-то в действительности и нет, а есть только поле в базовом наборе...

Кстати, Саныч, получается, что к полю в базовом наборе таки можно обратиться по имени как к:
me.Controls("Code")
(чтобы вернуть/присвоить величину, а не как к объекту) :)
...
Рейтинг: 0 / 0
19.05.2004, 15:59
    #32524304
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
2 Шкуренко Александр
ОГРАМАДНАЁ ШПАСИБА - ВОТ ОНА - НАШЛАСЬ ПРОПАЖА

Блин, я Этот Collect в мозгах сыскать не смог - и "записки потерялись", а уже заявился щеголем - щас, мол, скажу...

2 Саныч
A2000 тут не при чем - Collect метод ДАО-рекорсета - это и есть тот самый "недокументированный". В 97 отменно живет.

т.е. Dim lFldPos as Long
Dim strName as String

lFldPos = tRec.Fields("ContragentName").CollectionIndex

DO WHILE NOT tRec.EOF

strName = tRec.Collect(lFldPos)
tRec.MoveNext
LOOP

Он, такой-сякой, и есть самый быстрый и самый недокументированный

ЕЩЕ РАЗ

СПАСИБО Шкуренко Александр за возврат ПОТЕРЯННЫХ ЗНАНИЙ
...
Рейтинг: 0 / 0
19.05.2004, 16:06
    #32524327
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
2 фыыф:

Спасибо! Действительно работает.
...
Рейтинг: 0 / 0
20.05.2004, 11:57
    #32525656
фыыф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
2 Владимир Саныч
да пжалста

меня извиняет мой склероз, и то, что последний раз я на это убил день -другой в году ... не помню в каком, но в прошлом веке. Очень может быть, что и в 7-м (95) аксе, какой был на редкость глюкав. Опять же я кодер не по призванию, а скорей по необходимости. Т.е. не фанат. А то бы сразу вспомнил :).

Вот подумал, как может быть устроен объект Controls. Понятно, что это не стандартный VBA.Collection, а видимо нечто наследуемое от общего предка
в VBA аналогичная функциональность могла быть такой:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
'в классе TControls
Private ControlsC as new collection 'содержит ссылки только на контролы
Private ControlsF as new collection 'содержит ссылки на поля
                                    ' и/или (перекрывающие)  контролы, 
'...
'как - то заполнили
'и реализация метода 
'.Item:
Public Function Item(Index)
'ругань возложим на .Item Vba.Collection
If AND VarType(Index)< 8   Then
   Item = ControlsC(Index)
elseIF VarType(Index)= 8 
   Item = ControlsF(Index)
end if
End Function
причем колеекции (внутренние)именно приватные, поскольку в Hidden свойствах формы и Controls я не нашел ничего похожего на Collect DAO.Recordset-а



2 Victosha
.Collect прекрасно понимает имя (т.е. поля вставлены в коллекцию по key), но не возвращает имен и прочих свойств. Т.ч. обратиться .Collect("anyName") можно, и нет необходимости вызывать .Fields нет необходимости, хотя, если полагать, что вызов по номеру быстрее, чем по key, то, т.к. такая полезная штука как .CollectionIndex есть токмо в DAO.Fields
...
Рейтинг: 0 / 0
20.05.2004, 12:04
    #32525676
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
2 фыыф
ОК. спасибо.
а по индексу не обязательно быстрей (в стандартном VB|VBA Collection-е так точно медленней, хотя в акцессе это не важно). это у меня конкретная такая заморочка. опрашивать поля в цикле по номерам.
...
Рейтинг: 0 / 0
20.05.2004, 12:04
    #32525680
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
А вот у меня мысль.

/topic/38890&pg=2#688719

В Аксессе 2 не было коллекции Controls, обращения к контролам писались просто как Me!MyControl. Но таким же образом писались и обращения к полям, которые обсуждаются в этом топике. Когда в Аксессе 95 была создана коллекция Controls, то через нее, получается, стало возможно обращаться и к тем, и к другим.
...
Рейтинг: 0 / 0
20.05.2004, 12:12
    #32525709
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
2 Саныч
не понял о чем мысль - о скорости исполнения Me.ControlName, me("ControlName"), me.ControlName ?
...
Рейтинг: 0 / 0
20.05.2004, 12:14
    #32525714
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
Нет. Об истории возникновения синтаксиса, позволяющего обращаться к полям через слово Controls.
...
Рейтинг: 0 / 0
20.05.2004, 12:15
    #32525717
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полю через форму - что за объект?
агА
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Обращение к полю через форму - что за объект? / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]