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

Вниз

Объясните такую штуку, пожалуйста   Найти похожие ветки 

 
KaPaT ©   (2002-03-24 22:32) [0]

Удалил все записи в базе (Paradox), а ее размер остался тем же! Как такое может быть?


 
sniknik ©   (2002-03-24 23:08) [1]

Упаковать.

procedure TForm1.PackTable(Table: TTable);
var
Props: CURProps;
hDb: hDBIDb;
TableDesc: CRTblDesc;
begin
if not Table.Active then raise EDatabaseError.Create("Table must be opened to pack");
if not Table.Exclusive then raise EDatabaseError.Create("Table must be opened exclusively to pack");
Check(DbiGetCursorProps(Table.Handle, Props));
if (Props.szTableType = szPARADOX) then begin
FillChar(TableDesc, sizeof(TableDesc), 0);
Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb)));
StrPCopy(TableDesc.szTblName, Table.TableName);
StrPCopy(TableDesc.szTblType, Props.szTableType);
TableDesc.bPack := True;
Table.Close;
Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False));
end else
if (Props.szTableType = szDBASE) then Check(DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBASE, True))
else raise EDatabaseError.Create("Table must be either of Paradox or dBASE type to pack");
Table.Open;
end;

При удалении ставится пометка "удален" физически не удаляется.


 
KaPaT ©   (2002-03-24 23:31) [2]

Ешкин кот! А автоматически он не делает?


 
KaPaT ©   (2002-03-24 23:42) [3]

Так такую штуку можно в DE провернуть


 
sniknik ©   (2002-03-24 23:44) [4]

Нет. И считается что это круто. Можно восстановить если неправильно удалил. (своеобразная мусорная корзина как в Windows)


 
sniknik ©   (2002-03-24 23:46) [5]

Что такое DE?


 
KaPaT ©   (2002-03-25 00:02) [6]

Database Explorer!
Там есть галочка Pack Table


 
Anatoly Podgoretsky ©   (2002-03-25 08:08) [7]

sniknik © (24.03.02 23:44)
Это кем считается, тобой?

KaPaT © (24.03.02 23:31)
Если будешь добавлять, то это место повторно используется, а если нет то проведи реструктизацию таблицы, автоматически не делается.


 
sniknik ©   (2002-03-25 08:51) [8]

Anatoly Podgoretsky ©
Я так не считаю но отношусь нормально. Пару раз это меня спасало. И даже не в смысле восстановления данных а в материальном (на заре моей рабочей деятельности я работал программистом-оператором и както меня обвинили что я не завел какуюто накладную (типа заигрался, начальник далекий от компьютеров считал программирование искличительно игрой) хотели лишить премии, а там в данных сохранялось кто делал и кто удалил дальнейшее думаю понятно).

KaPaT ©
В моем случае это Database Desktop и пункт в меню Restructure...
Сокращения не способствуют пониманию.


 
MIA   (2002-03-25 18:16) [9]

Как я понимаю, что вытекло из работы непомредственно с файлами таблиц.
Если удаляешь построчно, то в файле лишь ставится галочка удалённой записи. И дальше при вводе новой строки она записывается на место удалённой.

Для удаления всех строк стоит пользоваться EmptyTable. Чистит на уровне файла.


 
drpass ©   (2002-03-25 18:20) [10]

Не знаю, как это круто, но основной критерий работы с БД - скорость выполнения запросов. И если файловой системе придется делать меньше операций по расширению файлов таблиц при добавлении записей, и по их сжатию при удалении, то запросы будут выполняться быстрее. Поэтому при удалении записи не стираются физически, а вовсе не для возможности отмены их удаления - для этого придуманы транзакции


 
deleon   (2002-03-26 08:10) [11]

В Paradox - запись при удалении удаляется физически, а не ставится пометка на удаление, а место не уменьшается, т.к. остаются блоки которые помещаются в список свободных блоков.


 
sniknik ©   (2002-03-26 09:03) [12]

deleon позвольте вам не поверить, возьмите пустую Paradox таблицу с удаленными записями и откройте текстовым редактором все записи на месте. Т.е. физического удаления не происходит.
Другое дело что восстановление не поддерживается как в Dbf, изза блочной структуры или по другим причинам неважно.


 
deleon   (2002-03-26 09:29) [13]

Нет, как раз в Pdx удаление происходит физически в блоке, записи следующие за удаленной записью в блоке, смещаются на размер удаленной записи, т.е. затирают ее. Header блока содержит лишь информацию: номер предыдущего блока, следующего блока и адрес последней записи блока, на все 6 байт. Если вы в текстовом файле видите уже удаленные записи, значит они просто были последними записями в блоке и на них не происходило смещения, т.е. свободное место блока нулями не забивается, а изменяется лишь адрес последней записи в блоке, а вот если удалять не последнюю запись в блоке, то все последующие записи наедут на нее. Честно говоря, по формату хранения данных Paradox, я могу прочитать целую лекцию, но зачем? Кому надо - сам разберется, хотя там не все так просто как в dBase :))) Удачной всем упаковки таблиц :)))


 
sniknik ©   (2002-03-26 11:57) [14]

deleon вы правы я проверил, удалял первую запись в таблице без индексов после того как таблица опустела в редакторе были одни и теже данные из последней записи.
Насчет лекций подумайте или напишите книгу, хороших мало, в крайнем случае сайт, что знаниям зря пропадать. :)


 
deleon   (2002-03-26 13:03) [15]

[sniknik] - спасибо, я подумаю :)))


 
Anatoly Podgoretsky ©   (2002-03-26 22:30) [16]

sniknik © (25.03.02 08:51)
Ты или путаешь с дбейс или речь про хакерские методы


 
sniknik ©   (2002-03-27 08:12) [17]

dBase с Paradox перепутать? Шутиш! :)


 
ALFA   (2002-03-27 17:35) [18]

Полная очистка таблиц базы данных осуществляется функцией DbiEmpetyTable из API BDE.
Программирование в Delphi 5

Посмотри также Table1. EmptyTable

Очистка недоступных данных!!!!
Записи не удаляются, а только становятся недоступной.



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

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

Наверх




Память: 0.51 MB
Время: 0.01 c
1-57697
Shrek
2002-04-07 18:01
2002.04.18
Как прочитать открытый txt - файл другой программы.


14-57876
Olgerd
2002-03-11 21:07
2002.04.18
HELP!!!


1-57770
Поклонение Отцам!
2002-04-05 20:36
2002.04.18
помогите Ламеру Вопрос по TClipBoard :)


14-57872
ATLANTIDO
2002-03-07 18:45
2002.04.18
Комп. Клуб


1-57732
LazorenkoX
2002-04-04 21:58
2002.04.18
Консоль вопрос 1