|
|
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
изначально, ежели вы читали, никакого Private Sub ArcF_Close() нихде не было а все было в Form_Close (Set TARC.ArcForm = NOTHING , правда другие события не выставлялись в "" а просто обходились в процедуре Property Set ArcForm (см выше)) И все валилсоь т.е. вы утверждаете, что в случае Nothing в Property Set ArcForm (см выше) нужен обратный обход: сначала все Set ArcF.OnТРАТАТА = "" и только потом Set ArcF= nothing ? возможно. Пасиб за растолковку. проверю на досуге (сейчас запарка временная) завтра. Все завтра. вот только что же он, падла, валится, а не ругается :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 19:41 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
Насчет сначала ТРАТАТА="", а потом Nothing - это определенно. Но. НО Переменные типа формы (и прочие "внешние объекты автоматизации") требуют ОЧЕННО БОЛЬШОЙ акууратности. При всем том, что Nothing - это всего лишь лонг равный нулю, я сам ПРОСТО ПОБОЯЛСЯ БЫ писать Set myVar.MySetMethod= Nothing применительно к переменным формы. В этом месте ЛЕД ТОНКИЙ. И лыж походящих может не оказаться. В 10 случаях из 10 я бы написал внутреннюю очистку для данного случая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 19:49 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
мне хотелось бы, чтобы класс работал "похоже" на собственные объекты Аксес Если есть паблик св-во (пропертя сет), чтобы можно (не токмо мне) "не задумываясь" влудить Set ЭтаСамяПропертя = Nothing в том же модуле класса (формы), где ей сначала делали не Nothing (чтобы и не надо было лазить в реализацию, и убеждаться, что оно там само умрет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 20:16 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
автормне хотелось бы, чтобы класс работал "похоже" на собственные объекты Аксес Если есть паблик св-во (пропертя сет), чтобы можно (не токмо мне) "не задумываясь" влудить Set ЭтаСамяПропертя = Nothing а зачем вообще нужен такой класс, умеющий слушать РАЗНЫЕ формы - какие прикажут? Ведь модуль класса КАЖДОЙ формы обладает таким волшебным умением - слушать СВОЮ форму. Видимо, для "экономной" реализации однотипного поведения. Не знаю какого, например, той самой пресловутой "регистрации действий пользователя с базой". Будучи однажды написанным (неважно в данном контексте) он способен подключаться/его можно подключить (КРИТИЧЕСКИ ВАЖНО- собственно определяет отношение к такому классу) к любой форме, работающей с набором данных (вновь не важно). Что здесь "похожего" на собственные объекты акцесс? И где вообще проперти Сет? Тут вовсе НЕ проперсти Сет а Public Sub AttachForm( byval uForm as Form) и Public Sub Detach|Destroy|ClearClass|Terminate просматриваются, а никак не проперти Сет, которое никого не делает ни на кого похожим. автор(чтобы и не надо было лазить в реализацию, и убеждаться, что оно там само умрет). -))) а вот с этого места пожалуйста поподробней. Кого Вы собираетесь туда послать? И чем дисциплина Set|Set лучше чем дисциплина Attach|Detach ? По мне так второй вариант гораздЕЕ лучше именно тем, что собственное имя для всякого случая имеет. ЗЫ1 пока пиво пилось подумал - неа, не убелили, что все это не провокация ))) Ps2 сегодня "меня не будет". Так что, "вероятные продолжения" - завтра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2004, 04:46 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
проверил вчера эээ "теорию отключения подписчиков" (хотя и так было ясно, что она тут не причем - Arc_Close не отписывал никого, а крахом не кончался, но я спорить не стал - а вдруг действительно чо вумное скажете :0) так вот, фиха. (пока все об акс 97) т.е. сермяга не в подписке/отписке и не в письках ваапше, а в том, что в а97(по меньшей мере в моих версиях) надо вызывать деструктор ТОЛЬКО в событии (еще посмотреть, где можно, а вдрух не везде) форменной переменной класса, объявленной WithEvents стало быть продолжим думать о том, на что вы вчера не подумавши накинулись: а именно как убрать торчащие из класса свойства и методы, приводящие к краху. (Или сделать так (если невозможно убрать что-то совсем), чтобы поюзав их, внешнеий пользователь класса не приводил систему к краху.) то, что метод Destroy (Terminate) придется запретить к публикации уже ясно. Остаются 2 ручки, валящие аксесс (именно Access.exe валится из-зм анхендлед ексепшн, а не "ТАКОЙ КОД", прошу заметить, т.ч. хуру тут обшибся адресом). 1. попытка "обнулить" свойство Set TARC.Arc_Form = Null (что, поскольку оно торчит из класса, никто формально не отменял) это лечится просто: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. (видимо флаг вообще необходим, дабы предотвратить попытку переключить форму после первого подключения - надо подумать...) Второе - попытка запустить деструктор извне - Set TARC = Nothing (или объявить переменную TARC на уровне процедуры, а не класса, что по выходу из процедуры очистит ссылку и тем самым вызовет его деструктор). Это можно сделать в инициализации, но поскоку класс можно юзать и не из форм (гипотетически) (скажем какие-то методы), то лучше: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Код: plaintext 1. 2. 3. 4. 5. далее можно и так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Итак, убрать ручки можно. Но всегда ли удобно то, что я не имею право дестройнуть класс снаружи (не вызвав требуемого события в ЕГО форменной переменной)? Ведь я могу захотеть написать ветвящиеся алгоритмы, некоторые ветви которого мне УДОБНО бы было реализовывать как ОТДЕЛЬНЫЙ класс и отключать его полностью (деструтором) по мере необходимости (подключая, в случае нужды, новый), а не ввязываться в бодягу полного перенаполнения контекста (событий, методов вызываемых в событиях, и т.п.) одного и того же класса по условию. Я не утверждаю, но полагаю такой случай возможным. ___ Да, проверил на 2к. То же самое (сначала показалось не-а, но "пригляделся - "t,encz"). Т.что делать паблик методы дестрой/терминейт и т.п. нет нужды и в нем. насчет чиканья всех ручек надо подумать, мож какую бациллу с этим делом протащу. (Можно и попытаться запомнить, чо и когда можно а чо нельзя). Но и писать публичные методы, которые нельзя публично юзать - тоже моветон-с. ___ Насчет Public Sub AttachForm и т.п. - поподробней, если не лома. Ибо в моем классе русским по белому накарябано ... Property Set ... Property Get и никаких Attach-ей- и прочачей нет. Где подмена (засада)? Кто осуществлял. Какая падла это криво реализовала? Кого piPrevent-ить будем? ____________ нет, я вполне допускаю, что именно у меня руки криво прикручены. Т.е. что я нахожу штучки, которые не работают. Но мне кажется, что они должны работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2004, 13:49 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
Опс. Упустил: имелось в виду, что разблокировка терминейта теперь у нас в наших событиях форменной переменной класса . И токо там. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2004, 13:55 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
хуру, значит хуру. тема закрыта. По крайней мере до замены огрызков на куски кода пригодные к анализу. (модуль формы+ модуль класса-обвязки в "исходном виде") Гадать на Ваших гущах мне весьма затруднительно. А в том, что мне Ваши "методы" не подошли - виноват я сам. PS Не знаю, что там у Вас A2K "также" как в 97, а про 97 "знаю" примерно следующее - там неэтично начинать подобные "обвязки" без установленного 3-го сервис пака. На всякий случай - проверьте. (не знаю, были ли более поздние) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2004, 00:45 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
тесtовая база (2k==97) форма Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: 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. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 97 -SP2, но ACCESS2000 - SP3 (а тут с какого SP ?) оба падают уже после исполнения предложения {End Sub} процедуры {Private Sub Form_Close()} вот и думаю, шо я не так поняв за классы (шо даже обработку эксепшенов на такой случай делать не нада)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2004, 12:15 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
Соврал я в своих изложениях только в одном - в порядке подписки. Далее про письки. письки в приведенном Вами Terminate должны жить следующим образом: Private Sub Terminate() 'все равно все не чистим ArcF.AfterUpdate = "" ' - это письки ' ArcF.OnClose = "" ' это тоже ' Set ArcF = Nothing 'Без ArcF_Close валит Access - враки - с письками никто никого не валит, если письки стоят. End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2004, 12:45 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
тупо вставил. тупо валится. тупо в 97 SP2 тупо в 2000 SP3 А в каком у вас не валится? (И вообще, что он делает без "отписки") _ ЗЫ. "Отписку" я не воспроизводил в пердлагаемой модели, поскоку все одно валится. Что и подтвердилося. :( нет в жисти щастя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2004, 16:12 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
Код: 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. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2004, 16:14 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
у меня никак не валится ни так не эдак. Офис xp Замечание по поводу последнего приведенного "полного" текста от 12:15 - почему Private TARC As New T_ArcF - NEW тут для кого? - не вполне честно "подписываться" не предоставив собственно интерфейса для получения уведомлений. По поводу версий - про 97 свое мнение об этичности оставляю в силе. в 2000 должно бы работать в любой вариации. Теперь по поводу валится. Исключительно для очистки совести, я бы в такой ситуации провел два эксперимента. 1) в классе-обвязке, применив последний указанный мной Terminate завел бы ПУСТУЮ процедуру Private Sub ArcF_Close() End Sub и посмотрел бы на результат 2) Не заводя вышуказанной процедуры, снял бы Private ограничение на Terminate, вставил бы в него в качестве первой строки ON ERROR RESUME NEXT И, в событии закрытия формы написал TARC.Terminate Set TARC = Nothing (и посмотрел бы на результат) ---------------------------- Из изложенного Вами, эксперименты эти - всего лишь припарки на теле мертвого, который перед смертью сильно потел, но как знатный некрофил, я бы их все-таки провел. Возможно, правильнее, сразу лезть на саппорт microsoft по теме совместного использования 97 и 2000 и шарит затем по реестру в соответствии с вычитанными рекомендациями. ЗЫ А не была ли у Вас установлена какая-нибудь особо полезная програмь, подменившая при своей установке Ole32.Dll ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2004, 16:47 |
|
||
|
My first class. вопросы
|
|||
|---|---|---|---|
|
#18+
Не, не выходит каменный цветок. Если честна, я уже давно написал не падающий код (даже загородился от случайного написания "неправильного" - "автоподхватом" класса), но хотел бы разобраться в чем дело при таком подходе. ____________ замечание: В событии Close формы "отписку" от OnClose производить поздно. Я уже писал ПРЯМО в него (в Form_Close) так: Me.OnClose = "" или TARC.ArcForm.OnClose = "" и наблюдал (если я в Form_Close НЕ удаляю TARC) по крайней мере в последнем случае (т.к. это я помню точно) что: ArcForm.OnClose = "" ArcF.OnClose = "" но дебуггер на ArcF_Close приходит все равно сразу после Form_Close мы уже получив событие Close пытаемся отменить его обработку, думается это можно до (до наступления события) - т.е в обработчиках других событий, чего нам даром не надь. :) можно ж и не (пере)объявлять ArcF.OnClose = "[Event Procedure]" и не создавать ArcF_Close (я ж не обязан дублировать все обработчики своими? а только те, которые я хочу дополнить) а просто выполнить Form_Close, уж коль уже сохранено св-во (и не переопределялось в коде) как: Form.OnClose = "[Event Procedure]" все упадает в лучшем виде. __ по поводу DLL - могабыть. Только я на 2-х компах это имел. (дома и на работе). Осталось посмотреть на "чистом" а2000. Ole32.Dll 5.00.2195.6810 Операционная система Microsoft (R) Windows (R) 2000 923 КБ (945 936 байт) суббота 23 августа 2003 г., 14:48:40 язык - русськи __ NEW - у меня форма, на ней 4 подформы юзают класс на 2-х из них - свои подформы, из них класс юзают - на 1- одна на 2-й - 2 (могут быть и больше, но я архивирую только важные для юзеров таблицы - по поводу авторства записей в которых они спорят). Т.ч. мне в каждой форме нужны свои архиваторы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2004, 18:10 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32535036&tid=1674343]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
181ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 481ms |

| 0 / 0 |
