Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
7-57901
ATLANTIDO
2002-01-25 13:35
2002.04.18
кЛАВА


4-57913
skywalker
2002-02-15 13:20
2002.04.18
Получение информации о процессах под NT!!!!!!!!


3-57580
Юра
2002-03-26 16:41
2002.04.18
Cвязывание таблиц


3-57613
vitnt2000
2002-03-19 07:31
2002.04.18
Доступ к даныым DBF (Fox)


6-57829
Брыкун Дмитрий
2002-02-06 14:50
2002.04.18
Как написать письмо?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский