powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / 4 вопроса о рухнувшей и вновь восстановленной таблице
23 сообщений из 23, страница 1 из 1
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33594035
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леди и джентльмены!
У меня 8 Фокс. В базе данных слетела таблица: ...has become corrupted. The table will need to be repaired before using again и т.п.
Нашла топик, где говорится, что нужно либо запустить некий dbed.exe или сделать
Код: plaintext
1.
2.
SET TABLEVALIDATE TO  0 
USE ....
COPY TO ....
Проги dbed.exe у меня нет. Поэтому открыла в проекте БД, написала в командном окне SET TABLEVALIDATE TO 0, потом сделала use упавшей таблице (она открылась), потом REINDEX, VALIDATE DATABASE и все. COPY TO не стала использовать. Но проект заработал.
Теперь позвольте задать несколько возникших у меня после всего этого вопросов:
1. Где можно скачать dbed.exe и нужно ли его качать?
2. Зачем делать COPY TO, если все и без этого заработало?
3. Отчего заваливается таблица и можно ли этого избежать впредь?
4. В этой таблице у меня около 10 тыс. записей. Могу ли я быть уверена, что в таблице ничего не потеряно после восстановления?

Благодарю.
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33594056
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лисонька1. Где можно скачать dbed.exe и нужно ли его качать?
В интернете, наверное ;)

Например, здесь

http://softsearch.ru/programs/27285.shtml
http://www.freesoft.ru/?id=502&name=multi-dbedit-v2.1-beta-(freeware)
http://www.searchfile.ru/?command=brows&id=16273

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

Лисонька2. Зачем делать COPY TO, если все и без этого заработало?
На самом деле, надо не COPY TO делать, а создать чистую таблицу с нуля и через APPEND FROM закачать в нее данные из поврежденной таблицы.

Хотя, все это - без гарантий. По хорошему, требуется всегда иметь резервную копию базы данных. Т.е. регулярно делать Backup и хранить эти резервные копии хотя бы за неделю.

Лисонька3. Отчего заваливается таблица и можно ли этого избежать впредь?
Сбой питания или разрыв соединения в процессе внесения модификаций в таблицу.

Избежать совсем - невозможно. Но можно существенно снизить вероятность такого события:

1) Убедится, что все железо - безглючное. В особенности сетевая и видео (!) карты.
2) Поставить блоки бесперебойного питания как к компам, так и к хабам.
3) Свести время собственно модификации к возможному минимуму. Т.е. модификации делать в буферезированных таблицах (или в копиях данных), а сохранение изменений делать одним пакетом. Одним блоком команд, который не может быть прерван пользователем (нет диалога с пользователем внутри этого процесса)

Лисонька4. В этой таблице у меня около 10 тыс. записей. Могу ли я быть уверена, что в таблице ничего не потеряно после восстановления?
Нет. Надо просмотреть таблицу глазами. Как правило, повреждения затрагивают последние записи. Т.е. те, которые физически расположены в самом конце таблицы.
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33594248
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лисонька2. Зачем делать COPY TO, если все и без этого заработало?Это нужно делать для того, чтобы появиласьгарантия, что не только байтики с содержимым полей в файле содержат корректную информацию, но и все служебные байтики тоже.
Был у меня раз неприятный сбой (FPD26), когда в таблицу записались chr(0) на всю длину нескольких записей. И несмотря на то, что эти записи были удалены и вместо них была добавлена нормальная информация, индекс был перестроен, пользователей пустил с приложением работать - бац - пользователь добавляет пару записей в починенную таблицу - и индекс опять слетает.
Известно, что на каждую запись существует по крайней мере 1 байт с deleted()-флагом (и может еще чем-то).
Я предполагаю, что в него тоже записался chr(0), а этого в нормальном файле быть не должно. И поскольку индекс строится по ненормальному файлу, он при перестроении слетает.
Как правильно заметил ВладимирМ, лучше все-таки использовать APPEND FROM, а не COPY TO. Я в конце концов так и сделал: взял таблицу из последнего бэкапа, сделал zap, и потом append from дефектная_таблица. Индекс построил заново (хотя мог подложить индекс тоже из бэкапа и сделать reindex, что тоже нормально).
Отсюда вывод: иногда для устранения сбоя недостаточно восстановить данные в упавшем файле dbf, нужно пересоздать этот файл.
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33594255
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ Лисонька4. В этой таблице у меня около 10 тыс. записей. Могу ли я быть уверена, что в таблице ничего не потеряно после восстановления?
Нет. Надо просмотреть таблицу глазами. Как правило, повреждения затрагивают последние записи. Т.е. те, которые физически расположены в самом конце таблицы.Ну, это "как правило" - при добавлении. А если сбой произошел во время update - повреждение может оказаться где угодно. Другое дело, что чем грамотнее спроектирована БД, тем больше в ней insert-ов и меньше update-ов, но это правило опять же не распространяется на все классы приложений. Если это оперативная БД - да. А если это какой-то аналитический "куб", то в нем может быть преобладание update-ов над другими операциями. Впрочем, кубы заполняются не пользователями, и в них сбои происходят очень редко ;-)
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33595005
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не COPY TO делать, а создать чистую таблицу с нуля и через APPEND FROM закачать в нее данные из поврежденной таблицыДа, вот APPEND не вызвал бы у меня лишних вопросов, здесь для меня все логично.
По хорошему, требуется всегда иметь резервную копию базы данных.Есть, и не за неделю, а за каждый день ;-))) Но факт, что таблица одна слетела. Вот, можно сказать, получилась у меня первая разведка боем.
Железо без глюков, бесперебойники.Это дома должно быть железо без глюков. А на работе - что дадут. Но, скорее всего, сетевая. Оказывается, в то же утро на одной из машин потерялся путь к БД Access, начисто потерялся. Пришел умный дядя, провочал что-то про "хреновый хаб", высказался нелицеприятно про девушек-пользователей, переписал на этом компе один mde-файл и все заработало. А после обеда запустили мою прогу, а там главная таблица слетела.
> Чем грамотнее спроектирована БД, тем больше в ней insert-ов и меньше update-ов.Не знаю, насколько грамотно. Выставлен BufferMode 2. Все новые записи добавляются так:
Код: plaintext
1.
2.
3.
4.
IF NOT m.error
	INSERT INTO...
	=TABLEUPDATE( 0 ,.t.,'table1')
     ELSE
ENDIF
Редактирование записей:
Код: plaintext
1.
REPLACE ... WITH ... IN table1
=TABLEUPDATE( 0 ,.t.,'table1')
Т.е. UPDATE table1 SET ... не использую.
Если это какой-то аналитический "куб"...А вот "куб" - это тотальная замена значений полей в БД по определенным условиям или что-то другое?
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33595164
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Лисонька!

> Не знаю, насколько грамотно. Выставлен BufferMode 2

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

> Все новые записи добавляются так:
> IF NOT m.error
> INSERT INTO...
> =TABLEUPDATE(0,.t.,'table1')
> ELSE
> ENDIF

А в чём смысл СРАЗУ сохранять изменения? Обычно буферизацию используют как
раз для того, чтобы отложить момент сохранения - т.е. пользователь чего-то
там правит в курсоре (да хоть целый месяц форму открытой держит) - а уже
потом "всем скопом" сохраняются изменения.

> Редактирование записей:
> REPLACE ... WITH ... IN table1
> =TABLEUPDATE(0,.t.,'table1')
> Т.е. UPDATE table1 SET ... не использую.

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

> А вот "куб"

Это OLAP... Многомерный анализ, системы принятия решений - врядли это твой
случай...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33595232
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что лучше на уровне каждого курсора указать 5-ю буферизацию.Но тогда, пожалуйста, поясните мне выгоду накапливать новые записи в буфере, а потом "пачкой" писать их в таблицу. Чем плохо, что пользователь заполнил форму, а затем нажал либо кнопку ОК (пошла запись), либо Отмена? Или методика такова, что надо строить приложение, которое обязательно работает как INSERT INTO cursor? Это очень важно для меня на будущее - как строить новый проект.
Впрочем и использование REPLACE нетипично - обычно просто правят в соответствующих контролах данные - а уж контролы привязаны к полям курсора.Тоже важно для меня на будущее. Да, я в форме редактирования к контролам привязываю переменные со значениями полей, затем делаю lcVar1=...control1.VALUE; lnVar2=...control2.VALUE; ... , а потом уже REPLACE ... WITH lcVar1 и т.д. В чем выгода работать непосредственно с полями?
И еще. А почему все же курсор, а не сама таблица?
Благодарю.
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33599836
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джентельмены, разъясните, пожалуйста, мне мои последние два вопроса о буферизации и курсоре! А то все как-то промолчали...
Благодарю.
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33599949
valeryka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чем плохо, что пользователь заполнил форму, а затем нажал либо кнопку ОК (пошла запись), либо Отмена?


При таком раскладе, контролы к полям привязывать нет никакого смысла и буферизация здесь нигде не валялась.

В ините формы подвесь значения полей на value контролов и записывай изменения по кнопке
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33599986
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valerykaПри таком раскладе, контролы к полям привязывать нет никакого смысла и буферизация здесь нигде не валялась. В ините формы подвесь значения полей на value контролов и записывай изменения по кнопке Да я, по большому счету, так и делаю. Вопрос-то в том, что более правильно - значения полей или переменные в VALUE?
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33600068
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лисонька Так что лучше на уровне каждого курсора указать 5-ю буферизацию.Но тогда, пожалуйста, поясните мне выгоду накапливать новые записи в буфере, а потом "пачкой" писать их в таблицу. Чем плохо, что пользователь заполнил форму, а затем нажал либо кнопку ОК (пошла запись), либо Отмена? Или методика такова, что надо строить приложение, которое обязательно работает как INSERT INTO cursor? Это очень важно для меня на будущее - как строить новый проект.
Здесь вопрос не в том, "пачкой или по одному" происходит сброс буфера, а в управляемости этого процесса (сброса буфера).

При строковой буферизации, при определенных условиях, попытка сброса буфера может произойти автоматически. Т.е. в неуправляемом программистом режиме. При табличной буферизации такого быть не может. Сброс буфера только и исключительно программно по команде TableUpdate()

Настройка Form.BuferMode означает, что FoxPro сам решит, каким таблицам дать строковую, а каким - табличную буферизацию. Т.е. процесс сброса буфера становиться менее управляемым.

Лисонька Впрочем и использование REPLACE нетипично - обычно просто правят в соответствующих контролах данные - а уж контролы привязаны к полям курсора.Тоже важно для меня на будущее. Да, я в форме редактирования к контролам привязываю переменные со значениями полей, затем делаю lcVar1=...control1.VALUE; lnVar2=...control2.VALUE; ... , а потом уже REPLACE ... WITH lcVar1 и т.д. В чем выгода работать непосредственно с полями?
Просто удобнее. Нет лишних "телодвижений". При работе через переменные необходимо:

-) Объявить область видимости таких переменных как PUBLIC (что уже не есть хорошо)
-) Инициализировать эти переменные (записать в них данные из записи таблицы)
-) По окончании редактирования записать их значения в поля таблицы
-) Дать команду TableUpdate()

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

ЛисонькаА почему все же курсор, а не сама таблица?
В данном случае подразумевалось одно и то же. Здесь путаница с терминами.
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33600298
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лисонька valerykaПри таком раскладе, контролы к полям привязывать нет никакого смысла и буферизация здесь нигде не валялась. В ините формы подвесь значения полей на value контролов и записывай изменения по кнопке Да я, по большому счету, так и делаю. Вопрос-то в том, что более правильно - значения полей или переменные в VALUE?И это правильно, но писать долго ;-)
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33600300
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ-) Объявить область видимости таких переменных как PUBLIC (что уже не есть хорошо)
-) Инициализировать эти переменные (записать в них данные из записи таблицы)
-) По окончании редактирования записать их значения в поля таблицы
-) Дать команду TableUpdate()
При использовании напрямую полей буферезированной таблицы ничего этого вообще не нужно. Только дать команду TableUpdate() при сохранении. Меньше кода, меньше мест для возможных проблем и ошибок.
Здорово! Смекалки не хватило сообразить, что работы здесь будет поменьше, а без TableUpdate() вообще всё в записи останенется Status Quo.
Спасибо всем-всем-всем!!

