(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Удаление битых ссылок на библиотеки методом References.Remove

Источник: Rusimport
Кривцов Анатолий

Access перед удалением ссылки ищет в реестре ключ с её GUID и версией.
Решение состоит в том, что если первая попытка удаления не удалась, то создается ветка в реестре (GUID и версию можно вычитать из битой ссылки). Затем удаляется ссылка, потом ветка, а затем создается ссылка на самую свежую версию библиотеки (если есть).
Данный пример вполне работоспособен, так как проверялся на библиотеках Excel и Word.

Function CheckBrokenReferences() As Boolean
On Error Resume Next
Dim refs As Access.References, ref As Access.Reference, i As Integer, fBroken As Boolean
Dim wshShell As Object, strGUID As String, strKey As String

Set refs = Application.References
'Проход по ссылкам в обратном порядке
For i = refs.Count To 0 Step -1
Set ref = refs(i)
If Not ref.IsBroken Then GoTo NextReference
If ref.BuiltIn Then fBroken = True: Exit For
'Первая попытка удаления битой ссылки
refs.Remove ref
If Err.Number = 0 Then GoTo NextReference
Err.Clear
If ref.Kind = 1 Then fBroken = True: GoTo NextReference
'Если возникла ошибка при удалении ссылки на библиотеку, методами WSH пытается
'добавить в реестр ветку с GUID и версией из битой ссылки, удалить ссылку,
'а затем удалить ветку.
If wshShell Is Nothing Then Set wshShell = CreateObject("WScript.Shell")
If Err.Number <> 0 Then fBroken = True: GoTo NextReference
strGUID = ref.Guid
strKey = "HKCR\TypeLib\" & strGUID & "\" & ref.Major & "." & ref.Minor & "\"
wshShell.RegWrite strKey & "0\win32\", ""
'Вторая попытка удаления ссылки (она, типа, зарегистрирована)
refs.Remove ref
If Err.Number <> 0 Then Err.Clear: fBroken = True

wshShell.RegDelete strKey & "0\win32\"
wshShell.RegDelete strKey & "0\"
wshShell.RegDelete strKey

'Пытается создать ссылку на самую свежую зарегистрированную библиотеку.
refs.AddFromGuid strGUID, 0, 0

NextReference:
Next i
' Next ref

CheckBrokenReferences = fBroken

CheckBrokenReferences_exit:
Set ref = Nothing
Set refs = Nothing
Set wshShell = Nothing
Exit Function
End Function

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 27.09.2007 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год.
Microsoft 365 Business Standard (corporate)
Microsoft Office 365 Бизнес. Подписка на 1 рабочее место на 1 год
Microsoft Office для дома и учебы 2019 (лицензия ESD)
Microsoft 365 Business Basic (corporate)
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Компьютерная библиотека: книги, статьи, полезные ссылки
ЕRP-Форум. Творческие дискуссии о системах автоматизации
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100