Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.365 c
14-1126797084
ArtemESC
2005-09-15 19:11
2005.10.09
ОС


1-1126950890
_lbp
2005-09-17 13:54
2005.10.09
Помогите разобраться с edit-тами


1-1127132202
Denned
2005-09-19 16:16
2005.10.09
Drag&amp;Drop в DBGrid


2-1125058102
_zx
2005-08-26 16:08
2005.10.09
запуск файла из командной строки


14-1126620797
Вопрошающий
2005-09-13 18:13
2005.10.09
Сцылки на книжки по Жабе 2





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский