|
|
|
Проблема с коллекцией References. Не получается програмное удаление ссылок.
|
|||
|---|---|---|---|
|
#18+
Вот с какой проблемой я столкнулся и пока не нашел решения. Советы в MSDN есть, но они почему-то не работают. Мой файл MDB использует ссылки на хорошо всем знакомые библиотеки ADODB и ADOX. НО! При запуске на другой машине с другой версией MS Office, отличной от моей ver. 2003, а именно XP, 2000 не находятся ссылки на нужные версии библиотек. ADODB можно подключить из набора 2.1 ... 2.8 более старую 2.5, благо они лежат на машине всем букетом, новые добавляются к имеющимся старым. С ADOX такой фокус не проходит - его версию надо указывать конкретно - 2.5, 2.7, 2.8. При открытии startup формы можно програмно проверить коллекцию ссылок и найти те, которые broken. Но удалить паламатую ссылку и подключить на ее место хорошую нельзя - при удалении возникает ошибка. Подключить новую без удаления старой тоже нельзя - возникает конфликт версий. Тогда я поступил таким образом: 1. удалил руками через меню tools|references ссылки на ADODB и ADOX 2. в startup форме подключаю их по известному GUID и номерам версии. Сначала пробую подключить более старшие версии, затем, в случае неуспеха, перебираю более младшие, пока не подключиться - работает ОК. 3. startup форма делается невидимой на все время работы приложения - ОК 4. в unload событии startup формы програмно удаляются хорошие рабочие ссылки на ADODB и ADOX - работает ОК. Для диагностики после удаления выводится списко оставшихся в коллекции References ссылок - все как надо. Событие unload формы startup вызывается при выходе из приложения. 5. А вот теперь самое обидное. При следующем открытии MDB с загрузкой или без загрузки startup формы СВОЛОЧНЫЕ ССЫЛКИ ВСЕ РАВНО уже есть! Если открывать под лругой версией офиса, то опять будет ошибка. Плохая ссылка не удаляется. Вот подключение ссылок в startupe: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. А вот unload формы startup: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2004, 09:47:05 |
|
||
|
Проблема с коллекцией References. Не получается програмное удаление ссылок.
|
|||
|---|---|---|---|
|
#18+
Люди! Памагите! Неужели никто не сталкивался ? Надо же в конце концов свои проекты пользователям устанавливать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2004, 12:33:34 |
|
||
|
Проблема с коллекцией References. Не получается програмное удаление ссылок.
|
|||
|---|---|---|---|
|
#18+
Посмотри тут: /topic/97521#719310 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2004, 12:38:20 |
|
||
|
Проблема с коллекцией References. Не получается програмное удаление ссылок.
|
|||
|---|---|---|---|
|
#18+
Это все мелкософтовская херня, связанная с проблемами распространения приложений MsOffice ... Надо определяться : Каким путем идти - официальным или своим. Если посмотреть как совместить их, то получается следующее : Официальный предусматривает создание дистрибутива приложения и его инсталляцию на каждую машину клиента, тогда будут и ссылки не поломаны и библиотеки все зарегестрированы, НО! И тут могут потребоваться адаптации приложения, ввиду, вообще говоря, несовметимости продуктов MS снизу вверх по линейке своих продуктов (иначе бы ,скажем, новые версии того же ADO DAO просто перекрывали бы старые , ан нет - они сосуществуют под разными номерами на одном компе) Да и всегда будет проблема совместимости сверху вниз - когда разработано на ,скажем, Office2002 а хочется , чтобы это работало на Office 2000,98,97,95, потому что на компах юзеров именно они стоят! Видно проблема "сверху вниз" только решается требованием, чтобы стояло не ниже Office2002, Но вот , вроде бы Office2002 далеко не у всех есть, а вот скажем Office2000 можно практически всегда поставить всем, т.к. аппаратные возможности позволяют. Отсюда ,ну и с учетом его возможностей , можно ориенироваться при разработке на Office2000. Когда с Office'ом решено, нужно требовать его наличия у пользователей. Далее, если смотреть на подключаемае библиотеки, то их ,вообще говоря, может быть немеряно в проекте, все не реанимируешь, да и не предполагает это MicroSoft - считается, что ссылки должны быть привязаны, а библиотеки на которые они указаны зарегестрированы в системе, только при этих условиях проект м.б. корректно откомпилирован! Поэтому, надо научиться распространять до приложения еще и среду в которой оно может работать, не зря сейчас .NET приложения требуют для своей работы .Net Framework, которая ,кстати сказать, весит 2 десятка мегов - у MS чем дальше, тем страшнее. Я , например, на предприятии , где использовались мои Office приложения , на сервере в общей папке держал библиотеки, которые устанавливались на все заинтересованные в них компы, сделать это можно как средствами сетевого администрирования, так и при 1-м запуске приложения, которое от них зависит, правда это вариант, типа твоего, но он ,как ты уже понял, не очень надежный. Лучше инсталлировать среду работы отдельно на каждый копм юзера, только придумать, как в твоих условиях это сделать удобнее. Хочу еще раз сказать, в Windows от процесса деплоинга с инсталляцией никуда не деться, надо только это хорошо для себя понять , хоть и кажется что можно просто кидать по пользователям MDB,DOC,XLS и пр. файлы MsOffice. Поэтому надо наиболее удобно решить для себя эту задачу принципиально, с учетом наиболее общего случая разработки приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2004, 01:21:39 |
|
||
|
Проблема с коллекцией References. Не получается програмное удаление ссылок.
|
|||
|---|---|---|---|
|
#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. При выгрузке: Код: 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. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 14:19:32 |
|
||
|
Проблема с коллекцией References. Не получается програмное удаление ссылок.
|
|||
|---|---|---|---|
|
#18+
если интересно - сделал так: при запуске проверяется версия MDAC если ниже 2.8 то запуск Setup MDAC28 c сетевого диска и Application.Quit ибо не факт что написанное для 2.8 будет работать без глюков в младших версиях. если же касается библиотек используемых в приложении то в автоекзеке идет проверка если референса нет извлечь файл из таблицы с бинари файла в системную папку, зарегистрировать и перезапустить аксесс. если нужны подробности как именно можно проверить версию или технология извлечения библиотек из таблиц и восстановления референсов могу дать примеры кода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 15:04:35 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32791043&tid=1670203]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 318ms |

| 0 / 0 |
