Форум: "Базы";
Текущий архив: 2002.08.22;
Скачать: [xml.tar.bz2];
ВнизКак проиндексировать базу Найти похожие ветки
← →
NDR (2002-07-31 12:10) [0]Упаковать-то, упаковали. СПАСИБО = Leran2002!
А как програмно переиндексировать таблицу.
чтоб потом выполнить упаковку.
Вообще под индексацией что понимается ?
я незнаю процесса.
мне кажется.но наверно это совсем не так.
что. индексы удаляются, а затем пересоздаются.
чё написал? сам непонял =)
УВАЖАЕМЫЕ МАСТЕРА Расскажите пожалуйста как провести ИНДЕКСАЦИЮ
базы. (переиндексацию).
С Уважением и неисчерпаемой благодарность, NDR
← →
Leran2002 (2002-07-31 13:07) [1]Если у вас установлена библиотека RXLib то переиндексацию можно сделать так:
Uses BdeUtils;
procedure TForm1.Button2Click(Sender: TObject);
begin
ReindexTable(Table1);
end;
Если же у вас RXLib не установлена, то вот вам функция переиндексации:
Uses BDE;
// выцарапано из RXLib
procedure ReindexTable(Table: TTable);
var
WasActive: Boolean;
WasExclusive: Boolean;
begin
with Table do begin
WasActive := Active;
WasExclusive := Exclusive;
DisableControls;
try
if not (WasActive and WasExclusive) then Close;
try
Exclusive := True;
Open;
Check(dbiRegenIndexes(Handle));
finally
if not (WasActive and WasExclusive) then begin
Close;
Exclusive := WasExclusive;
Active := WasActive;
end;
end;
finally
EnableControls;
end;
end;
end;
При тестировании данного примера проект также необходимо закрыть, а то Дельф будет блокировать таблицу.
При переиндексации все имеющиеся индексы таблицы создаются по новой.
Надеюсь помог.
← →
NDR (2002-08-01 07:58) [2]Сильно благодарен! =)
← →
Leran2002 (2002-08-01 08:40) [3]Всегда рад помочь БРАТЬЯМ по РАЗУМУ!!! ;-))
← →
Tornado (2002-08-01 11:49) [4]Регенерация индексов таблицы Базы Данных (проверялось только на файлах DBF)
Нужно подключить модули :
DBTables, DB, dbiProcs,DbiErrs,dbiTypes;
Здесь, если NrErr>0 , то вывод на экран сообщения об ошибке (если была ошибка).
function TableRegenIndexes(NrErr : byte;Tbl : TTable) : Boolean;
Var
YesEx,YesAct : byte;
S : String;
Res,Res1 : DBIResult;
CCC : array[0..255] of Char;
begin
YesEx:=0;
if Tbl.Exclusive then YesEx:=1;
YesAct:=0;
if Tbl.Active then YesAct:=1;
Tbl.Active:=FALSE;
Tbl.Exclusive:=TRUE;
Tbl.Active:=TRUE;
Res:=DbiRegenIndexes (Tbl.Handle);
Tbl.Active:=FALSE;
if YesEx<=0 then Tbl.Exclusive := FALSE;
if YesAct>0 then Tbl.Active:=TRUE;
if Res=0 then begin
Result:=TRUE;
end
else begin
if NrErr>0 then begin
Res1:=DbiGetErrorString (Res,CCC);
Str(Res,S);
S:="Ошибка реген.индекс.: "+S+" -> "+StrPAS(CCC)+" для : "+Tbl.TableName;
MessageBeep(mb_IconHand);
MessageDlg(S,mtError,[mbOk],0);
end;
end;
end;
еще вариант :)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.08.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c