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

Вниз

Переиндексация   Найти похожие ветки 

 
Term   (2003-05-28 10:21) [0]

Для переиндексации использую

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;

взял процедуру на этой конференции автор Dred2K, при её выполнении выдаётся ошибка "Must use baseorder for this operation", может или автор или еще ктонить разъяснит в чом проблема?


 
Новачок   (2003-05-28 10:32) [1]

Такая ошибка встречается обычно, когда "база порядка" используется некорректно.

Я сам сейчас мучаюсь над этой проблемой.
Если найдется решение - очень хотелось бы услышать.


 
Term   (2003-05-28 10:33) [2]

Народ ну ктонить, неужто никто не переиндексировал парадокс не разу, так не бывает, ответьте


 
Term   (2003-05-28 10:34) [3]

поясни как это " "база порядка" используется некорректно"?


 
Term   (2003-05-28 10:38) [4]

да чо все поумерли штоли


 
VAleksey ©   (2003-05-28 10:40) [5]

Надо так:

Table:=TTable.Create(nil);
Table.DataBaseName:=TableForReindex.DataBaseName;
Table.TableName:=TableForReindex.TableName;
TableForReindex.Close;
procedure ReindexTable(Table);
TableForReindex.Open;

baseorder - Непосредственный доступ к таблице. Ес-сно его нет если ты используешь объекты поля или лукап поля и тому подобное.


 
Term   (2003-05-28 10:43) [6]

спасибо буду пробовать


 
гончий   (2003-05-28 10:43) [7]

2VAlexey - так делать необязательно, тк в вышеуказанной процедуре набор данных и так закрывается и переоткрывается в эксклюзивном режиме. А вот на счет ошибки, это скорее всего и есть lookup поля(возможно Referential Integrity)


 
Verg ©   (2003-05-28 10:44) [8]

Я вот так переиндексировал:



var
SrcTbl : TTable;

function RebuildIndexes(const Name : string; Se : boolean):boolean;
begin
result:=false;
try
SrcTbl.Close;
SrcTbl.TableName:=Name;
SrcTbl.IndexFieldNames:="";
SrcTbl.Exclusive:=true;
try
SrcTbl.Open;
SrcTbl.FieldDefs.Update;
SrcTbl.IndexDefs.Update;
FRecCount:=SrcTbl.RecordCount;
DBP.Active:=true;
DbTables.Check(DbiRegenIndexes(SrcTbl.Handle));
result:=true;
finally
SrcTbl.Close;
SrcTbl.Exclusive:=false;
end;
except
end;
end;


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


 
VAleksey ©   (2003-05-28 10:46) [9]

table.free;

Не забудь сделать.



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

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

Наверх




Память: 0.48 MB
Время: 0.021 c
3-60088
LeReve
2003-05-27 23:22
2003.06.19
как програмно изменить запись в БД???


1-60259
Bishop
2003-06-05 18:59
2003.06.19
векторизовать ttf шрифт


4-60463
YuVoUA
2003-04-14 14:09
2003.06.19
HELP_CONTEXTPOPUP


1-60236
killer
2003-06-05 15:33
2003.06.19
Можно ли сделать в Windows98 так, чтобы все было как в XP


14-60353
LOX
2003-05-31 13:03
2003.06.19
Kак позвонить на какой либо телефон?