Access - пропала запись, как воссатвновить?

  • Тут может быть ваша реклама

Demones

Турист
12 Авг 2004
86
0
13
49
Credits
0
Имеется база учета вызовов на "Скорой помощи". Бумажные наряды заносят в Access. Каждому вызову соответствует свой уникальный номер. Иногда вырубают свет, комп глючит и т. д. и некоторые записи пропадают, а СЧЕТЧИК ПЕРЕСКАКИВАЕТ НА 1(единицу), то есть считает, что данные занесены. Получается, что тот номер, который пропал из базы, соответствует бумажному наряду, то есть один наряд оказывается незанесенным в базу. Каким образом восстановить этот номер, эту запись. ТО, что это можно сделать - абсолютно точно., но я не знаю как?
 

Ognev

ex-Team DUMPz
20 Авг 2004
2.102
82
118
25
В караганде
Credits
0
Не очень ясно, как связано поведение счетчика с занесением данных. Счетчики обычно используются для присвоению записи некоторого уникального номера и его задача состоит лишь в том, чтобы не было повторяющихся значений ключа, при этом, он может скакать хоть через сто, если это для чего-то нужно. Так что перескок счетчика ни на что не должен влиять.
 

Demones

Турист
12 Авг 2004
86
0
13
49
Credits
0
Счетчик перескочил - строка в таблице с данными исчезла. Там нумерация БУМАЖНЫХ нарядов совпадает со значениями СЧЕТЧИКА. Следовательно, перескочил счетчик, пропала строка в базе (как раз в той таблице, где хранятся данные этих нарядов) и один БУМАЖНЫЙ наряд остался незанесенным (лежит на столе и ждет своей участи:(). А заносить его надо - для полноты отчетночти. Может я что-то не так формулирую - поправьте, плз.
Ну а на пальуах могу так сказать: в Exel, к примеру, в таблиуе мона строку добавить, а в этой таблице, где счетчик перескочил - неполучаетя. Что надо сделать, чтобы добавить строку именно с номером наряда?
Народ говорит, что когда восстанавливали строки. они восстанавливались даже с частью информации, которую успели внести в форму до сбоя.
 

Ognev

ex-Team DUMPz
20 Авг 2004
2.102
82
118
25
В караганде
Credits
0
Счетчик перескочил - строка в таблице с данными исчезла.
Я сам с Access не работал, но это тянет на какую-то мистику (если "исчез" означает физическое исчезновение данных из базы). Знаю только, что в dbf-ных базах удаление происходит не физически, а данные лишь помечаются как удаленные. А вообще, судя по всему проблема в том, что нумерация бумажных нарядов идет сквозная, а соответствующее ему поле берется из счетчика, который не обеспечивает нумерацию без пропусков. Если это так, то я бы сделал следующее - брал бы этот идентификатор не из счетчика, а получал его запросом
Select Max(Id) + 1 from My_table
Тогда будет обеспечена нумерация без пропусков. Замечу, что в реляционных базах счетчики вообще идут вне транзакций, то есть впринципе не могут обеспечить нумерацию без пропуска.
 

a.n.onim

Турист
26 Окт 2004
98
6
13
Credits
0
Есть в Access такая проблема. Можно при возниконовлении такой ситуации попробовать выполнаить сжатие и восстановление базы данных. Сервис->Служебные программы->Сжатие и восстановление базы данных. Но есть один подводный камень: после последнего верного значения счетчика записей быть не должно, т. е. 00065, затем 00067, надо временно переместить записи от 00067 и дальше, выполнить сжатие и восстановление, затем вернуть записи обратно. Нумерация будет 00065, 00066, ...
 

grundic

Турист
3 Окт 2004
209
1
53
41
Москва
Credits
0
Я бы посоветовал поставить ИБП - при том, что свет часто выключают. Это - раз.
А во-вторых сделать номер вызова не ID (не первичный ключ) а просто ввести еще одно поле - номер вызова и вручную туда вводить номер.
Ведь, например, если удалить запись, то счетчик продолжит "отсчитывать" не обращая внимания на отсутсвтвующую запись. Т.е. будет 1,2,3, 5, 6... Так что, как мне кажется, номер вызова в данном случае нужно ставить вручную.
 

Demones

Турист
12 Авг 2004
86
0
13
49
Credits
0
a.n.onim написал(а):
надо временно переместить записи от 00067 и дальше, выполнить сжатие и восстановление, затем вернуть записи обратно.

Как это сделать реально?
Записи удалил, базу сжал-восстановил, но счетчик не принял значение последней строки, а оставил прежнее значение.
 

a.n.onim

Турист
26 Окт 2004
98
6
13
Credits
0
Все, оказывается, гораздо сложнее. Но процесс можно автоматизировать.
Шаг 1. Создаем таблицу (назовем ее таблица В), структура которой повторяет структуру исходной таблицы со счетчиком (таблица А).
Шаг 2. Копируем записи из таблицы А в таблицу В.
Шаг 3. Удаляем записи таблицы А.
Шаг 4. Выполняем Сжатие и восстановление.
Шаг 5. Выполняем копирование записей из таблицы В в таблицу А (КРОМЕ ПОЛЯ-СЧЕТЧИКА !)

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

Ognev

ex-Team DUMPz
20 Авг 2004
2.102
82
118
25
В караганде
Credits
0
Demones,
пожалуйста четко напиши в чем твоя проблема! В том, что у тебя пропали данные в результате сбоя или что-то другое? И мое мнение, что если пропали, то проще ввести их по новой (если с этим есть проблемы, пиши, какие именно), и, теперь то уж, делать переодическое резервное копирование.