powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка N 3211
16 сообщений из 16, страница 1 из 1
Ошибка N 3211
    #39470310
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как правильно в бд акса устранить/обойти ошибку в ситуации при изменении связей таблиц программно?

Суть такая, на общей форме выведено несколько других различных форм в том числе и форма, через которую очищаются нужные таблицы от записей с обнулением счетчика. Если же форму с очищением таблиц запускать отдельно, то проблем нет, но если использовать ее из общей формы, то возникает ошибка 3211 - "Таблица не может быть заблокирована ядром базы данных. Она уже используется другим пользователем или процессом.".
Даже при закрытии общей формы и после отработки кода переоткрытии ее, так же вылезает данная ошибка.

Модератор: Тема перенесена из форума "Visual Basic".
...
Рейтинг: 0 / 0
Ошибка N 3211
    #39470332
Verbovsky Innokenty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А зачем связи-то менять?
...
Рейтинг: 0 / 0
Ошибка N 3211
    #39470333
Verbovsky Innokenty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если уж хочется обнулить счетчик, можно удалить записи и сжать базу данных
...
Рейтинг: 0 / 0
Ошибка N 3211
    #39470559
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Verbovsky Innokenty,
Verbovsky InnokentyА зачем связи-то менять?
Здесь Вы сами ответили на свой вопрос:
Verbovsky Innokenty... обнулить счетчик ,..
Добавлю к ответу, что меня не совсем устраивает то, что после удаления всех записей запуск сжатия бд приводит к тому, что база перезапускается.
Моя задумка с удалением записей касается не только таблиц, которые будут содержать данные вводимые пользователями, но и таблиц, касающихся тех же юзеров как пользователей. Я хочу сделать возможность некоего обнуления базы, которую разрабатываю.
Соответственно, если в качестве админа я очищу например таблицу с пользователями, то при перезагрузке бд я не смогу в нее войти (не считая конечно открытие с нажатым Shift-ом, если он не был отключен), а сжатие бд выполняет как раз таки ту самую перезагрузку. Поэтому я и делаю обнуление счетчика. А функция со сжатием бд сама по себе у меня включена в самих настройках при закрытии базы по умолчанию.
...
Рейтинг: 0 / 0
Ошибка N 3211
    #39470564
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не утверждаю, что моя идея супер правильная. Просто мне не хочется из общей формы запускать другую форму, после отработки кода закрывать ее и запускать обратно общую форму. Я хочу сделать так, чтобы это работало сразу из общей формы. Но не пойму как найти способ сделать это правильно, потому что из общей формы меня блокирует что то, что не дает мне этого сделать.
...
Рейтинг: 0 / 0
Ошибка N 3211
    #39470583
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nataxa23,
базу разделить на табличную часть и интерфейсную, заранее заготовить пустую табличную часть с обнуленными счетчиками, на форме на кнопку повесить код, отлинковывающий таблицы базы, копирующий пустую табличную базу на место прежней и снова линкующий таблицы из табличной базы... по-моему , так будет проще и правильней
...
Рейтинг: 0 / 0
Ошибка N 3211
    #39470593
Verbovsky Innokenty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Простите, но у меня создается такое ощущение, что вы взяли на вооружение немного подправленный тезис Мичурина - нечего ждать трудностей от природы, создать их - наша задача. ))
1. Счетчик - это не нумерация строк, это ключ, который никак не должен касаться пользователя. А исчерпать все длинные целые вам на аксессе вряд ли удастся. Так что повторю вопрос - зачем его обнулять?
2. Если есть возможность запустить нужный процесс из отдельной формы, то зачем нужно возиться с внедренной? Два клика лень сделать? Это ж не пользовательская задача, насколько я понял, а админская.
3. Если выполнение описанной задачи является самоцелью, то замените мешающие внедренные формы на "пустышку", а потом верните все в первоначальное состояние

Код: vbnet
1.
2.
3.
Me.SubForm.SourceObject = MyEmptyFormWithoutAnyData
CurrentDb.Execute "ALTER Table MyTable ALTER COLUMN ID ..."
Me.SubForm.SourceObject = SubForm



ЗЫ критикам: решение под стать задаче )
...
Рейтинг: 0 / 0
Ошибка N 3211
    #39470620
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Verbovsky Innokenty, можно по подробнее с п.3.
Verbovsky Innokenty3. Если выполнение описанной задачи является самоцелью, то замените мешающие внедренные формы на "пустышку", а потом верните все в первоначальное состояние
Код: vbnet
1.
2.
3.
Me.SubForm.SourceObject = MyEmptyFormWithoutAnyData <-- 1) не понятно что это за переменная???
CurrentDb.Execute "ALTER Table MyTable ALTER COLUMN ID ..."
Me.SubForm.SourceObject = SubForm


2) и еще вопрос, не знаю как добраться до подчиненной формы на форме из общей формы.
Ваш пример кода, как я понимаю подразумевает, что удаление и обнуление должно быть из общей формы. А у меня то все формы вместе с подчиненными расположены на общей форме. Форма, из которой я запускаю на удаление и обнуление тоже выведена на общую форму, но из нее то как обратиться к "подформам", которые являются подчиненными для выведенных форм на общей форме?
...
Рейтинг: 0 / 0
Ошибка N 3211
    #39470627
