IK> Чи можна відновити (якщо можна то як) dbf файл?
IK> Fox говоpит що це не база даних.
Код помилки 15, да?
Зазвичай таке відбувається через псування заголовка,
що іноді відбувається при перезавантаженні компа (вручну або збій живлення)
під час активної роботи з базою.
Я до сих пір не спромігся знайти або написати утилітки для роботи з
заголовком, і користуюся такою методикою:
(Повинна бути точно відома структура пошкодженої бази)
1. Створюється база точно такий же структури, як пошкоджена
2. Для неї отримуємо розмір заголовка і записи
3. З пошкодженого файлу вирізається заголовок,
а решта ріжеться на записи (після кожного запису додається
переклад рядка - отримуємо формат SDF)
4. У новостворену порожню базу імпортуємо дані з отриманого SDF
5. Перевіряємо візуально, як виглядають відновлені дані.
Якщо вийшла всяка дурниця (відразу видно на датах і рядках)
- значить, помилилися зі структурою.
Підхід, звичайно незручний (треба зберігати структури таблиць)
і працює повільно, зате допомагає навіть в разі повного раздалбиванія
заголовка, наприклад, в результаті пошкодження секторів (зрозуміло в
останньому випадку треба спочатку нацькувати scandisk або NDD, причому,
зрозуміло, записи, що потрапили на беди, таки пропадуть, але решта -
відновляться).
Ось програма:
badfile - ім'я пошкодженого файлу (разом з розширенням ".dbf")
repb - ім'я тимчасової (створюваної) бази
strfile - ім'я допоміжної таблиці, в якій прописана структура.
CREA (repb) FROM (strfile)
hsize = HEADER () + 1
rsize = RECSIZE ()
tempf = '_ temp.sdf' ім'я тимчасового файлу
file1 = FOPEN (badfile) відкриваємо пошкоджений файл
= FSEEK (file1, hsize) пропускаємо заголовок
file2 = FCREATE (tempf) створюємо тимчасовий файл
DO WHILE! FEOF (file1)
C = FREAD (file1, rsize) читаємо запис з пошкодженого
= FPUTS (file2, C) пишемо її в тимчасовий, додаючи новий рядок
ENDDO
= FCLOSE (file2)
= FCLOSE (file1)
SELE (repb)
APPEND FROM (tempf) TYPE SDF
IK> Дос навігатоp пpосматpівает нормально половину ф-ла
Я з DN справи не мав, нічого сказати не можу.
А dbview.exe в таких випадках зазвичай нормально базу дивиться.
IK> imho якась частина dbf потрапила в bad Сектор