Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 17:22 10.05.24 
Клубове/ Компютри и Интернет / Delphi Всички теми Следваща тема Пълен преглед*
Информация за клуба
Тема Re: Съвет относно DBASE TDBGRID [re: vaskko76]
Авторgrey (Нерегистриран) 
Публикувано06.10.06 12:44  



Ето една работеща функция. Взел съм я от примерните програми на Delphi.
Тази функция премахва физически маркираните като изтрити записи и освен това преиндексира асоциираните индекси. Не забравяйте да добавите BDE към клауза USES.


{USES BDE}

function PackDBaseTable(Table: TTable):Boolean;
var
WasActive: Boolean;
TempTable: TTable;
vDateOfOldFile:TDateTime;
FileHandle : Integer;
vFilePathName:string;
begin
result := True;
WasActive := Table.Active;
Screen.Cursor := crHourglass;
TempTable := TTable.Create(Table.Owner);
try
try
// close if open
if WasActive then
Table.Close;
TempTable.Active := False;
TempTable.DatabaseName := Table.DatabaseName;
TempTable.TableName := Table.TableName;
TempTable.Exclusive := True;
if (TempTable.DatabaseName <> '') and
(Pos('\',TempTable.DatabaseName) > 0) then
vFilePathName := TempTable.DatabaseName + TempTable.TableName
else
vFilePathName := ExtractFilePath(Application.ExeName) + TempTable.TableName;
try
vDateOfOldFile := FileDateToDateTime(FileAge(vFilePathName));
except
vDateOfOldFile := 0;
end;
try
TempTable.Open;
except
beep;
ShowMessage('Файл ' + Table.TableName + ' е отворен от друг потребител!' +
#13 + 'Индексирането е невъзможно.' +
#13 + 'Опитайте по късно.');
result := False;
end;
if TempTable.Active then
begin
// pack the table
Check (DBIPackTable(TempTable.DBHandle, TempTable.Handle, nil, nil, True));
TempTable.Close;
if vDateOfOldFile > 0 then
begin
FileHandle := FileOpen(vFilePathName,fmOpenWrite or fmShareDenyNone);
if FileHandle > 0 then
begin
{valid file handle}
FileSetDate(FileHandle, DateTimeToFileDate(vDateOfOldFile));
FileClose(FileHandle);
end
else
begin
{Open error: FileHandle = negative DOS error code}
end;
end;
end;
except
result := False;
raise;
end;
finally
TempTable.Free;
Screen.Cursor := crDefault;
// eventually reopen
if WasActive then
Table.Open;
end;
end;




Цялата тема
ТемаАвторПубликувано
* Съвет относно DBASE TDBGRID vaskko76   26.09.06 14:56
. * Re: Съвет относно DBASE TDBGRID Beco_   26.09.06 23:06
. * Re: Съвет относно DBASE TDBGRID grey   06.10.06 12:44
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.