powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Объясните разницу между Me.Form.RecordSource и Me.RecordSource
46 сообщений из 46, показаны все 2 страниц
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36913792
el_sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В чем разница, шеф говорит первое обращение более правильное. Почему?
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36913831
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
el_sh, если не ошибаюсь, первое обращения - стандарт 97 Аксесса.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36913872
Фотография DzonyB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CoolMindel_sh, если не ошибаюсь, первое обращения - стандарт 97 Аксесса.

я думаю что Вы ошибаетесь насчет стандарта 97.
В книшках написано -Ключевое слово Ме указывает на текущую форму или отчет. Поэтому мое мнение что Form можно не указывать , чем меньше текста тем лучше.
А вот при обращении к субформе указывается Form.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36913875
el_sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CoolMind,

т.е. для Акс 2003 разницы никакой?
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36913882
Фотография DzonyB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
el_shCoolMind,

т.е. для Акс 2003 разницы никакой?

и в 97 прокатывает.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36913889
el_sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DzonyB,

Нет, тут речь именно о текущей форме.
Шеф говорит, что при Me.Form.RecordSource текущая форма обращается к своей же форме и считывает свойство.
На мои робкие возражения, сказал, что Me.RecordSource бывает отрабатывает как-то не так.
Вот и хочу понять в чем разница...
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36913914
Фотография DzonyB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
el_shDzonyB,
Нет, тут речь именно о текущей форме.
Шеф говорит, что при Me.Form.RecordSource текущая форма обращается к своей же форме и считывает свойство.
На мои робкие возражения, сказал, что Me.RecordSource бывает отрабатывает как-то не так.
Вот и хочу понять в чем разница...

Так попросите шефа пусть покажет пример где именно прокатывает не та.Я для интереса созвонился с человеком который с 97 года программирует на 97 и сейчас скрепя сердце переходит на 2003 сказал что всегда использует Me без добавления Form. И в книжках пишут тоже самое.
Но если не хотите портить с шефом отношения делайте как он сказал.

Сказал муха -это вертолет.Значит вертолет. Будьте умнее.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36913955
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
el_shНет, тут речь именно о текущей форме.
Шеф говорит, что при Me.Form.RecordSource текущая форма обращается к своей же форме и считывает свойство.
На мои робкие возражения, сказал, что Me.RecordSource бывает отрабатывает как-то не так.
Вот и хочу понять в чем разница...
Так это.., F1 на me и на form почитать, разобраться и рассказать шефу.

для затравки вопрос шефу:
куда обращаемся
Debug.Print Me.Form.Form.Form.Form.Form.Form.Form.Form.Form.RecordSource
?
(не забываем, что мы в текущей форме;)
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914053
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как обратиться к полю формы или подчиненной формы
FAQQ3. Обращение к объекту подчиненной формы.
Корректная ссылка на свойство подчиненной формы или отчета требует указания полного идентификатора формы c использованием свойства Form элемента управления - подчиненная форма:

Forms![Форма1].Controls![Форма2].Form.Controls![Поле1].Value
В общем, видимо, начальник путает с обращением к подчинённой форме.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914057
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adv, прикольно)))
так их, этих начальников.
поздравляю с успешным прохождением 3000 сообщений :)
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914098
el_sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CoolMind,

Да нет, не путеает он. Думаю, это жизненная позиция такая, а может философия...
Джони, а с шефом я не спорю (чаще всего), это уже моя жизненная позиция, берегу нервы...
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914132
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
el_sh, есть такая теория, что места начальников занимают не вполне компетентные люди.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914153
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
...гм-гм,
я вот тоже всегда считал что это одно и тоже...

но, какгрится - "практика критерий истины" ,
так вот - с "практикой" - что-то не то...

Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub Кнопка4_Click()
  MsgBox "ObjPtr(Me) = " & ObjPtr(Me) & vbCrLf & _
         "ObjPtr(Me.Form) = " & ObjPtr(Me.Form) & vbCrLf & _
         "ObjPtr(Me.Form.Form) = " & ObjPtr(Me.Form.Form) & vbCrLf & _
         "ObjPtr(Me.Form.Form.Form) = " & ObjPtr(Me.Form.Form.Form)
End Sub
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
---------------------------
Microsoft Office Access
---------------------------
ObjPtr(Me) =  2315888 

ObjPtr(Me.Form) =  9014736 

ObjPtr(Me.Form.Form) =  9014736 

