powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Нарушена структура БД, необходимо восстановить без потери данных (хелп, это срочно)
6 сообщений из 6, страница 1 из 1
Нарушена структура БД, необходимо восстановить без потери данных (хелп, это срочно)
    #34699517
Novenkaya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Сразу прошу не кидаться... ничем не кидаться - да, я знаю, что тупанула. FoxPro вообще второй раз в жизни использовала.

Была нарушена структура БД.
Существует БД, используемая программой. Я открывала файлы таблиц с помощью FoxPro. При этом при попытке открытия некоторых таблиц выдавалось сообщение о невозможности открытия файла из-за его связи с БД. В сообщениии три кнопочки: locate, delete, cansel. При щелчке на первой таблицу так и не удавалось открыть. Поскольку надо было обязательно получить данные, выбирала delete. Подозреваю, что при этом удалялась связь с таблицей. В общем, теперь при работе программы возникают ошибки вида "Такая-то таблица не принадлежит базе такой-то".

В этой базе хранятся результаты двухнедельной работы целого отдела. Доступной резервной копии нет.
Есть аналогичная база, т.е. структура сохранена. Необходимо срочно восстановить работоспособность базы.

Я так понимаю, здесь либо надо включить таблицы в базу, либо были удалены связи и их придется восстанавливать - для этого надо будет смотреть структуру базы-копии. Как это можно сделать?
Помогите, пожалуйста!
...
Рейтинг: 0 / 0
Нарушена структура БД, необходимо восстановить без потери данных (хелп, это срочно)
    #34699526
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NovenkayaЯ так понимаю, здесь либо надо включить таблицы в базу, либо были удалены связи и их придется восстанавливать - для этого надо будет смотреть структуру базы-копии. Как это можно сделать?
1. Пригласить из Вашей местности программиста FoxPro
2. Послать по электронной почте в заархивированном виде эти две базы.
3. Назначить вознаграждение для того, кто за это дело возьмется...

Good luck!
...
Рейтинг: 0 / 0
Нарушена структура БД, необходимо восстановить без потери данных (хелп, это срочно)
    #34699543
Novenkaya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это жестоко. Издеваться так...
Из моей местности все специалисты посылают. Мне надо самой с этим разбираться и исправлять. Хотя бы подскажите, как можно включить таблицы в БД, или как править структуру в Фоксе. Сцылкой хоть в меня киньте, что ли...
...
Рейтинг: 0 / 0
Нарушена структура БД, необходимо восстановить без потери данных (хелп, это срочно)
    #34699629
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OPEN DATABASE... ту, которая "аналогичная".
Потом APPEND FROM одноименных таблиц...
Только пусть останется еще одна копия и не забыть ZAP перед APPEND...
...
Рейтинг: 0 / 0
Нарушена структура БД, необходимо восстановить без потери данных (хелп, это срочно)
    #34699748
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе, ничего особо страшного не произошло в том смысле, что данные не потеряны. Просто нарушена взаимосвязь данных. А вот как это лечить, зависит от того, как именно исключенная таблица была связана с остальными данными.

1) ОБЯЗАТЕЛЬНО перед какими-либо попытками что-то где-то восстановить необходимо сделать резервную копию того, что собираешся восстанавливать. Просто чтобы не испортить все окончательно.

2) В простейшем случае все можно восстановить такими командами

Код: plaintext
1.
2.
OPEN DATABASE MyBase.dbc	&& открыть поврежденную базу данных
ADD TABLE ?		&& добавить в нее таблицу через открывшийся диалог выбора таблицы

Проблема в том, что такое добавление таблицу-то добавит, но не добавит много чего еще, что, теоретически, могло бы быть связано с этой таблицей. Если этого "много чего" не было, то этого хватит. А если было, то дальше ALTER TABLE или прямая правка в дизайнере таблиц.

-) Длинные имена полей: у свободной таблицы имя поля не может превышать 10 символов. При исключении из базы данных имена полей больше 10 символов автоматически "обрезаются". Точнее, теряют длинную расшифровку
-) Триггеры, правила, значения по умолчанию - это все внутри контейнера базы данных. У свободной таблицы - нет.
-) Триггеры таблиц, связанных с данной и ссылающихся на данную таблицу.
-) Индекс типа Primary при исключении таблицы из контейнера базы данных автоматически конвертируется в индекс типа Candidat. Хотя, на работоспособность программы это никак не повлияет.
-) Есть еще постоянные связи, но их восстанавливать не обязательно. На работу программы они никак не влияют.

Хотя, есть и "хакерские" трюки по восстановлению привязки таблицы к контейнеру базы данных.

Дело в том, что контейнер базы данных (файл DBC) - это обычная таблица, но с измененным расширением. Т.е. ее можно открыть как обычную таблицу

USE MyBase.dbc

Исключение из нее объекта - это всего-лишь удаление ряда записей. Но поскольку речь идет о таблице DBF, то под термином "удаление" понимается не физическое удаление, а установка метки на удаление. Т.е. все удаленные записи физически остались на месте, просто получили признак удаленной записи. Значит, достаточно просто восстановить все записи помеченные как удаленные командой RECALL.

Однако в самой исключенной таблице также есть ссылка на базу данных. Это просто имя файла контейнера базы данных с относительным путем доступа, записанное в заголовке файла DBF. За образец можно взять любую другую таблицу включенную в контейнер базы данных и посмотреть в каком месте (в каких байтах заголовка) записано имя контейнера. И скопировать это имя в то же самое место исключенной таблицы заменив пустые байты.

Но здесь надо работать как с файлами низкого уровня. Можно в каких-либо файловых менеджерах вроде Norton Commander, Total Commander, FAR и т.п. В блокноте (Notepad) такое делать нельзя!

Правда, даже такие хакерские трюки могут не восстановить кое-каких триггеров, если при проектировании базы данных использовался построитель Referntial Integrity, поскольку исключение таблицы, скорее всего, удалит и триггера в родительских/дочерних таблицах относительно удаленной. Но, в данном случае, под термином "удалит" надо понимать именно физическое удаление. Без какой-либо возможности восстановления.

Впрочем, возможно, при удалении будет создана резервная копия файла DCT - это мемо-поле контейнера базы данных, содержащая "тела" триггеров. Вероятно, это будет файл с тем же именем, но с расширением TBK. Хотя тут я не уверен.

Т.е. после такого "хакерского" восстановления надо бы еще сравнить с образцовой базой триггера связанных таблиц и вообще все хранимые процедуры.
...
Рейтинг: 0 / 0
Нарушена структура БД, необходимо восстановить без потери данных (хелп, это срочно)
    #34700042
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NovenkayaFoxPro вообще второй раз в жизни использовала.

Необходимо срочно восстановить работоспособность базы.
Я Вам подсказал наиболее быстрый и эффективный способ решения проблемы бизенс путем...

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

Надеюсь, что у Вас все получится и обижаться не надо...

Good luck!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Нарушена структура БД, необходимо восстановить без потери данных (хелп, это срочно)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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