Главная страница
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.038 c
14-1127288301
BiN
2005-09-21 11:38
2005.10.09
Пробрало


2-1125301044
kyn66
2005-08-29 11:37
2005.10.09
Как изменит фон в ячейке StringGrid ?


3-1125167604
lookin
2005-08-27 22:33
2005.10.09
База данных


4-1123652186
pepper
2005-08-10 09:36
2005.10.09
Отключение сетевыеx дисков


2-1125050572
oradb
2005-08-26 14:02
2005.10.09
Привязать объект к item-у listbox