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

Demones

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

Ognev

ex-Team DUMPz
Joined
Aug 20, 2018
Messages
2,104
Reaction score
902
Age
25
Не очень ясно, как связано поведение счетчика с занесением данных. Счетчики обычно используются для присвоению записи некоторого уникального номера и его задача состоит лишь в том, чтобы не было повторяющихся значений ключа, при этом, он может скакать хоть через сто, если это для чего-то нужно. Так что перескок счетчика ни на что не должен влиять.
 

Demones

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

Ognev

ex-Team DUMPz
Joined
Aug 20, 2018
Messages
2,104
Reaction score
902
Age
25
Счетчик перескочил - строка в таблице с данными исчезла.
Я сам с Access не работал, но это тянет на какую-то мистику (если "исчез" означает физическое исчезновение данных из базы). Знаю только, что в dbf-ных базах удаление происходит не физически, а данные лишь помечаются как удаленные. А вообще, судя по всему проблема в том, что нумерация бумажных нарядов идет сквозная, а соответствующее ему поле берется из счетчика, который не обеспечивает нумерацию без пропусков. Если это так, то я бы сделал следующее - брал бы этот идентификатор не из счетчика, а получал его запросом
Select Max(Id) + 1 from My_table
Тогда будет обеспечена нумерация без пропусков. Замечу, что в реляционных базах счетчики вообще идут вне транзакций, то есть впринципе не могут обеспечить нумерацию без пропуска.
 

a.n.onim

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

grundic

Platinum
Joined
Oct 3, 2020
Messages
211
Reaction score
83
Age
40
Я бы посоветовал поставить ИБП - при том, что свет часто выключают. Это - раз.
А во-вторых сделать номер вызова не ID (не первичный ключ) а просто ввести еще одно поле - номер вызова и вручную туда вводить номер.
Ведь, например, если удалить запись, то счетчик продолжит "отсчитывать" не обращая внимания на отсутсвтвующую запись. Т.е. будет 1,2,3, 5, 6... Так что, как мне кажется, номер вызова в данном случае нужно ставить вручную.
 

Demones

Member
Joined
Aug 12, 2004
Messages
86
Reaction score
1
Age
49
a.n.onim said:
надо временно переместить записи от 00067 и дальше, выполнить сжатие и восстановление, затем вернуть записи обратно.

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

a.n.onim

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

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

Ognev

ex-Team DUMPz
Joined
Aug 20, 2018
Messages
2,104
Reaction score
902
Age
25
Demones,
пожалуйста четко напиши в чем твоя проблема! В том, что у тебя пропали данные в результате сбоя или что-то другое? И мое мнение, что если пропали, то проще ввести их по новой (если с этим есть проблемы, пиши, какие именно), и, теперь то уж, делать переодическое резервное копирование.
 
Top