powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / наблюл:"база приведена в состояние блокировки, препятствующее ее открытию"
15 сообщений из 15, страница 1 из 1
наблюл:"база приведена в состояние блокировки, препятствующее ее открытию"
    #32449934
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начиная с А2000 такое стало возможным.
Про 2000 писали - не пользуйся CurrentDB, открывай через ADO и, скорее всего, все будет хорошо.

Наблюл (Access XP):
1) база попадает в такое состояние при обращении из модуля класса к функции, содержащейся в обычном модуле ( и формирующей глобальную объектную переменную) при условии, что модуль не был до этого инициализирован из обычного модуля.
2) сложилось внятное впечатление, что подобное происходит при "дефолтной" передаче объектных переменных Access (формы) в процедуры, года процедура получает ее фактически byVAl, а вызывающий "бросает" объект.

ЗЫ
Промучился полдня, пока отловил, и ни один партизан не слова не сказал, куда копать -)
...
Рейтинг: 0 / 0
наблюл:"база приведена в состояние блокировки, препятствующее ее открытию"
    #32449938
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняйте за словесность - тут уже русским язЫком почти разучился говорить к вечеру
...
Рейтинг: 0 / 0
наблюл:"база приведена в состояние блокировки, препятствующее ее открытию"
    #32449939
Фотография Шайтан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и часто тя так по пятницам торкает?
Шайтан
...
Рейтинг: 0 / 0
наблюл:"база приведена в состояние блокировки, препятствующее ее открытию"
    #32449943
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Шайтан
-не часто, но только по пятницам
...
Рейтинг: 0 / 0
наблюл:"база приведена в состояние блокировки, препятствующее ее открытию"
    #32450116
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, я так и не понял, что же именно я наблюл.
Продолжение истории выглядит следующим образомЖ

(исходно файлик в формате 2000, исполнитель - XP)
пошел тупо по строчкам, регулярно загоняя датабасу в passive shutdown
на невинных строчках типа
а) Dim b AS Boolean
b= (f Is Nothing) ', где f - переменная класса Access (форма)
b) Dim a() As MyClass
Redim a(0 to ...) As MyClass
...
a(i)= New MyClass
аккуратно вычищая это хозяйство.

дотопал до строки типа
set FLimits = New Form_Limits, при исполнении которой наступает ps. Перед нею еще пара подобных, ни к чему "плохому" не приводят.
В этом месте задумался о том, что , может - файлик "порушенный".
/decompile, compress, compile, перевод в формат 2002 и обратно - эффект ноль.
Собрался "экспортировать" в новый. Тут в "технических статьях" наткнулся на
Q323203, в котором рассказывается о том, что если баСа падает при исполнении кода, пытающегося открыть объект Access - освежи ссылки. У меня не падает - но мысль показалась интересной. Освежение руками - ничего примечательного. В заметке прилагался код для освежения:
================
Dim r As Reference, r1 As Reference
Dim s As String

' Look for the first reference in the database other
' than Access and Visual Basic for Applications.
For Each r In Application.References
If r.Name <> "Access" And r.Name <> "VBA" Then
Set r1 = r
Exit For
End If
Next
s = r1.FullPath

' Remove the Reference and add it back.
References.Remove r1
References.AddFromFile s

' Call a hidden SysCmd to automatically compile and save all modules.
Call SysCmd(504, 16483)
==============
Решил попробовать. И тут случилось чудо. При исполнении этого кода моя баСа стабильно "падает". Ну все, теперь, кажется точно - экспортировать.
Желание "освежить" не нашло выхода и мучило. Стал разглядывать определения членов класса - в нем пара лонгов и пяток форм. Причем вредная - первая по списку, сразу за константами. Твердо намерившись освежить перед экспортом, переставил определения местами - лонги как скобки - первый и последний, а формы внутри. Вредную пихнул в середину.
Должен доложить, что ненужное мне без моей воли ps (err 3734) сразу ИСЧЕЗЛО. всякий полезный и интересный код стал активно исполняться, и такое впечатление, что все в целом (открытие форм, резайзинг и тд) прибавило в скорости не чуть-чуть, а в разы. И во всех версиях (2000, 2002), и без всякого экспорта.

Ну, и скажет ли мне кто-нибудь, что же именно я наблюл?
...
Рейтинг: 0 / 0
наблюл:"база приведена в состояние блокировки, препятствующее ее открытию"
    #32450197
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Это большой бубен со сложной внутренней структурой.
...
Рейтинг: 0 / 0
наблюл:"база приведена в состояние блокировки, препятствующее ее открытию"
    #32450252
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Владимир Саныч

Абыдно, Да?
...
Рейтинг: 0 / 0
наблюл:"база приведена в состояние блокировки, препятствующее ее открытию"
    #32450257
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Канэйшно.
...
Рейтинг: 0 / 0
наблюл:"база приведена в состояние блокировки, препятствующее ее открытию"
    #32450264
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну наверняка это где-нить в MSDN описывается. Но мельком и невнятно.
Так что бубен, адназначна
...
Рейтинг: 0 / 0
наблюл:"база приведена в состояние блокировки, препятствующее ее открытию"
    #32487087
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или
пишем Deep по Салахетдинову-Каплану.


в модуле класса

Private WithEvents Form as Form

'метод управления видимостью
Public Property Let formVisible(bVisible As Boolean)
If bVisible Then
Form.Modal = True
Form.Visible = bVisible
Form.SetFocus
Else
Form.Visible = bVisible
Form.Modal = False
End If
End Property

так вот при таком варианте обращения попадаем в режим контроля доступа
по крайней мере на ветке else

что-то не до конца понятно - почему же так критично.
и как преодолевать. Пока приходится пришибать объект.
А лучше бы всю халабуду сразу.
...
Рейтинг: 0 / 0
наблюл:"база приведена в состояние блокировки, препятствующее ее открытию"
    #32487088
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
авторIf bVisible Then
Form.Modal = True
Form.Visible = bVisible
Form.SetFocus
Else
Form.Visible = bVisible
Form.Modal = False
End If
Позволю себе коммент не по делу. Вот так будет то же самое, но короче:

Form.Visible = bVisible
Form.Modal = bVisible
If bVisible Then Form.SetFocus
...
Рейтинг: 0 / 0
наблюл:"база приведена в состояние блокировки, препятствующее ее открытию"
    #32487089
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да уж - не сомнения, только что-то не до оптимизьма ..., то бишь оптимизации.
а это следы шаманизьма такие остались.

(((жжж
...
Рейтинг: 0 / 0
наблюл:"база приведена в состояние блокировки, препятствующее ее открытию"
    #32487090
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это (((жжж - неспроста, это жжж к тому, что при таком подходе ( в смысле вываливания в режим контроля доступа) весь этот formVisible
не нужен ни эрегированному, ни какому другому
...
Рейтинг: 0 / 0
наблюл:"база приведена в состояние блокировки, препятствующее ее открытию"
    #32487467
Фотография Green2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victosha Про 2000 писали - не пользуйся CurrentDB, открывай через ADO и, скорее всего, все будет хорошо.

А как открывать CurrentDB тогда?
...
Рейтинг: 0 / 0
наблюл:"база приведена в состояние блокировки, препятствующее ее открытию"
    #32487549
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про currentDb в этом контексте, я скорее всего, соврал.
может поправили - воспроизвести точно не могу.

про currentDB есть несколько другая рекомендация -
типа не обращайся к ее объектам иначе, как через локальную переменную
то есть
CurrentDB.Tabledefs - плохо

dim db AS DAtabase
set db=CurrentDB

db.TableDefs - хорошо

ЗЫ

у меня, конечно, дыра в голове, и немалого размера уже,
но придумалось/припомнилось совершенно очтетливо, что вызов
CurrentDb в цикле приводит режиму контроля доступа.
Попробовал - а не воспроизводится. То ли сервис паки, то ли дыра...
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / наблюл:"база приведена в состояние блокировки, препятствующее ее открытию"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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