Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 .DBC internal consistency error  [new]
men dea
Member

Откуда:
Сообщений: 143
VFP9 + XP

Собрал до кучи в БД несколько фалов, организовал связи. Выставил везде RESTRICT.
После Edit RI отвечаю "ДА" на вопрос о формировании триггеров и пр.ерунды с ними связанной. Все - ОК.
Теперь пытаюсь сделать LW с родительского файла. Ничего постороннего. Только поля этого справочника. RUN Query нормально срабатывает. BROWSE высвечивается. Ничего не ввожу. Не изменяю.
Захожу снова в Edit RI. Жму ОК. И тут появляется заголовок этой темы:

.DBC internal consistency error.
Все - висим....

Чего это он пришел? Я его не звала... :(
16 дек 05, 15:40    [2179794]     Ответить | Цитировать Сообщить модератору
 Re: .DBC internal consistency error  [new]
men dea
Member

Откуда:
Сообщений: 143
Еще интересное наблюдение. Дал приятелю на VFP8 пока еще девственный DBC. Он "наваял" там тот же самый LV, успешно повторно сделал Edit RI с записью по "ДА" и вернул мне.
Пробую. Все нормально запустилось, работает. Даже корректировать LV можно было. Доп. поля вводить. Edit RI после него проходило успешно.
Но как только попытался снять копию с этого LV через "SAVE AS", а затем Edit RI с записью, заиграла траурная музыка: .DBC internal consistency error и "висяк"...
Это у меня поганая версия 9-ки или вообще ее особенность?
16 дек 05, 16:30    [2180185]     Ответить | Цитировать Сообщить модератору
 Re: .DBC internal consistency error  [new]
PaulWist
Member

Откуда:
Сообщений: 2236
посмотри здесь, похоже.

https://www.sql.ru/forum/actualthread.aspx?tid=242155
16 дек 05, 17:22    [2180494]     Ответить | Цитировать Сообщить модератору
 Re: .DBC internal consistency error  [new]
men dea
Member

Откуда:
Сообщений: 143
Мне кажется, что не совсем то. Ведь после этой ошибки я ничего уже не могу с БД сделать, а у Sgek проблема со вводом новой записи. У меня сначала все капитально виснет и приходится снимать Фокс с выполнения. А при повторном входе пишет, что сбился индекс. Поэтому я ее просто восстанавливаю из архива, ибо прочитав на сайте рекомендации по исправлению БД, нич-ч-его не понял. :(
Да, собственно у меня данные есть только в справочниках. Да и то корректные. И VALIDATE DATABASE не ругается.
16 дек 05, 20:12    [2181149]     Ответить | Цитировать Сообщить модератору
 Re: .DBC internal consistency error  [new]
men dea
Member

Откуда:
Сообщений: 143
Ниже, в архивчике есть БД experiment.dbc.
При попытке, например, сделать LV по любому полю из zakaz, затем Edit RI, возникает указанная ошибка.
Попробовал и на VFP8. Тот же компот. Может, какое-нибудь обновление требуется, типа SP1, а у меня его нет?

К сообщению приложен файл (Experiment.rar - 9Kb) cкачать
16 дек 05, 22:27    [2181361]     Ответить | Цитировать Сообщить модератору
 Re: .DBC internal consistency error  [new]
men dea
Member

Откуда:
Сообщений: 143
И вот изображеньице.

К сообщению приложен файл. Размер - 0Kb
16 дек 05, 22:33    [2181373]     Ответить | Цитировать Сообщить модератору
 Re: .DBC internal consistency error  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Никаких резидентных антивирусов не запущено? Может монитор Касперского работает?

Вообще-то, в описании к этой ошибке (1550) рекомендуют кроме команды Validate Database попробовать удалить индекс контейнера базы данных.

Т.е. закрыть базу данных и физически удалить файл dbc_name.DCX. Здесь dbc_name - это имя контейнера базы данных. При последующем открытии базы данных этот индекс будет создан заново.

Ну, и еще меня сильно смущает 2 паралельные связи:

Operator - zakaz
Operator - Client - zakaz

Т.е., по сути, таблицы Operator и zakaz связаны 2 раза. Это потенциально опасная ситауция.
16 дек 05, 23:43    [2181477]     Ответить | Цитировать Сообщить модератору
 Re: .DBC internal consistency error  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi men dea!

Обновление непременно требуется :) Уже вышел SP1 к VFP9 - качай и пробуй.
А вообще если произошёл такой сбой, то надо попробовать (по порядку)
- открыть dbc (монопольно) и выполнить VALIDATE DATABASE RECOVER.
- попробовать открыть вис как таблицу - через USE MyDB.DBC EXCLUSIVE - и
посмотреть что там не так (конечно тут нужен некоторый опыт и желательно
сначала почитать описание структуры dbc - это есть в отчётах в папке
Tools\FileSpec). Найденные ошибки пофиксить (например представления со
"странными" именами - поудалять и их и связанные с ними записи о "полях"
этих представлений). Файл потом PACK-овать.
- удалить dcx файл и открыть dbc в среде (файл должен восстановится).
- удалить dcx файл и попрбовать открыть базу как таблицу - на индекс
ругнётся, но со второго раза должен открыть - далее по схеме описанной выше.
- ну и конечно как крайняя мера - восстанавливать dbc их резервной копии -
правда при этом может возникнуть рассогласование между тем что опсиано в dbc
и тем что есть реально в dbf/cdx - лечить это сложно - VALIDATE DATABASE
RECOVER просто убивает все "подозрительные" элементы - но в принципе руками
(а лучше поискать утилиту для работы с dbc - особенно с её полем Properties,
которое имеет бинарную структуру и "руками" очень сложно корректируется)
можно почти всё поправить...

> Ниже, в архивчике есть БД experiment.dbc.

Ок, скачаем, посмотрим :) Надёюсь там и сама dbf и прочие файлы имеются :)

Posted via ActualForum NNTP Server 1.3

17 дек 05, 04:07    [2181750]     Ответить | Цитировать Сообщить модератору
 Re: .DBC internal consistency error  [new]
men dea
Member

Откуда:
Сообщений: 143
Обновление скачаю, иного пути пока не видно. Ибо:

0. убрал одну связь, чтобы не было параллельности
1. Антивирусники отключил
2. открывал dbc (монопольно) и выполнял VALIDATE DATABASE RECOVER.
3. попробовал открыть вис как таблицу - через USE MyDB.DBC EXCLUSIVE - и
посмотреть что там не так (конечно тут нужен некоторый опыт...)
Интересно, но опыта нет. Буду набираться. :)
4. - удалял dcx файл и открывал dbc в среде (файл восстановился).

Результат тот же...

5. - крайняя мера - восстанавливать dbc их резервной копии -
только это и помогает.

Прилагаю еще аррхивчик. Почти с той же бедой... :(

Но зато обнаружил, что все-таки можно сделать LV через отверстие в филейной части...
В архиве есть View1(работающий) и View3 (с ошибкой/в дизайнере на картинке видно поле name, а внутри файла-то нет.) LV3 не работает в режиме Browse, но модифицируется. Почему-то файл-источник выкидывается с первого захода. Повторно приходится его туда запихнуть.

К сообщению приложен файл (Experiment без параллельной связи.rar - 8Kb) cкачать
17 дек 05, 07:45    [2181778]     Ответить | Цитировать Сообщить модератору
 Re: .DBC internal consistency error  [new]
men dea
Member

Откуда:
Сообщений: 143
Сорри. Небольшое уточнение. Файл выкидывается не сразу, а после того, как создано было View3, запущено Edit RI. Выскакивает ошибка. На View3 вместо поля стоят вопросы. А когда все таки открываем, то поле на картинке есть, а файла нет. Вот так.
17 дек 05, 07:49    [2181780]     Ответить | Цитировать Сообщить модератору
 Re: .DBC internal consistency error  [new]
men dea
Member

Откуда:
Сообщений: 143
Итак, все упрощаю донельзя. Все ниже делается в дизайнере (!).

1. Создаем простейшую БД с двумя таблицами:
PARENT c единственным полем idPARENT (INTEGER, по нему же PRIMARY-ключ) и
CHILD с парой полей: idCHILD и PARENT (оба INTEGER, по первому PRIMARY по второму REGULAR –индекс)
Обе таблицы пустые, без записей.

2. Связываем их: parent-idPARENT - child-PARENT. Менять в Edit Referential Integrity ничего не нужно.
3. Создаем любую Local View все в том же дизайнере. Например, по полям таблицы CHILD. Убеждаемся, что все работает: BROWSE честно появился.
См. картинку 1.
4. А теперь заходим в Edit RI и нажимаем "Да". Бежит "термометр" и видим картинку 2.
Висяк... :(

Вся выше написанное сводится к простому вопросу: "А как у вас? Так же? Или я что-то не то делаю?

PS Пробовал на разных PC и в 8 и 9 версиях.

К сообщению приложен файл. Размер - 0Kb
17 дек 05, 20:24    [2182555]     Ответить | Цитировать Сообщить модератору
 Re: .DBC internal consistency error  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Да. Эффект тот же.

Но лечиться это достаточно просто. ПЕРЕД попыткой создания RI надо переоткрыть созданный контейнер базы данных. Т.е. закрыть его и снова открыть.

Видимо, просто не успели внесенные модификации реально попасть на диск. "Застряли" где-то на пол-пути. Переоткрытие файла принудительно заставляет завершиться этот процесс.
18 дек 05, 21:02    [2183555]     Ответить | Цитировать Сообщить модератору
 Re: .DBC internal consistency error  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi men dea!

Просиходит это лишь при эксклюзивно открытой базе (ну это это ясно - иначе
RIBuilder не работает), и действительно после создания любого View (а
возможно что и после создания просто таблицы, или внесения изменений
определённого рода в имеющуюся таблицу). После этого в dbc появляются
удалённые записи и она нуждается в упаковке (посмотреть на этот "мусор"
можно если дать команду USE MyDBC.dbc AGAIN IN 0 + browse - конечно если
установлено SET DELETED OFF).
Лечится это паковкой базы данных (PACK DATABASE из командного окна или из
меню Cleanup Database).
Причём в версии RI построителя шедшей с VFP7 (и по видимому до того тоже)
стояла специальная проверка, и сам построитель "ругался" насчёт того что
"сначала упакуй базу, потом уж балуйся". Начиная с VFP8 подобную проверку из
построителя исключили - и как видим совершенно напрасно... В принципе они
могли бы и собственно PACK DATABASE в RIBuilder включить - он же по любому
требует эксклюзивного открытия базы...
Судя по всему идёт конфликт между тем что "видит" внутри себя фокс (он же
открывает dbc в своей system data session), и тем что делает RIBuilder - он
как раз открывает dbc как таблицу и вносит в неё изменения!
Я так полагаю, что MSFT решила что проблема "несогласованного" изменения dbc
открытой в системной сессии и в обычной пользовательской сессии решена - и
потому проверку убрали - а проблема то осталась... Так что пожалуй стоит
вернуть этот "костыль" на место в RIBuilder...

P.S. Ситуация в VFP9SP1 не исправлена. Хотя конечно скачать его всё равно
придётся :)

Posted via ActualForum NNTP Server 1.3

19 дек 05, 00:37    [2184006]     Ответить | Цитировать Сообщить модератору
 Re: .DBC internal consistency error  [new]
men dea
Member

Откуда:
Сообщений: 143
Как выяснилось, закрытием БД дело не обойдется: все равно зависнем. Хотя Владимир М. задал правильное направление.
Следуя его совету и немного покопавшись, я обнаружил, что сделав закрытие БД, нам еще придется заглянуть снова в LV, вернуть обратно вывалившуюся таблицу-источник. Да к тому же не забыть "замочить в сортире" хромой индексный файл БД (он сам потом восстановится). Иначе опять те же "мухи и котлеты". :)

Рекомендации И.Королева еще не успел рассмотрел. Только что увидел сообщение. Может, еще более легкий путь. Надеюсь. :)
19 дек 05, 02:46    [2184070]     Ответить | Цитировать Сообщить модератору
 Re: .DBC internal consistency error  [new]
men dea
Member

Откуда:
Сообщений: 143
Ну, вот. Похоже все и разрешилось. Последовательность действий после создания LV:

1. Close Database
2. Open Database MyDb.dbc
3. Pack Database
4. Modify Database MyDb.dbc

Несколько неудобно, но другие попытки упрощения вели к краху. Например,

1. Close Database
2. Modify Database MyDb.dbc
3. Pack Database (м.б. 4. Validate Database)

или

1. Close Tables
2. Set View Off
3. Pack Data
4. Validate Database

Спасибо всем за внимание.
19 дек 05, 03:56    [2184081]     Ответить | Цитировать Сообщить модератору
 Re: .DBC internal consistency error  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi men dea!

Просто если ты пользуешься не пунктом меню Clean up database а командой
PACK DATABASE, то надо закрыть окно Database designer.
Т.е. либо так:
- создали представление
- закрыли окно DB designer, если оно было открыто
- CLOSE TABLES
- PACK DATABASE
- MODIFY DATABASE (снова открыли окно дизайнера)
- идём строить RI

либо так:
- создали представление
- CLOSE TABLES (можно и просто руками в окне Data Session закрыть те
таблицы, которые автоматом открыл View Designer)
- выбрали "Clean up database" из меню "Database"
- идём строить RI

Видимо сам Database Designer чего-то мудрит, и PACK DATABASE не проходит
если окно дизайнера открыто. Это кстати не позволит встроить PACK DATABASE в
RIBuilder - видимо потому там и не пытались паковать базу, а лишь настойчиво
предупреждали что "надоть Cleanup из меню сделать".

Posted via ActualForum NNTP Server 1.3

19 дек 05, 19:23    [2187336]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить