BPK |
.... | Предложеный способ можно обойти - открыть базу при помощи GetObject. Тогда и autoexec не срабатывает, и свойство AllowByPassKey можно сбросить. |
Пример? |
валяется на диске (сам не пробовал)
По материалам: http://accessminsk.hotmail.ru
Замечание: Сергей Гаврилов svg@chel.surnet.ru
При запуске данной функции производится запрос на УСТАНОВКУ или СНЯТИЕ "защиты".
Замечание от Сергея Гаврилова:
svg@chel.surnet.ru
…хотелось бы внести небольшое, но, мне кажется, важное замечание к данному коду. Защита от Shift, установленная данным примером, может быть легко удалена аналогичным кодом извне. И подобные программы, снимающие эту защиту, есть. А этого можно легко избежать, если ПРАВИЛЬНО установить защиту от Shift. Посмотрим Help на Метод CreateProperty:
Синтаксис
Set свойство = объект.CreateProperty (имя, тип, значение, кодDDL).
Мы видим четвертый параметр, который почему-то отсутствует в примере "Защита от Shift":
Set prp = dbs.CreateProperty("AllowBypassKey", dbBoolean, True)
Читаем в Help об этом параметре:
кодDDL - Необязательный. Выражение или переменная типа Variant (подтип Boolean), указывающая, является или нет объект Property объектом языка описания данных (DDL). По умолчанию задается значение False. Если кодDDL имеет значение True, данный объект Property может быть изменен или удален только пользователем, имеющим разрешение dbSecWriteDef.
Таким образом, если используется защита на уровне пользователя и она сделана грамотно, то изменение свойства "AllowBypassKey" извне будет недоступно.
Правда сама защита на уровне пользователей слаба, но это уже другая песня...
Function BazyShift()
Dim dbs As Database, prp As Property
Const conPropNotFoundError = 3270
Set dbs = CurrentDb
Dim TmpBool As Boolean
On Error GoTo Change_Err
If dbs.Properties("AllowBypassKey") = True Then
If MsgBox(" Реагируем на " & Chr(13) & " открытый режим базы" & Chr(13) & " Защитить?", vbInformation + vbYesNoCancel) = vbYes Then
dbs.Properties("AllowBypassKey") = False
TmpBool = MsgBox("Нормальная работа в режиме ЗАЩИТЫ начнется при следующем старте.", vbInformation)
End If
Else
If MsgBox(" Нет реакции на " & Chr(13) & " Нормальное состояние базы" & Chr(13) & " Хотите включить?", vbExclamation + vbYesNoCancel) = vbYes Then
dbs.Properties("AllowBypassKey") = True
TmpBool = MsgBox("Вы можете просматривать и редактировать объекты базы при следующем входе в нее. Незабудьте потом отключить реагирование на .", vbInformation)
End If
End If
Change_Bye:
Exit Function
Change_Err:
If Err = conPropNotFoundError Then ' Свойство не найдено.
Set prp = dbs.CreateProperty("AllowBypassKey", dbBoolean, True)
dbs.Properties.Append prp
Resume Next
Else
' Неизвестная ошибка.
Resume Change_Bye
End If
End Function