Verbovsky Innokenty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nataxa23можно по подробнее с п.3.
Замените подчиненные формы, которые обращаются к редактируемым таблицам, на подчиненные формы, которые к таким таблицам не обращаются. Если таковых нет, создайте пустую форму и заменяйте на нее. После изменения таблиц верните все на место. Не забудьте восстановить и свойства типа подчиненного поля. Сразу говорю, наверняка есть способы поизящнее. Можно попробовать, например, убить рекордсеты этих форм. Но я навскидку не нашел как это сделать
nataxa232) и еще вопрос, не знаю как добраться до подчиненной формы на форме из общей формы.
Ваш пример кода, как я понимаю подразумевает, что удаление и обнуление должно быть из общей формы. А у меня то все формы вместе с подчиненными расположены на общей форме. Форма, из которой я запускаю на удаление и обнуление тоже выведена на общую форму, но из нее то как обратиться к "подформам", которые являются подчиненными для выведенных форм на общей форме?
через родителя
Код: vbnet
1.
2.
3.
Me.Parent.SubForm.SourceObject = MyEmptyFormWithoutAnyData
CurrentDb.Execute "ALTER Table MyTable ALTER COLUMN ID ..."
Me.Parent.SubForm.SourceObject = SubForm
...
Рейтинг: 0 / 0
Ошибка N 3211
    #39470669
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если уж так хочется обнулить счетчик, удалите все строки, вставьте новую строку INSERT-ом с нулем в поле с автонумерацией - база позволяет вставлять туда любые значения командами SQL и через рекордсет. После того, как вы удалите эту строку, следующее значение, которое автоматически сгенерирует база, будет на единицу больше последнего вставленного значения до следующего сжатия-восстановления, которое сбрасывает счетчик на максимальное использованное значение + 1
...
Рейтинг: 0 / 0
Ошибка N 3211
    #39470673
Verbovsky Innokenty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin, я должен был первым вспомнить про это очень сильное колдунство. Но не вспомнил (
...
Рейтинг: 0 / 0
Ошибка N 3211
    #39470855
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShinЕсли уж так хочется обнулить счетчик, удалите все строки, вставьте новую строку INSERT-ом с нулем в поле с автонумерацией - база позволяет вставлять туда любые значения командами SQL и через рекордсет. После того, как вы удалите эту строку, следующее значение, которое автоматически сгенерирует база, будет на единицу больше последнего вставленного значения до следующего сжатия-восстановления, которое сбрасывает счетчик на максимальное использованное значение + 1
Правильно ли я понимаю "шаманство"? Чтобы не мучиться с обнулением счетчика нужно:
1) удалить все имеющиеся записи.
2) затем вставить запросом пустую строку с нулевым значением для счетчика.
3) потом ее же удалить запросом.
...
Рейтинг: 0 / 0
Ошибка N 3211
    #39470930
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23,

Да
...
Рейтинг: 0 / 0
Ошибка N 3211
    #39471037
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin,
Спасибо за наводку, вроде бы работает такой "финт ушами".
Правда теперь возникла трудность с одной формой, которая построена на запросе из 2-х таблиц и если запускаю удаление даже сразу для обеих таблиц, то удаляет как то частями. Получается, для этой формы удаление надо делать последовательно - вначале для одной таблицы, потом для второй.
...
Рейтинг: 0 / 0
Ошибка N 3211
    #39471057
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23удаляет как то частями
Скорее всего включено поддержание целостности для связаных таблиц, извиняюсь, не помню как это правильно называется по русски. Поэтому нужно удалять сначала из той таблицы, кде находится вторичный ключ связи, а потом из той, где первичный.

Вообще удаление из рабочих таблиц - нежелательная операция, обычно ненужные записи помечают как удаленные, не удаляя их физически.
...
Рейтинг: 0 / 0
Ошибка N 3211
    #39471164
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShinСкорее всего включено поддержание целостности для связаных таблиц, извиняюсь, не помню как это правильно называется по русски. Поэтому нужно удалять сначала из той таблицы, кде находится вторичный ключ связи, а потом из той, где первичный.
да-да-да... все верно, именно по этой самой причине. Честно говоря просто сразу не с ориентировалась на месте, т.к. зациклилась на своей проблеме из поста.
Сейчас уже все работает как надо.
MrShinВообще удаление из рабочих таблиц - нежелательная операция, обычно ненужные записи помечают как удаленные, не удаляя их физически.
Спасибо за добрый совет для меня - для новичка любая инфа интересна и важна.
В моей ситуации правда тоже не предполагается постоянное очищение рабочих таблиц, но в ситуации, пока я ее создаю, я одновременно еще и тестирую ее. Поэтому в ходе и возникла такая идея заранее подготовить базу для обнуления так сказать.

Еще раз спасибо Вам огромное за помощь в решении вопроса и всем, кто так же откликнулся на мой пост с предложенными вариантами!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка N 3211
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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