ObjPtr(Me.Form.Form.Form) =  9014736 
---------------------------
ОК   
---------------------------
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914237
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ё,

теперь перейти в конструктор и обратно, жми кнопку, смотри результат :)

потом создай модуль (t2 - имя формы)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
DoCmd.OpenForm "t2", acNormal
Debug.Print ObjPtr(Forms!t2), ObjPtr(Forms!t2.Form)
DoCmd.OpenForm "t2", acDesign
Debug.Print ObjPtr(Forms!t2), ObjPtr(Forms!t2.Form)
DoCmd.OpenForm "t2", acNormal
Debug.Print ObjPtr(Forms!t2), ObjPtr(Forms!t2.Form)
DoCmd.OpenForm "t2", acDesign
Debug.Print ObjPtr(Forms!t2), ObjPtr(Forms!t2.Form)

запусти

Раскуриваем :)
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914264
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, кстати, привинти к кнопке Debug.Print Me.Properties.Count, Me.Form.Properties.Count. Можешь глянуть поимённо.
Это про сомнения :)

Я как-то с этим вопросом заморачивался. До конца не нарыл за ненадобностью.
Этот пример остался в тестовой базёнке.

Поверхностный вывод сделал следующий:
me - обращение к контролу формы.
Меня сие объяснение устроило и дальнейшие изыскания прекратил по причине лени :)

зы. в контексте вопроса ТС, me и me.form это одно и то же.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914270
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
adv,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub aaa3()
DoCmd.OpenForm "Форма8", acNormal
Debug.Print "acNormal - " & ObjPtr(Forms!Форма8), ObjPtr(Forms!Форма8.Form)
DoCmd.OpenForm "Форма8", acDesign
Debug.Print "acDesign - " & ObjPtr(Forms!Форма8), ObjPtr(Forms!Форма8.Form)
DoCmd.OpenForm "Форма8", acNormal
Debug.Print "acNormal - " & ObjPtr(Forms!Форма8), ObjPtr(Forms!Форма8.Form)
DoCmd.OpenForm "Форма8", acDesign
Debug.Print "acDesign - " & ObjPtr(Forms!Форма8), ObjPtr(Forms!Форма8.Form)
End Sub
Код: plaintext
1.
2.
3.
4.
aaa3
acNormal -  159265744           9023700  
acDesign -  9023580             9023580  
acNormal -  159265744           9023580  
acDesign -  9023580             9023580  

...и о что это должно было сказать ?

адреса объектов Me и Me.Form - таки и дальше - разные (в acNormal)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
---------------------------
Microsoft Office Access
---------------------------
ObjPtr(Me) =  159265744 

ObjPtr(Forms(Me.Name)) =  159265744 

ObjPtr(Forms(Me.Name).Form) =  9019092 

ObjPtr(Me.Form) =  9019092 

ObjPtr(Me.Form.Form) =  9019092 

ObjPtr(Me.Form.Form.Form) =  9019092 
---------------------------
ОК   
---------------------------
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914497
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ё
Код: plaintext
1.
2.
3.
acNormal -  159265744           9023700  
acDesign -  9023580             9023580  
acNormal -  159265744           9023580  

Заметь, как поменялось значение в правом столбце в 1 и 3 строке.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914518
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если правильно думаю, то после перехода в режим конструктора и возвращения обратно в режим окна ObjPtr(Forms!Форма8.Form) начинает ссылаться на объект формы, который был в режиме конструктора.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914579
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DzonyB,


авторА вот при обращении к субформе указывается Form.

Не всегда:)
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914587
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
CoolMindЕсли правильно думаю, то после перехода в режим конструктора и возвращения обратно в режим окна ObjPtr(Forms!Форма8.Form) начинает ссылаться на объект формы, который был в режиме конструктора.
так - вроде бы как да,
но если явно закрыть форму - и открыть по новой - то этого нет
...и "игры" с экземпярами - тоже ничиго непрояснили...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
Sub aaa3()

Dim F As Form_Форма8
Dim F1 As Form_Форма8
Dim F2 As Form_Форма8

DoCmd.OpenForm "Форма8", acNormal
Debug.Print "acNormal - " & ObjPtr(Forms!Форма8), ObjPtr(Forms!Форма8.Form)
DoCmd.OpenForm "Форма8", acDesign
Debug.Print "acDesign - " & ObjPtr(Forms!Форма8), ObjPtr(Forms!Форма8.Form)
DoCmd.OpenForm "Форма8", acNormal
Debug.Print "acNormal - " & ObjPtr(Forms!Форма8), ObjPtr(Forms!Форма8.Form)
DoCmd.OpenForm "Форма8", acDesign
Debug.Print "acDesign - " & ObjPtr(Forms!Форма8), ObjPtr(Forms!Форма8.Form)

DoCmd.Close acForm, "Форма8"
Debug.Print "--------- Close ---------"
DoCmd.OpenForm "Форма8", acNormal

Debug.Print "acNormal - " & ObjPtr(Forms!Форма8), ObjPtr(Forms!Форма8.Form)
DoCmd.OpenForm "Форма8", acDesign
Debug.Print "acDesign - " & ObjPtr(Forms!Форма8), ObjPtr(Forms!Форма8.Form)
DoCmd.OpenForm "Форма8", acNormal
Debug.Print "acNormal - " & ObjPtr(Forms!Форма8), ObjPtr(Forms!Форма8.Form)

Debug.Print "----------------------------"
Set F = New Form_Форма8
F.Visible = True
Debug.Print "F - " & ObjPtr(F), ObjPtr(F.Form)

Set F1 = New Form_Форма8
F1.Visible = True
Debug.Print "F1 - " & ObjPtr(F1), ObjPtr(F1.Form)

Set F2 = New Form_Форма8
F2.Visible = True
Debug.Print "F2 - " & ObjPtr(F2), ObjPtr(F2.Form)

End Sub
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
aaa3
acNormal -  1618712             129237024  
acDesign -  129237900           129237900  
acNormal -  1618712             129237900  
acDesign -  129238292           129238292  
--------- Close ---------
acNormal -  1618712             129242252  
acDesign -  129242268           129242268  
acNormal -  1618712             129242268  
----------------------------
F -  1768408      129237820  
F1 -  1618832     129238660  
F2 -  159301544                 9031628  
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914595
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ё
...и о что это должно было сказать ?

адреса объектов Me и Me.Form - таки и дальше - разные (в acNormal)

вот.

Никто и не говорит, что одинаковые.

кстати, у меня кариночка другая:
Код: plaintext
1.
2.
3.
  2048552         9139604  
  9142248         9142248  
  2048552         9142232  
  9143076         9143076  
может, акс недопатченный.

Видно, что при последовательном acNormal, адрес me одинаков, т. е. обращаемся к одной и той же форме (как к объекту), а Me.Form - разный - разные реализации этой формы (со значением своих свойств).

В дезигне объект один, т. к. реализация дезигна может быть одна.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914611
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+

Причём, прилепи на кнопку формы
Код: plaintext
Debug.Print ObjPtr(Me), ObjPtr(Me.Form)
открой форму, дави кнопку, смотри имидиэйт.

в конструктор, обратно, дави, смотри. (можно повторять до посинения :)

в конструктор, добавь поле, переходи в режим формы, дави, смотри. Адрес другой, форма другая.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914627
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы. Я то не спец по этим делам, так, почти забытые наблюдения, которые случайно всплыли из задворок памяти и начали освежаться.

Для полного объяснения нужна тяжёлая артиллерия.
Я в этом вопросе от теории далековат, пою что вижу:)
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914646
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
adv+

Причём, прилепи на кнопку формы
Код: plaintext
Debug.Print ObjPtr(Me), ObjPtr(Me.Form)
открой форму, дави кнопку, смотри имидиэйт.

в конструктор, обратно, дави, смотри. (можно повторять до посинения :)

в конструктор, добавь поле, переходи в режим формы, дави, смотри. Адрес другой, форма другая.


дык, я ж это и делал в итоге, только без кнопки

воопщем, здаётся мне, что один из этих адресов - это ссылка на элемент коллекции Forms ,
который уже в свою очередь - ссылается на объект-форму (2-ой адрес)
ну это так - типа версия

...подождём, может Бенедикт подойдёт - просвятит ))
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914658
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, у вас результат поинтересней будет.
Насчёт того, что из десигна в нормал - реализация формы адрес не меняет, наверное допатчили, это логичнее.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914728
Guest33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может кто попробует с разными вариантами свойства "Разрешить изменения макета"?
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914758
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest33Может кто попробует с разными вариантами свойства "Разрешить изменения макета"?

в 97м такого св-ва нет
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914768
Фотография kha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ё...гм-гм,
я вот тоже всегда считал что это одно и тоже...

но, какгрится - "практика критерий истины" ,
так вот - с "практикой" - что-то не то...

Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub Кнопка4_Click()
  MsgBox "ObjPtr(Me) = " & ObjPtr(Me) & vbCrLf & _
         "ObjPtr(Me.Form) = " & ObjPtr(Me.Form) & vbCrLf & _
         "ObjPtr(Me.Form.Form) = " & ObjPtr(Me.Form.Form) & vbCrLf & _
         "ObjPtr(Me.Form.Form.Form) = " & ObjPtr(Me.Form.Form.Form)
End Sub
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
---------------------------
Microsoft Office Access
---------------------------
ObjPtr(Me) =  2315888 

ObjPtr(Me.Form) =  9014736 

ObjPtr(Me.Form.Form) =  9014736 

ObjPtr(Me.Form.Form.Form) =  9014736 
---------------------------
ОК   
---------------------------


ПМСМ ни чего удивительного, вы подменили исходную тему
между Me.Form.RecordSource и Me.RecordSource нет никакой разницы

просто Form это дефолтное проперти класса Form_XXXX.
для аналога сравните

Debug.Print ObjPtr(Me.Recordset), ObjPtr(Me.Form.Recordset)

т.е Ме - это ссылка на объект класса Form_XXXX
а сам Form это отдельный объект

например создайте в модуле формы паблик проперти и попробуйте к нему обратится

me.myproperty и me.form.myproperty
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914787
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
khaё...гм-гм,
я вот тоже всегда считал что это одно и тоже...

но, какгрится - "практика критерий истины" ,
так вот - с "практикой" - что-то не то...

Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub Кнопка4_Click()
  MsgBox "ObjPtr(Me) = " & ObjPtr(Me) & vbCrLf & _
         "ObjPtr(Me.Form) = " & ObjPtr(Me.Form) & vbCrLf & _
         "ObjPtr(Me.Form.Form) = " & ObjPtr(Me.Form.Form) & vbCrLf & _
         "ObjPtr(Me.Form.Form.Form) = " & ObjPtr(Me.Form.Form.Form)
End Sub
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
---------------------------
Microsoft Office Access
---------------------------
ObjPtr(Me) =  2315888 

ObjPtr(Me.Form) =  9014736 

ObjPtr(Me.Form.Form) =  9014736 

ObjPtr(Me.Form.Form.Form) =  9014736 
---------------------------
ОК   
---------------------------


ПМСМ ни чего удивительного, вы подменили исходную тему
между Me.Form.RecordSource и Me.RecordSource нет никакой разницы

просто Form это дефолтное проперти класса Form_XXXX.
для аналога сравните

Debug.Print ObjPtr(Me.Recordset), ObjPtr(Me.Form.Recordset)

т.е Ме - это ссылка на объект класса Form_XXXX
а сам Form это отдельный объект

например создайте в модуле формы паблик проперти и попробуйте к нему обратится

me.myproperty и me.form.myproperty

тоже склонялся к такому выводу, таки Me - ссылка на текущий экземпляр класса, разницы нет и в последующем, но надо отдавать должное тому, что экземпляров может быть и более 1го.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914814
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kha
просто Form это дефолтное проперти класса Form_XXXX.
для аналога сравните

Debug.Print ObjPtr(Me.Recordset), ObjPtr(Me.Form.Recordset)

т.е Ме - это ссылка на объект класса Form_XXXX
а сам Form это отдельный объект

например создайте в модуле формы паблик проперти и попробуйте к нему обратится

me.myproperty и me.form.mypropertyО, ну вот и объяснения.

Спасибочки.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914815
Фотография kha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин,

да- экземпляров может быть более одного, в чем противоречие?
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914904
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
khaПМСМ ни чего удивительного, вы подменили исходную тему
между Me.Form.RecordSource и Me.RecordSource нет никакой разницы

просто Form это дефолтное проперти класса Form_XXXX.
для аналога сравните

Debug.Print ObjPtr(Me.Recordset), ObjPtr(Me.Form.Recordset)

вот поэтому, я ничего ни про RecordSource, ни про Recordset - ни говорил

вопрос был в том - почему ObjPtr(Me), ObjPtr(Me.Form) - возвращают разное значение
ответ - вот поэтому
Код: plaintext
1.
2.
3.
4.
5.
6.
Debug.Print "acNormal - " & ObjPtr(Forms!Форма8), ObjPtr(Forms!Форма8.Form), ObjPtr(Forms.Item( 0 ))
DoCmd.OpenForm "Форма8", acDesign
Debug.Print "acDesign - " & ObjPtr(Forms!Форма8), ObjPtr(Forms!Форма8.Form), ObjPtr(Forms.Item( 0 ))
DoCmd.OpenForm "Форма8", acNormal
Debug.Print "acNormal - " & ObjPtr(Forms!Форма8), ObjPtr(Forms!Форма8.Form), ObjPtr(Forms.Item( 0 ))
DoCmd.OpenForm "Форма8", acDesign
Debug.Print "acDesign - " & ObjPtr(Forms!Форма8), ObjPtr(Forms!Форма8.Form), ObjPtr(Forms.Item( 0 ))
Код: plaintext
1.
2.
3.
acNormal -  159751728           129251236       159751728  
acDesign -  129252920           129252920       129252920  
acNormal -  159751728           129252920       159751728  
acDesign -  129253748           129253748       129253748  
khaт.е Ме - это ссылка на объект класса Form_XXXX
а сам Form это отдельный объект
т.е. Me - это ссылка на текущую форму в виде элемента коллекции Forms
а сам Me.Form - ссылка непосредственно на объект форма
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914967
Фотография kha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ё,

я не знаю внутреннего устройства аксес, поэтому может скажу ерунду

класс Form_XXXX какбы наследуется от класса ХХХХ , где ХХХХ-имя какой - то формы,
по этому используюя Me.property мы можем обращаться к свойствам формы в текущем экземпляре
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36914976
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ё,

таки Me - это ссылка на экземпляр класса( коих, может быть и более одного)
а Me.Form - это ссылка на обьект "форма".(контролы, модуль и тд)
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36915011
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сравнение ObjPtr(Me) с ObjPtr(Me.Form) - сравнение тёплого с мягким, так как Me и Me.Form имеют разные типы: ИмяVBAПроекта.Form_XXX и Access.Form. Объект может реализовывать разные интерфейсы, и возвращать ссылки на разные интерфейсы (но при вызове членов этих разных интерфейсов код этих членов будет обращаться к внутренним данным одного объекта). Для иллюстрации покажу на обычных классах.
Класс BaseClass:
Код: plaintext
1.
Option Explicit
'"Пустой" класс, аналог, как ни странно, Access.Form
Класс Class1:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Option Explicit
'Аналог класса Form_XXX, реализующего Access.Form
Implements BaseClass

Public Property Get Class() As BaseClass 'Аналог свойства Form
 Dim bc As BaseClass
 Set bc = Me
 Set Class = bc
End Property

'Здесь реализация методов и свойств BaseClass, не будь он пустой
Тестовая процедура:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Public Sub Test()
 Dim c As Class1
 Set c = New Class1
 Debug.Print ObjPtr(c), ObjPtr(c.Class), ObjPtr(c) = ObjPtr(c.Class) 'не равны
 
 Dim o As Object, o1 As Object
 Set o1 = c
 Set o = c.Class
 Debug.Print ObjPtr(o1), ObjPtr(o), ObjPtr(o) = ObjPtr(o1) 'не равны
 
 'Надо подключить библиотеку "TypeLib Information" в References
 Dim ii As InterfaceInfo, ii1 As InterfaceInfo
 Set ii = InterfaceInfoFromObject(o)
 Set ii1 = InterfaceInfoFromObject(o1)
 Debug.Print ii1.GUID, ii.GUID, ii1.GUID = ii.GUID 'не равны
 
 'Приводим к одному типу
 Dim k As Class1, k1 As Class1
 Set k = c 'или o
 Set k1 = c.Class 'или o1
 Debug.Print ObjPtr(k), ObjPtr(k1), ObjPtr(k) = ObjPtr(k1) 'Упс, таки равны!
End Sub
Мораль: сравнивайте ссылки, приведённые к одному типу, причём не к Object.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36915018
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
Озверинё,

таки Me - это ссылка на экземпляр класса( коих, может быть и более одного)
а Me.Form - это ссылка на обьект "форма".(контролы, модуль и тд)
и то, и другое - ссылка на экземпляр класса

я ж уже сегодня "публиковал" свои "игры" с экземплярами
вот ещё раз - все значения ObjPtr(F) и ObjPtr(F.Form)
(в моём букваре - это называется, цитирую - "указатель на объект(адрес объекта в памяти)" - за точность формулировки - отвечать не берусь, но смысл - очевиден)
уникальны
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Dim F As Form_Форма8
Dim F1 As Form_Форма8
Dim F2 As Form_Форма8

Set F = New Form_Форма8
F.Visible = True
Debug.Print "F - " & ObjPtr(F), ObjPtr(F.Form)

Set F1 = New Form_Форма8
F1.Visible = True
Debug.Print "F1 - " & ObjPtr(F1), ObjPtr(F1.Form)

Set F2 = New Form_Форма8
F2.Visible = True
Debug.Print "F2 - " & ObjPtr(F2), ObjPtr(F2.Form)

On Error Resume Next
Debug.Print "Forms(Форма8) - " & ObjPtr(Forms("Форма8")), ObjPtr(Forms("Форма8").Form)
Debug.Print Err.Description
Код: plaintext
1.
2.
3.
4.
F -  2193624      9008272  
F1 -  149515016                 9011688  
F2 -  149522896                 9014476  
Приложению 'Microsoft Office Access' не удается найти форму 'Форма8', указанную в выражении макроса или в программе Visual Basic.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36915848
адв
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БенедиктСравнение ObjPtr(Me) с ObjPtr(Me.Form) - сравнение тёплого с мягким...Ну вот и тяжёлая артиллерия :)

Спасибо за разъяснения.

зы.
авторОбъект может реализовывать разные интерфейсы, и возвращать ссылки на разные интерфейсы (но при вызове членов этих разных интерфейсов код этих членов будет обращаться к внутренним данным одного объекта). Читал это как тост (или как два тоста:).
Если бы не пример, так бы и не понял, с кем это разговаривают :)
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36916014
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БенедиктМораль: сравнивайте ссылки, приведённые к одному типу, причём не к Object.
а точнее - сравнивать можно только IUnknown
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36916158
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adv,

"Тост должен быть короткий, как выстрел" (c) Ну, или как дуплет
Как настоящий тост не всегда обращён к кому-то лично, так и этот "тост" был обращён к аудитории, сравнивающей указатели разных типов.


Изопропил,

по спецификации COM - безусловно, и я хотел включить это в пример. Но пришлось бы либо вызывать IUnknown::QueryInterface() самому (а вызов функции по адресу в VBA удовольствие сильно ниже среднего), либо включать в проект библиотеку типов, содержащую описание IUnknown (что во многом предпочтительнее, учитывая наличие, например, отличной библиотеки OLELIB.TLB ).

Поэтому, IMHO, приведение к (самому) специализированному типу, хоть и ленивый, но достаточно практичный способ для сравнения.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36916164
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впрочем, к чему эти сложности? Есть же оператор Is.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36916604
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
Бенедикт,

вот сделал аналогично Вашему, пример с формой,
получил такой же результат (кто бы сомневался)) )
vba
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Private Sub Кнопка0_Click()
  Dim o1 As Object
  Dim o2 As Object
  Dim f1 As Form
  Dim f2 As Form
  Dim fx1 As Form_XXX
  Dim fx2 As Form_XXX
  ' ************
  Debug.Print "Type", "Me", "Me.Form"
  Debug.Print "-----------------------------------"
  ' ************
  Set o1 = Me
  Set o2 = Me.Form
  Debug.Print "Object", ObjPtr(o1), ObjPtr(o2)
  ' ************
  Set f1 = Me
  Set f2 = Me.Form
  Debug.Print "Form", ObjPtr(f1), ObjPtr(f2)
  ' ************
  Set fx1 = Me
  Set fx2 = Me.Form
  Debug.Print "Form_XXX", ObjPtr(fx1), ObjPtr(fx2)
End Sub
Код: plaintext
1.
2.
3.
4.
Type          Me            Me.Form
-----------------------------------
Object          1915144         9124892  
Form            1915144         9124892  
Form_XXX        1915144         1915144  

...но как бы - результат - есть, понимания его - нет

если Вас не затруднит, ответьте ещё на несколько вопросов

