Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: помогите устранить ошибочную запись (Access 2003)
 
 автор: dimonicss   (03.02.2008 в 00:32)   личное сообщение
 
 

Создал базу для учета и приема заказлов (такси). В ней есть Таблица Заказы. База пока не разделена на части и присутствует вся в файле *.mdb Работают с ней обычно одновременно 2 диспетчера с разных компов. При этот примерно раз в полмесяца или иногда раз в неделю возникает ситуация, что в базе в Таблице Заказы появляется запись (как правило последняя или предпоследняя), в которой все поля #Ошибка. Дальше работать с базой становится невозможно, поскольку в процессе работы эта Таблица используется, а понять эту запись она не может.
Подскажите, как исключить подобное событие. Как оно происходит я не могу отследить.

  Ответить  
 
 автор: час   (03.02.2008 в 09:15)   личное сообщение
 
 

происходит видимо когда оба оператора одновременно что-то правят.
Делите базу, и на той что будет с таблицами в параметрах ставите запрет на изменение редактируемой записи и всё такое чтобы оператры друг другу не мешали...

  Ответить  
 
 автор: dimonicss   (15.02.2008 в 23:05)   личное сообщение
 
 

Да, так вроде и выходило, что при попытке редактирования одной и той же записи двумя операторами с разных компов сбои начинались.
Базу действительно надо разделять, а то на скорости доступа по сети уже сказывается. Вот только ткните плиз пальцем, где ставится запрет на изменение редактируемой записи. Я чего-то сходу не нашел.

  Ответить  
 
 автор: час   (15.02.2008 в 23:33)   личное сообщение
 
 

Сервис ===параметры====другие====блокировка по умолчанию=======изменяемой записи.

  Ответить  
 
 автор: dimonicss   (16.02.2008 в 11:53)   личное сообщение
 
 

Вопрос заодно по этой теме. А эта блокировка изменяемой записи будет осуществляться есть база не разделена, ну то есть 2 или более человек работает с одним *.mdb файлом? Вроде как должно блокироваться

  Ответить  
 
 автор: час   (16.02.2008 в 13:06)   личное сообщение
 
 

ТАм где таблицы -=- там и делаем настройку.
Можно во всех базах такую настройку - тода одёновременно одну и ту жа запись двое пользователей править не смогут
Но есть нюанс :
некоторые лоботрясы начинают редактировать, и на полпути идут пить чай, в туалет , или покурить и в этот момент другой пользователь испытывает трудности....

  Ответить  
 
 автор: dimonicss   (16.02.2008 в 19:23)   личное сообщение
 
 

ну это уже их проблемы будут. При попытке доступа к заблокированной записи наверняка сообщение выскакивать будет, вот пусть и смотрят из-за кого блокировка. Пока что рабочие места рядом находятся, так что в этом проблем не вижу

  Ответить  
 
 автор: час   (17.02.2008 в 16:32)   личное сообщение
 
 

  Ответить  
 
 автор: osmor   (18.02.2008 в 09:22)   личное сообщение
 
 

Блокировка на уровне записи в MDB работать не будет, точнее без ухищрений не будет
вот это почитайте
http://sql.ru/forum/actualthread.aspx?bid=4&tid=140535&pg=-1
там же есть ссылка на описание блокировок
Если без ухищрений, то блокировка осуществялется страницами. т.е. блокируется столько записей столько влезает на страницу (под страницей понимается не кол-во строк влезающих на экран, а страницы внутренней структуры БД)
В общих чертах с блокировками так (под "блокируемой записью" далее понимается страница в которую входит редактируемая запись):
"Отсутствует" - запись к не блокируется пока пользователь осуществляет редактирование. При попытке сохранить, происходит блокировка записи и проверка не была ли изменена запись с момента начала редактирования. Если запись изменялась, пользователь получает сообщение об ошибке.
"Изменяемой записи" - Запись (страница) блокируется при начале редактирования, другие пользователи могут только просматривать. ПОсле сохранения блокировка снимается
Если записи в таблице короткие, то один пользователь может заблокировать довольно много записей этой таблицы, иногда всю.
"Всех записей" - ну тут все понятно, блокируется вся таблица.

  Ответить  
 
 автор: dimonicss   (19.02.2008 в 04:12)   личное сообщение
 
 

ссылку предложенную изучу поподробнее. там много написано. спасибо за подсказки.
А пока что разделил все-таки базу. То есть часть с таблицами, и части с формами и запросами для диспетчеров. Ну и в настройках Access на всех компах выставил блокировку редактируемой записи. Посмотрю будет ли глюк повторяться. Пока что (после внесенных изменений) сбойную ситуацию не пробовал повторить. После узучения ссылки от osmor может еще какие изменения в базу внесу. Но пока у меня все файлы в виде *.mdb

  Ответить  
 
 автор: dimonicss   (19.02.2008 в 08:59)   личное сообщение
 
 

Вот похоже из-за Блокировки изменяемой записи какая-то фигня творится. У операторов стали стираться в заказах поля откуда клиента забирать. Или еще из-за чего-то. Толи из-за разделения базы. Пока не разобрался из-за чего. В общем сейчас файлы:

Такси_be.mdb - с таблицами - на первом компе

Такси.mdb - с формами
Security.mdw - с паролями
Такси.LNK - ярлык для открытия - на первом компе

Такси.mdb - с формами
Security.mdw - с паролями
Такси.LNK - ярлык для открытия - на втором компе.

Ну по идее такие же файлы должны быть на третьем и далее компах. Не знаю правильно или нет, но файл с паролями скопировал на все компы и в ярлыке прописал путь к каждому отдельно. Хотя может нужен один файл Security.mdw и разные пути к нему с разных компов.
Пишу это все потому как не пойму откуда глюк пошел. Еще разные изменения вносил в обработки, но сейчас просматриваю и не представляю, чтобы это могло влиять.
Получается такая станная вещь. Диспетчера принимают заказ, текущие заказы висят в табличной форме, в которой данные можно изменять и у них стали пропадать из форм адреса откуда заказ. Сам не видел. Все со слов. Работают именно сейчас одновременно с двух компов.

  Ответить  
 
 автор: dimonicss   (19.02.2008 в 09:12)   личное сообщение
 
 

Блин, ну бабы толком объяснить ничего не могут. Сейчас вроде по телефону разобрался. Для них же ввел изменение, чтобы вначале при приеме заказа вбивали номер телефона и по базе будет пробиваться, не забит ли по этой базе ну типа постоянного адреса. Если забит, то поля откуда забирать заполняются сами. Предусмотрел, чтобы номер телефона первым забивался, а остальные поля обновлялись после апдейта в этом поле. А они гады номер телефона последним били, и соответственно все их поля заменялись на данные из базы телефонных номеров, ну а там почти по всем номерам пустота по адресу пока что.
Я уже и блокировки им сказал как по телефону снять. Сейчас выжду время и наверно снова надо будет ставить блокировку изменяемой записи.

  Ответить  
 
 автор: dimonicss   (19.02.2008 в 10:24)   личное сообщение
 
 

Osmor: прочитал предложенную ссылку. Много там чего написано. Часть понятно, часть не совсем. Но главное написано: действительно при разделении базы на табличную и интерфейсную(с линкованными таблицами) и при доступе к БД из разных экземпляров интерфейсной части, блокировка на уровне записи работает!
Я как раз свою базу только сегодня ночью разделил на табличную и интерфейсные. Сейчас как непонятки были пока в настройках Access сняли Блокировку изменяемой записи. То есть Открытие без блокировки идет.
Главный вопрос такой. Возможно ли возникновение глюков с появлением записи типа Ошибка, которая вызовет невозможность работы с базой, при одновременном редактировании одной записи двумя пользователями или все-таки нужно Блокировку вводить? Если вводить блокировку, то где - в свойствах Формы или в свойствах Access? Есть еще смутная надежда, что после разделения базы глюк появляться не будет, тогда фиг с ним, пусть хоть в десять рук одновременно одну запись редактируют.

  Ответить  
 
 автор: osmor   (19.02.2008 в 10:36)   личное сообщение
 
 

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

  Ответить  
 
 автор: DIMONICSS   (21.02.2008 в 14:54)   личное сообщение
 
 

