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

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

Модератор: Тема перенесена из форума "Visual Basic".
...
Рейтинг: 0 / 0
11.06.2017, 22:17
    #39470332
Verbovsky Innokenty
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка N 3211
А зачем связи-то менять?
...
Рейтинг: 0 / 0
11.06.2017, 22:35
    #39470333
Verbovsky Innokenty
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка N 3211
Если уж хочется обнулить счетчик, можно удалить записи и сжать базу данных
...
Рейтинг: 0 / 0
12.06.2017, 17:54
    #39470559
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка N 3211
Verbovsky Innokenty,
Verbovsky InnokentyА зачем связи-то менять?
Здесь Вы сами ответили на свой вопрос:
Verbovsky Innokenty... обнулить счетчик ,..
Добавлю к ответу, что меня не совсем устраивает то, что после удаления всех записей запуск сжатия бд приводит к тому, что база перезапускается.
Моя задумка с удалением записей касается не только таблиц, которые будут содержать данные вводимые пользователями, но и таблиц, касающихся тех же юзеров как пользователей. Я хочу сделать возможность некоего обнуления базы, которую разрабатываю.
Соответственно, если в качестве админа я очищу например таблицу с пользователями, то при перезагрузке бд я не смогу в нее войти (не считая конечно открытие с нажатым Shift-ом, если он не был отключен), а сжатие бд выполняет как раз таки ту самую перезагрузку. Поэтому я и делаю обнуление счетчика. А функция со сжатием бд сама по себе у меня включена в самих настройках при закрытии базы по умолчанию.
...
Рейтинг: 0 / 0
12.06.2017, 18:08
    #39470564
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка N 3211
Я не утверждаю, что моя идея супер правильная. Просто мне не хочется из общей формы запускать другую форму, после отработки кода закрывать ее и запускать обратно общую форму. Я хочу сделать так, чтобы это работало сразу из общей формы. Но не пойму как найти способ сделать это правильно, потому что из общей формы меня блокирует что то, что не дает мне этого сделать.
...
Рейтинг: 0 / 0
12.06.2017, 18:59
    #39470583
guest_rusimport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка N 3211
nataxa23,
базу разделить на табличную часть и интерфейсную, заранее заготовить пустую табличную часть с обнуленными счетчиками, на форме на кнопку повесить код, отлинковывающий таблицы базы, копирующий пустую табличную базу на место прежней и снова линкующий таблицы из табличной базы... по-моему , так будет проще и правильней
...
Рейтинг: 0 / 0
12.06.2017, 19:38
    #39470593
Verbovsky Innokenty
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка N 3211
Простите, но у меня создается такое ощущение, что вы взяли на вооружение немного подправленный тезис Мичурина - нечего ждать трудностей от природы, создать их - наша задача. ))
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
12.06.2017, 21:40
    #39470620
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка N 3211
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
12.06.2017, 22:13
    #39470627
Verbovsky Innokenty
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка N 3211
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
13.06.2017, 06:54
    #39470669
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка N 3211
Если уж так хочется обнулить счетчик, удалите все строки, вставьте новую строку INSERT-ом с нулем в поле с автонумерацией - база позволяет вставлять туда любые значения командами SQL и через рекордсет. После того, как вы удалите эту строку, следующее значение, которое автоматически сгенерирует база, будет на единицу больше последнего вставленного значения до следующего сжатия-восстановления, которое сбрасывает счетчик на максимальное использованное значение + 1
...
Рейтинг: 0 / 0
13.06.2017, 07:25
    #39470673
Verbovsky Innokenty
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка N 3211
MrShin, я должен был первым вспомнить про это очень сильное колдунство. Но не вспомнил (
...
Рейтинг: 0 / 0
13.06.2017, 12:12
    #39470855
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка N 3211
MrShinЕсли уж так хочется обнулить счетчик, удалите все строки, вставьте новую строку INSERT-ом с нулем в поле с автонумерацией - база позволяет вставлять туда любые значения командами SQL и через рекордсет. После того, как вы удалите эту строку, следующее значение, которое автоматически сгенерирует база, будет на единицу больше последнего вставленного значения до следующего сжатия-восстановления, которое сбрасывает счетчик на максимальное использованное значение + 1
Правильно ли я понимаю "шаманство"? Чтобы не мучиться с обнулением счетчика нужно:
1) удалить все имеющиеся записи.
2) затем вставить запросом пустую строку с нулевым значением для счетчика.
3) потом ее же удалить запросом.
...
Рейтинг: 0 / 0
13.06.2017, 13:34
    #39470930
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка N 3211
nataxa23,

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

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

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


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