что бы пояснить откуда "растут ноги у непонимания"
ещё один небольшой пример
delphi
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 procedure  TForm1.Button1Click(Sender: TObject);
   var 
    MyObj : TStringList;
    o0    : TObject;
    o1    : TStringList;
    o2    : TStrings;
 begin 
  MyObj := TStringList.Create;
   // TStringList -> TStrings -> TObject 
  o0 := MyObj;
  o1 := MyObj;
  o2 := MyObj;
  Memo1.Lines.Add('--- Значение ---');
  Memo1.Lines.Add(IntToStr(Integer(o0)));
  Memo1.Lines.Add(IntToStr(Integer(o1)));
  Memo1.Lines.Add(IntToStr(Integer(o2)));
  Memo1.Lines.Add(IntToStr(Integer(MyObj)));
  Memo1.Lines.Add('--- Адрес ---');
  Memo1.Lines.Add(IntToStr(Integer(@o0)));
  Memo1.Lines.Add(IntToStr(Integer(@o1)));
  Memo1.Lines.Add(IntToStr(Integer(@o2)));
  Memo1.Lines.Add(IntToStr(Integer(@MyObj)));
 end ;
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
--- Значение ---
 9774056 
 9774056 
 9774056 
 9774056 
--- Адрес ---
 1242656 
 1242652 
 1242648 
 1242660 

вот здесь - мне всё ясно и "прозрачно":
объектная переменная - это ссылка на объект - соответственно, так как объект - один и тот же,
то и значения этих ссылок (Значения) у всех объектных переменных (вне зависимости от типа) - одинаковые
(вот нечто подобное, я ожидал от ObjPtr)
хотя адрес - разный

но я никак не могу проследить аналогии между результатом в delphi и в vba
какой, вообще физический смысл у ObjPtr ? ,
т.е. - что обозначают все эти "цифири"

я ориентировался на то определение ObjPtr, которое уже приводил
ё(в моём букваре - это называется, цитирую - "указатель на объект (адрес объекта в памяти)" - за точность формулировки - отвечать не берусь, но смысл - очевиден)
(вопрос: неправильное определение? как правильно ?)

из чего делал, как мне казалось, вполне логически правильный вывод,
что если результат возвращаемый ObjPtr, для 2-х объектных переменных (в частности - для объектного свойства) - разный,
то и объекты - разные
(вопрос: вывод не правильный ?..ну тут уже понятно - да, неправильный)

Заранее спасибо!
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36917113
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ё,

Про физический смысл у ObjPtr.
ObjPtr() возвращает адрес блока памяти такой структуры:
Код: plaintext
1.
2.
3.
Type IX
   pVtbl As Long 'адрес таблицы виртуальных функций (методов)
   'далее данные экземпляра компонента (объекта COM)
End Type
О размере данных экземпляра, их структуре и значениях мы формально не можем предполагать ничего, это личное дело (деталь реализации) компонента. Поле pVtbl содержит адрес таблицы виртуальных функций такой структуры:
Код: plaintext
1.
2.
3.
4.
5.
6.
Type IX_Vtbl
   'Адреса обязательных виртуальных функций (методов интерфейса IUnknown)
   pQueryInterface As Long 'адрес метода QueryInterface
   pAddRef As Long 'адрес метода AddRef
   pRelease As Long 'адрес метода Release
   'Далее 0 или более адресов других виртуальных функций
End Type
Таблица виртуальных функций может совместно использоваться разными экземплярами компонента (значения pVtbl у разных экземпляров компонентов могут быть равны). Первым параметром виртуальные функции принимают значение ObjPtr() (типизированный указатель, имеющий это значение, при реализации виртуальной функции методом класса в ООЯП известен как this, Self, Me...), чтобы код виртуальной функции мог добраться до данных экземпляра компонента. Вот таков физический смысл значения, возвращаемого ObjPtr(), если мы говорим о компоненте (объекте COM) вообще. Но нам же нужен не сферический коньмпонент в вакууме, а компонент, который что-то умеет делать. "Что-то делать" выражается в том, что компонент реализует некие интерфейсы (интерфейсы COM, COM-интерфейсы), а клиент создаёт экземпляр(-ы) компонента, и взаимодействует с ним(-и), используя эти интерфейсы. На логическом уровне интерфейс является связанной группой (набором) функций. На физическом – структурой в памяти, описанной выше, а именно указателем на таблицу виртуальных функций, плюс сама таблица. Т. е. указатель на интерфейс – это указатель на указатель на таблицу (массив адресов (указателей на)) виртуальных функций. Интерфейс может наследовать другому интерфейсу, в самом простом виде, добавляя свои методы к методам родительского интерфейса (на физическом уровне – добавляя адреса виртуальных функций-методов в таблицу виртуальных функций после адресов методов родительского интерфейса). Корневым интерфейсом для всех COM-интерфейсов является IUnknown, содержащий три метода: QueryInterface, AddRef, Release.

Теперь, быть может не совсем плавно, перейдём к вопросу – как это, результат ObjPtr() разный, а объект (экземпляр компонента) один? Или наоборот, запросили указатели на разные интерфейсы у экземпляра компонента, и получили одинаковые значения этих указателей? Если совсем кратко, такие особенности – детали реализации компонента, и не более, на которые нельзя (формально) закладываться. Теперь подробнее.

Пусть мы пишем компонент, который должен реализовать три интерфейса: IUnknown, IX и IY. IX наследует IUnknown и добавляет свой метод x(), IY наследует IX и добавляет свой метод y(). Таким образом, для IUnknown в таблице виртуальных функций должно быть 3 указателя: на QueryInterface(), AddRef(), Release(); для IX – 4: на QueryInterface(), AddRef(), Release(), x(); для IY – 5: на QueryInterface(), AddRef(), Release(), x(), y(). И тут возникает два соблазна (следовало бы взять в кавычки, так как человек редко кодирует эти вещи вручную, здесь речь скорее о компиляторе) на почве оптимизации. Соблазн первый – объединить таблицы виртуальных функций, т. е. иметь 1 массив из 5 элементов, а не 3 в общей сложности из 12-ти. Но это довольно безобидно, как говорилось, таблица виртуальных функций может использоваться совместно. Соблазн второй – объединить указатели на таблицу виртуальных функций, раз уж сами таблицы объединены. Таким образом, даже для такого простого случая взаимоотношений реализуемых компонентом интерфейсов, имеем два экстремальных варианта (а в компоненте могут быть реализованы и промежуточные, и "боковые"):
1) Для независимых таблиц виртуальных функций область памяти экземпляра может описываться структурой:
Код: plaintext
1.
2.
3.
4.
5.
Type TMyObject
   pVtblIUnknown As Long 'указатель на отдельную таблицу из 3-х адресов
   pVtblIX As Long 'указатель на отдельную таблицу из 4-х адресов
   pVtblIY As Long 'указатель на отдельную таблицу из 5-и адресов
   'другие данные экземпляра
End Type
2) Для полностью оптимизированных таблиц и указателей на них:
Код: plaintext
1.
2.
3.
Type TMyObject
   pVtbl As Long 'указатель на объединённую таблицу из 5-и адресов
   'другие данные экземпляра
End Type
Теперь представим, что клиент запрашивает у экземпляра компонента вернуть указатели на интерфейсы IX и IY. Для первого варианта компонент вернёт указатели, соответственно, со значениями VarPtr(pVtblIX) и VarPtr(pVtblIY) (разные), для второго – VarPtr(pVtbl) (одинаковые).


Честно говоря, не уверен, что ответил на все заданные вопросы, но голова в настоящий момент уже не варит. Лучше задайте ещё раз.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36919394
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати есть разница между таким:

Me.OrderList.Form.Requery (так обновляется лучше, надёжнее что-ли)

и таким:

Me.OrderList.Requery


Почему так:) ???
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36919803
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NeboКстати есть разница между таким:

Me.OrderList.Form.Requery (так обновляется лучше, надёжнее что-ли)

и таким:

Me.OrderList.Requery
f1The Requery method updates the data underlying a specified form or a control that's on the active form by requerying the source of data for the form .
В примере первый случай - requerying the source of data for the form
второй - or control

Работать должно и так и так, поскольку форма помещена в контрол. (Я пользуюсь первым вариантом ;)

А вот, например, Me.OrderList.Recordset работать не будет, поскольку у контрола, в который помещена подчинённая форма нет рекордсета, есть он только у помещённой формы: Me.OrderList.Form.Recordset. Тоже относится и к обращению к контролам ПФ.
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36920177
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adv,

Спасибо:)
...
Рейтинг: 0 / 0
Объясните разницу между Me.Form.RecordSource и Me.RecordSource
    #36920230
адв
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
о, только сейчас заметил, что недоцитировал ф1ф1The Requery method updates the data underlying a specified form or a control that's on the active form by requerying the source of data for the form or control .
...
Рейтинг: 0 / 0
46 сообщений из 46, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Объясните разницу между Me.Form.RecordSource и Me.RecordSource
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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