Опять глюк вылез. уж не видел, чего они там редактировали, но после внесения изменений в существующую запись в Заказы, появилась запись Ошибка и распространилась на все поля этой записи. А далее база виснет. В табличной форме с активными заказами появляется при открытии сообщение Указан недопустимый объект или объект более не задан. и все - конец. Дальше работать невозможно. Дальше только ручками сжатие и восстановление базы, стирание ошибочной записи, восстановление разорванных связей и только после этого работать можно.
Подскажите как избавиться от этого. Что сделать, чтобы предотвратить.

  Ответить  
 
 автор: osmor   (21.02.2008 в 15:14)   личное сообщение
 
 

похоже что сетка не очень. Сейчас какая блокировка стоит?

  Ответить  
 
 автор: dimonicss   (21.02.2008 в 16:54)   личное сообщение
 
 

Сейчас блокировка не стоит. База разделена на Таблицы и Формы

  Ответить  
 
 автор: osmor   (21.02.2008 в 16:58)   личное сообщение
 
 

а если включить блокировку на уровне записи? Сообщения часто вылезают?

  Ответить  
 
 автор: dimonicss   (21.02.2008 в 17:01)   личное сообщение
 
 

Еще не включал. Сейчас вечером поеду, заеду включу.

  Ответить  
 
 автор: Егор   (21.02.2008 в 17:32)   личное сообщение
 
 

А куда конкретно ставить блокировку в разделенной базе, в табличной или в интерфейсной?
Программно это возможно как-то (в ORACLE можно :))?

  Ответить  
 
 автор: час   (22.02.2008 в 22:45)   личное сообщение
 
 

поправить базу можно так :
Делаем резервную копию (на всяк случай - всегда (правило такое есть))
сервис служебные сжать и восстановить таблицы нада, а затем отсортировать от а до я и первой окажется битая строка её удалить (строку).

  Ответить  
 
 автор: dimonicss   (26.02.2008 в 23:56)   личное сообщение
 
 

в общем при устранении битой записи так и делал. Только ключевое поле в Таблице Заказы почему-то делалось не ключевым после сжатия и восстановления и иногда разрывалась пара связей с другой таблицей.
Сейчас пока что все-таки не стал блокировку делать, а разрешил редактирование уже введенных заказов только на одном (главном) компе. А остальным разрешил только просмотр. Тем более по смыслу работы диспетчера сидят принимают заказы, а главный (старший) диспетчер один их распределяет. Правда уже вякать началь что хорошо бы изменение всем разрешить, типа того что ошибки делают и приходится старшей исправлять. Но пока не сдаюсь. Мне пока что проще запретить, чем с их глюками разбираться. (просто нет времени сидеть там и отслеживать сетевые глюки). Надо внимательно заказ принимать.
Ну и заодно купил им бесперебойник для свича. Компы-то с бесперебойниками, а свич - был без. А то возможно что глюки могли возникать при мигании электричества, когда сеть на долю секнды делается нерабочей.

  Ответить  
 
 автор: час   (27.02.2008 в 07:48)   личное сообщение
 
 

Вашу программу без данных.
Таблицы отдельно и интерфейс отдельно - можно посмотреть?

  Ответить  
 
 автор: dimonicss   (27.02.2008 в 18:32)   личное сообщение
 
 

Зачищу от данных, упакую - черкану какой объем получается

  Ответить  
 
 автор: dimonicss   (27.02.2008 в 18:56)   личное сообщение
 
 

Посмотрел получилось где-то на 1Mb после сжатия и очистки, так что высылаю по электронке

  Ответить  
 
 автор: dimonicss   (27.02.2008 в 19:07)   личное сообщение
 
 

По мылу выслал

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList