Текущий архив: 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.46 MB
Время: 0.013 c