|
Ошибка N 3211
|
|||
---|---|---|---|
#18+
Как правильно в бд акса устранить/обойти ошибку в ситуации при изменении связей таблиц программно? Суть такая, на общей форме выведено несколько других различных форм в том числе и форма, через которую очищаются нужные таблицы от записей с обнулением счетчика. Если же форму с очищением таблиц запускать отдельно, то проблем нет, но если использовать ее из общей формы, то возникает ошибка 3211 - "Таблица не может быть заблокирована ядром базы данных. Она уже используется другим пользователем или процессом.". Даже при закрытии общей формы и после отработки кода переоткрытии ее, так же вылезает данная ошибка. Модератор: Тема перенесена из форума "Visual Basic". ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2017, 20:13 |
|
Ошибка N 3211
|
|||
---|---|---|---|
#18+
А зачем связи-то менять? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2017, 22:17 |
|
Ошибка N 3211
|
|||
---|---|---|---|
#18+
Если уж хочется обнулить счетчик, можно удалить записи и сжать базу данных ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2017, 22:35 |
|
Ошибка N 3211
|
|||
---|---|---|---|
#18+
Verbovsky Innokenty, Verbovsky InnokentyА зачем связи-то менять? Здесь Вы сами ответили на свой вопрос: Verbovsky Innokenty... обнулить счетчик ,.. Добавлю к ответу, что меня не совсем устраивает то, что после удаления всех записей запуск сжатия бд приводит к тому, что база перезапускается. Моя задумка с удалением записей касается не только таблиц, которые будут содержать данные вводимые пользователями, но и таблиц, касающихся тех же юзеров как пользователей. Я хочу сделать возможность некоего обнуления базы, которую разрабатываю. Соответственно, если в качестве админа я очищу например таблицу с пользователями, то при перезагрузке бд я не смогу в нее войти (не считая конечно открытие с нажатым Shift-ом, если он не был отключен), а сжатие бд выполняет как раз таки ту самую перезагрузку. Поэтому я и делаю обнуление счетчика. А функция со сжатием бд сама по себе у меня включена в самих настройках при закрытии базы по умолчанию. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2017, 17:54 |
|
Ошибка N 3211
|
|||
---|---|---|---|
#18+
Я не утверждаю, что моя идея супер правильная. Просто мне не хочется из общей формы запускать другую форму, после отработки кода закрывать ее и запускать обратно общую форму. Я хочу сделать так, чтобы это работало сразу из общей формы. Но не пойму как найти способ сделать это правильно, потому что из общей формы меня блокирует что то, что не дает мне этого сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2017, 18:08 |
|
Ошибка N 3211
|
|||
---|---|---|---|
#18+
nataxa23, базу разделить на табличную часть и интерфейсную, заранее заготовить пустую табличную часть с обнуленными счетчиками, на форме на кнопку повесить код, отлинковывающий таблицы базы, копирующий пустую табличную базу на место прежней и снова линкующий таблицы из табличной базы... по-моему , так будет проще и правильней ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2017, 18:59 |
|
Ошибка N 3211
|
|||
---|---|---|---|
#18+
Простите, но у меня создается такое ощущение, что вы взяли на вооружение немного подправленный тезис Мичурина - нечего ждать трудностей от природы, создать их - наша задача. )) 1. Счетчик - это не нумерация строк, это ключ, который никак не должен касаться пользователя. А исчерпать все длинные целые вам на аксессе вряд ли удастся. Так что повторю вопрос - зачем его обнулять? 2. Если есть возможность запустить нужный процесс из отдельной формы, то зачем нужно возиться с внедренной? Два клика лень сделать? Это ж не пользовательская задача, насколько я понял, а админская. 3. Если выполнение описанной задачи является самоцелью, то замените мешающие внедренные формы на "пустышку", а потом верните все в первоначальное состояние Код: vbnet 1. 2. 3.
ЗЫ критикам: решение под стать задаче ) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2017, 19:38 |
|
Ошибка N 3211
|
|||
---|---|---|---|
#18+
Verbovsky Innokenty, можно по подробнее с п.3. Verbovsky Innokenty3. Если выполнение описанной задачи является самоцелью, то замените мешающие внедренные формы на "пустышку", а потом верните все в первоначальное состояние Код: vbnet 1. 2. 3.
2) и еще вопрос, не знаю как добраться до подчиненной формы на форме из общей формы. Ваш пример кода, как я понимаю подразумевает, что удаление и обнуление должно быть из общей формы. А у меня то все формы вместе с подчиненными расположены на общей форме. Форма, из которой я запускаю на удаление и обнуление тоже выведена на общую форму, но из нее то как обратиться к "подформам", которые являются подчиненными для выведенных форм на общей форме? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2017, 21:40 |
|
Ошибка N 3211
|
|||
---|---|---|---|
#18+
nataxa23можно по подробнее с п.3. Замените подчиненные формы, которые обращаются к редактируемым таблицам, на подчиненные формы, которые к таким таблицам не обращаются. Если таковых нет, создайте пустую форму и заменяйте на нее. После изменения таблиц верните все на место. Не забудьте восстановить и свойства типа подчиненного поля. Сразу говорю, наверняка есть способы поизящнее. Можно попробовать, например, убить рекордсеты этих форм. Но я навскидку не нашел как это сделать nataxa232) и еще вопрос, не знаю как добраться до подчиненной формы на форме из общей формы. Ваш пример кода, как я понимаю подразумевает, что удаление и обнуление должно быть из общей формы. А у меня то все формы вместе с подчиненными расположены на общей форме. Форма, из которой я запускаю на удаление и обнуление тоже выведена на общую форму, но из нее то как обратиться к "подформам", которые являются подчиненными для выведенных форм на общей форме? через родителя Код: vbnet 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2017, 22:13 |
|
Ошибка N 3211
|
|||
---|---|---|---|
#18+
Если уж так хочется обнулить счетчик, удалите все строки, вставьте новую строку INSERT-ом с нулем в поле с автонумерацией - база позволяет вставлять туда любые значения командами SQL и через рекордсет. После того, как вы удалите эту строку, следующее значение, которое автоматически сгенерирует база, будет на единицу больше последнего вставленного значения до следующего сжатия-восстановления, которое сбрасывает счетчик на максимальное использованное значение + 1 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2017, 06:54 |
|
Ошибка N 3211
|
|||
---|---|---|---|
#18+
MrShin, я должен был первым вспомнить про это очень сильное колдунство. Но не вспомнил ( ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2017, 07:25 |
|
Ошибка N 3211
|
|||
---|---|---|---|
#18+
MrShinЕсли уж так хочется обнулить счетчик, удалите все строки, вставьте новую строку INSERT-ом с нулем в поле с автонумерацией - база позволяет вставлять туда любые значения командами SQL и через рекордсет. После того, как вы удалите эту строку, следующее значение, которое автоматически сгенерирует база, будет на единицу больше последнего вставленного значения до следующего сжатия-восстановления, которое сбрасывает счетчик на максимальное использованное значение + 1 Правильно ли я понимаю "шаманство"? Чтобы не мучиться с обнулением счетчика нужно: 1) удалить все имеющиеся записи. 2) затем вставить запросом пустую строку с нулевым значением для счетчика. 3) потом ее же удалить запросом. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2017, 12:12 |
|
Ошибка N 3211
|
|||
---|---|---|---|
#18+
MrShin, Спасибо за наводку, вроде бы работает такой "финт ушами". Правда теперь возникла трудность с одной формой, которая построена на запросе из 2-х таблиц и если запускаю удаление даже сразу для обеих таблиц, то удаляет как то частями. Получается, для этой формы удаление надо делать последовательно - вначале для одной таблицы, потом для второй. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2017, 15:37 |
|
Ошибка N 3211
|
|||
---|---|---|---|
#18+
nataxa23удаляет как то частями Скорее всего включено поддержание целостности для связаных таблиц, извиняюсь, не помню как это правильно называется по русски. Поэтому нужно удалять сначала из той таблицы, кде находится вторичный ключ связи, а потом из той, где первичный. Вообще удаление из рабочих таблиц - нежелательная операция, обычно ненужные записи помечают как удаленные, не удаляя их физически. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2017, 16:38 |
|
Ошибка N 3211
|
|||
---|---|---|---|
#18+
MrShinСкорее всего включено поддержание целостности для связаных таблиц, извиняюсь, не помню как это правильно называется по русски. Поэтому нужно удалять сначала из той таблицы, кде находится вторичный ключ связи, а потом из той, где первичный. да-да-да... все верно, именно по этой самой причине. Честно говоря просто сразу не с ориентировалась на месте, т.к. зациклилась на своей проблеме из поста. Сейчас уже все работает как надо. MrShinВообще удаление из рабочих таблиц - нежелательная операция, обычно ненужные записи помечают как удаленные, не удаляя их физически. Спасибо за добрый совет для меня - для новичка любая инфа интересна и важна. В моей ситуации правда тоже не предполагается постоянное очищение рабочих таблиц, но в ситуации, пока я ее создаю, я одновременно еще и тестирую ее. Поэтому в ходе и возникла такая идея заранее подготовить базу для обнуления так сказать. Еще раз спасибо Вам огромное за помощь в решении вопроса и всем, кто так же откликнулся на мой пост с предложенными вариантами! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2017, 20:13 |
|
|
start [/forum/topic.php?fid=45&msg=39470930&tid=1612344]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 140ms |
0 / 0 |