Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];




Вниз

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


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

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




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.75 MB
Время: 0.02 c
1-57724           kjj                   2002-04-08 10:09  2002.04.18  
Как отсортировать массив?


14-57857          Blacki                2002-03-10 23:34  2002.04.18  
Функции для определения железа


1-57690           lipskiy               2002-04-07 15:34  2002.04.18  
Как определить доступность каталога для записи?


14-57874          Kozhanov              2002-03-12 13:47  2002.04.18  
Поддержка программой нескольких языков...


3-57582           Dimulka-9             2002-03-26 12:32  2002.04.18  
Перенос данных из Access в IB6