Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.09;
Скачать: CL | DM;

Вниз

Удаление индексов   Найти похожие ветки 

 
SimKa ©   (2005-08-23 10:17) [0]

Доброго времени суток, Уважаемые мастера ...
Есть вопрос:
При открытии базы данных (.dbf) Delphi ругается на утерянные индексный файл (.cdx).

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

Вообщем простой вопрос, но для студента очень нужно ...


 
sniknik ©   (2005-08-23 10:41) [1]

простой ответ. открой таблицу с подключением к драйверу фокса (VFP), он сам разберется и снимет признак если индексный файл удален.

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

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


 
Rule ©   (2005-08-23 12:35) [2]

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

procedure FixTable(TableName:String);
var
 FromF: File Of Byte;
 b: byte;
begin
 b:=0;
 AssignFile(FromF, TableName);
 Reset(FromF);
 Seek(FromF,29);
 Write(FromF,b);
 Seek(FromF,28);
 Write(FromF,b);
 CloseFile(FromF);
end;


 
sniknik ©   (2005-08-23 12:46) [3]

Rule ©   (23.08.05 12:35) [2]
хакерский путь нехороший путь. можеш запросто испортить файл вообще не относщийся к фоксу, просто имеющий такое расширение, а ты пытаясь открыть решил (по ексепту) что индекса нет... версия не подходит. и т.д. ты же проверяеш тип таблицы до "снятия" признака...
да и мало еще чего, ситуаций где может "глюкануть" много.


 
Anatoly Podgoretsky ©   (2005-08-23 13:09) [4]

sniknik ©   (23.08.05 10:41) [1]
Есть и это штатный путь, надо использовать dbiRegisterCallback
Он же вызывается и в Database Desktop, но его можно сделать и не видиммым, возможности там широкие.


 
max1000   (2005-08-23 13:38) [5]

program Dbf_Strip;
{$APPTYPE CONSOLE}
uses SysUtils;

var f:   file;
   fs:  TSearchRec;
   buf: array [0..31] of byte;

begin
if FindFirst("*.dbf",faAnyFile,fs)<>0 then exit;
repeat AssignFile(f,fs.Name); Reset(f,1); BlockRead(f,buf,32);
 buf[28]:=0; Seek(f,0); BlockWrite(f,buf,32); CloseFile(f)
until FindNext(fs)<>0;
FindClose(fs)
end.


 
sniknik ©   (2005-08-23 14:23) [6]

> max1000   (23.08.05 13:38) [5]
ну вот еще один... этому мало один файл ненароком испортить, ему массовость подавай, запустил случайно и все dbf-ы (от оракла к примеру) в текущей директории "полегли". а настоящие с непотеряным индексом "вдруг" перестали его использовать. такой вот симпатичный троянчик получился. ;о))


 
Rule ©   (2005-08-23 15:15) [7]

sniknik ©   (23.08.05 12:46) [3]
путь хороший, надо его исопльзоват с умом вот и все ...


 
Rule ©   (2005-08-23 15:15) [8]

max1000   (23.08.05 13:38) [5]
ну ты перегнул прям ...


 
SimKa ©   (2005-08-23 15:33) [9]

Нашел несколько документов на этот счет;
По-человечески ...
(DBF, BDE) Как открыть индексированную таблицу ...отсутствует файл индекса?
http://www.akzhan.midi.ru/devcorner/akdbtnt-content/Akzhan%27s-Database-Delphi-related-Tips%27n%27Tricks-rus.html
Спасибо всем ...



Страницы: 1 вся ветка

Текущий архив: 2005.10.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.041 c
14-1127222932
SergProger
2005-09-20 17:28
2005.10.09
Восстановление файлов


1-1126773921
Shrike
2005-09-15 12:45
2005.10.09
выделения в TCustomGrid


2-1125292719
Гриха
2005-08-29 09:18
2005.10.09
Полтергейст в TStrings


4-1123763802
NeoMaster
2005-08-11 16:36
2005.10.09
WM &amp; Service &amp; GUI


1-1127117537
Wolferio
2005-09-19 12:12
2005.10.09
*.xls и *.doc (Внутрення структура файлов)