Форум: "Базы";
Текущий архив: 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
Очистка недоступных данных!!!!
Записи не удаляются, а только становятся недоступной.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c