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

Вниз

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

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

Наверх





Память: 0.46 MB
Время: 0.008 c
1-60109
Kudatsky
2003-06-06 10:48
2003.06.19
Заголовок в TOpenDialog


1-60159
malefik
2003-06-06 19:49
2003.06.19
Проверка существования обьекта???Перехват окном нажатие клавиши..


14-60367
Lola
2003-06-02 14:00
2003.06.19
Специалистам в Аccess


14-60424
revo
2003-06-03 15:51
2003.06.19
Где скачать AsyncPro?


1-60128
pavel_k
2003-06-04 22:27
2003.06.19
Splitter и Hint





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский