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

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

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 23:43 26.04.24 
Компютри и Интернет
   >> Delphi
Всички теми Следваща тема *Кратък преглед

Тема Съвет относно DBASE TDBGRID  
Автор vaskko76 (непознат )
Публикувано26.09.06 14:56



Здравейте,

чрез table1.delete изтривам запис от TTable обаче въпреки че не се визуализира в TDBGRID записа си остава в DBF файла как запис може да се изтрие окончателно? Моля за съвет



Тема Re: Съвет относно DBASE TDBGRIDнови [re: vaskko76]  
Автор Beco_ (Boogie chillun)
Публикувано26.09.06 23:06



Добър въпрос. Въпреки, че веднага възниква друг: защо ти е нужно това ?
Маркираните за изтрити записи не се появяват с ТТаble, или SQL изрази. Има смисъл да ги триеш само, ако добавяш/изтриваш много на бр. записи от една таблица. Но ако наистина е така, значи нещо не си догледал в дизайна на БД. Но, ако все пак искаш да ги триеш перманентно виж това:

- Packing tables



Тема 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;





Всички темиСледваща тема*Кратък преглед
Клуб :  


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

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