Елизавета Скрунскайте
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33615473
О_В_Д
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ!
Пардонте вам за странный вопрос.
У меня таблы еще ни разу (тьфу тьфу) не падали. Но если вдруг...
Ответьте. При запуске EXE сразу выдается сообщение ...has become corrupted. The table will need to be repaired before using again... или об это можно узнать, тока когда юзер вызвал форму с DE, в которой и используется сламанная таблица?
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33615544
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О_В_ДНарод!
Пардонте вам за странный вопрос.
У меня таблы еще ни разу (тьфу тьфу) не падали. Но если вдруг...
Ответьте. При запуске EXE сразу выдается сообщение ...has become corrupted. The table will need to be repaired before using again... или об это можно узнать, тока когда юзер вызвал форму с DE, в которой и используется сламанная таблица?
Зависит от того, что именно было повреждено. Можешь и вообще никаких сообщений не получить, просто прога будет криво работать.

Как правило, сообщение об ошибке появляется при попытке открыть таблицу. Если не было открытия до вызова формы (не обязательно явного, например, Select-SQL автоматом откроет таблицу), то будет сообщение только при открытии формы.
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33615608
О_В_Д
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМКак правило, сообщение об ошибке появляется при попытке открыть таблицу. Если не было открытия до вызова формы (не обязательно явного, например, Select-SQL автоматом откроет таблицу), то будет сообщение только при открытии формы.
Во как!
Как же быть? Может форму эту юзер ишшо месяц не запустит, а потом бац! вторая смена. Тут ведь и резерная копия может уже не помочь (есть такая вероятность, да?). Можа писать код, кторый при запуске основной формы будет по очреди USE / USE на кажную табблу делать. Или то не выход, а есь дургая метода для обнаружения ошибки сразу?
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33615786
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О_В_ДВо как!
Как же быть? Может форму эту юзер ишшо месяц не запустит, а потом бац! вторая смена. Тут ведь и резерная копия может уже не помочь (есть такая вероятность, да?). Можа писать код, кторый при запуске основной формы будет по очреди USE / USE на кажную табблу делать. Или то не выход, а есь дургая метода для обнаружения ошибки сразу?
Ну, вообще-то, есть вероятность, что произойдет ядерная война? Начинаем срочно копать личный бункер?

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

Так вот, 100% решения проблемы не существует. Как уже было сказано, все зависит от того, какое именно повреждение произошло.

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

Если формой не пользовались несколько месяцев, то пол-дня как-нибудь переживут. Резервная копия, конечно, тоже не поможет. В ней уже поврежденная таблица. Надо будет править ручками.

Как правило, делают отдельную процедуру проверки как собственно структуры таблиц, так и целостности базы данных вообще. Эту процедуру запускает администратор базы данных либо регулярно (раз в неделю, раз в месяц и т.п.), либо когда есть подозрение на повреждение данных.

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

В общем, не стоит паниковать. У Вас ведь не было пока сбоев? Какие основания есть предполагать, что с завтрашнего дня сбои начнуться каждый день?
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33616102
О_В_Д
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Владимир!
Бункер можно и не копать. Но с другой строны гром не грянет - мужик не перекреститься. И еще знать бы где упасть - соломку постеил бы.
Теблиц с полтора десятка, все 5 юзеров в одном кабинете. Один раз в день можно и побеспокоить. Зато голова будет меньше болеть
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33618777
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi О_В_Д!

Нет никаких абсолютно надёжных способов проверить "целостность таблицы" -
уже хотя бы по той причине, что под этим понимаются совершенно разные вещи!
Вот сегодня смотрел совершенно "целую" с формальной точки зрения таблицу -
т.е. и структура корректна, и в полях (там только символьные были)
"неправильных" символов не было - но таблица была разрушена - вместо
реальных данных там были размещены куски текстового файла (причём фоксовой
программы :)) Т.е. видимо либо ОС, либо диск "пошутили" и на место
сектора/кластера с данными таблицы записали совсем левый сектор с prg-кой...
Поскольку формальные требования к структуре не нарушены, я просто не
представляю каким образом можно автоматизировано проверить
"целостность" таблицы :)

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33621842
О_В_Д
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Korolyov
Hi О_В_Д!
Нет никаких абсолютно надёжных способов проверить "целостность таблицы" -
уже хотя бы по той причине, что под этим понимаются совершенно разные вещи!
Вот сегодня смотрел совершенно "целую" с формальной точки зрения таблицу -
т.е. и структура корректна, и в полях (там только символьные были)
"неправильных" символов не было - но таблица была разрушена - вместо
реальных данных там были размещены куски текстового файла (причём фоксовой
программы :)) Т.е. видимо либо ОС, либо диск "пошутили" и на место
сектора/кластера с данными таблицы записали совсем левый сектор с prg-кой...
Поскольку формальные требования к структуре не нарушены, я просто не
представляю каким образом можно автоматизировано проверить
"целостность" таблицы :)
Hi и вам, Igor! ;-))
Ну не будем уж так утрировать мой вопрос, намекать, как глубоко уважаемый мною Гуру форума, на вероятность ядерной войны. Я же всетаки говорил про сообщение ...has become corrupted. The table will need to be repaired before using again, а уж че там в полях понаписано на данный момент конешно надо глазками смотреть.
Вывод вобщем-то неутешителен: от сумы да тюрьмы не зарекайся - сёдня усё нормально, завтрева тожа, и намедни было хорошо, а через месячишко вдруг обнаруживаешь, что табле или всей БД ёк, а номальный откат сделаешь тока из копии полугодовой давности.
Эх, жизня малина!.. Тудыть ее в качель...
Да, стабильности в мире нет (((
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33622073
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поэтому бекапы надо делать чаще ;-)
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33622394
Andrey Ts
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Внесу и я свою лепту...

Делал я одну базу (VFP5) несколько лет назад - компы древние, сеть хреновая, диски на FAT32.
Проблем с индексами и мемо было немало. Сделал два вывода:
1. если файл-сервер для DBF - то только на NTFS (проблемы сошли почти на нет).
2. даже когда бало все на FAT32, я пошел на хитрость - после очередного SELECT FROM table1 или UPDATE я принудительно закрывал все открывшиеся таблицы USE IN table1.
При этом, даже если комп виснет или сеть валится, эти файлы оставались целы.

Вы будете смеяться, но тормозов проги (на открытие файлов каждый раз) это не вызывало (видимо, за счет кэшей), а прога - на ней крутилась круглосуточная диспетчерская служба, нагрузка днем немаленькая...
...
Рейтинг: 0 / 0
4 вопроса о рухнувшей и вновь восстановленной таблице
    #33625527
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi О_В_Д!

Дело в том, что ДАННАЯ конкретная ошибка - лишь одна из множества возможных
при повреждеиях таблицы - причём неверное это самая безобидная ошибка :) Ибо
более серьёзные ошибки включают и пресловутую C005 - её отловить из фокса
практически нереально...
Что касается проверки соответствия счётчика записей и длинны файла - то это
несложная проверка - буквально 10 строк кода - причём "исправляется" она
так-же просто... Если пойти чуть дальше - то можно держать где-то эталоны
всех заголовков dbf и сверять их с реальными файлами (за исключением тех
байт, которые ДОЛЖНЫ меняться) - структура заголовка dbf хорошо описана в
хелпе.
Ещё из "несложных" проверок - размеры cdx (должен быть кратен 512 байтам и
не равен 0 конечно), размеры fpt - тоже не нулевой (и даже не менее 512
байт) и соответствующий по кратности размеру BLOCKSIZE (который можно
выяснить из заголовка fpt)...
Остальные проверки уже будут заметно более сложными и длительными.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / 4 вопроса о рухнувшей и вновь восстановленной таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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