Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


KaPaT ©   (2002-03-24 22:32:00) 

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


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

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

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

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


sniknik   (2002-03-27 08:12:00) [2]

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


Anatoly Podgoretsky   (2002-03-26 22:30:00) [3]

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


deleon   (2002-03-26 13:03:00) [4]

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


sniknik   (2002-03-26 11:57:00) [5]

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


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

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


sniknik   (2002-03-26 09:03:00) [7]

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


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

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


drpass   (2002-03-25 18:20:00) [9]

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


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

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

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


sniknik   (2002-03-25 08:51:00) [11]

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

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


Anatoly Podgoretsky   (2002-03-25 08:08:00) [12]

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

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


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

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


sniknik   (2002-03-24 23:46:00) [14]

Что такое DE?


sniknik   (2002-03-24 23:44:00) [15]

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


KaPaT   (2002-03-24 23:42:00) [16]

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


KaPaT   (2002-03-24 23:31:00) [17]

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


sniknik   (2002-03-24 23:08:00) [18]

Упаковать.

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;

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо